java导入ldif文件
网上导入ldif文件的方式都是基于命令,或者相应工具如LDAP Browser \Editor v2.8.2。
但用java去实现这样的功能好像网上很少,于是我参照相应的开源代码并整理了一下,亲自测试通过,若有疑问欢迎留言!!!
将ldap.jar导入到项目中
LDIFReader.java
package com.cn.ccc.ggg.ldap.core.common; import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPControl;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPLocalException;
import com.novell.ldap.LDAPMessage;
import com.novell.ldap.LDAPModification;
import com.novell.ldap.LDAPSearchResult;
import com.novell.ldap.LDAPAddRequest;
import com.novell.ldap.LDAPDeleteRequest;
import com.novell.ldap.LDAPModifyDNRequest;
import com.novell.ldap.LDAPModifyRequest;
import com.novell.ldap.util.Base64;
import com.novell.ldap.util.LDAPReader; /**
* 处理inputStream对象以读取LDIF文件的类
*
* <p>该calss从LDIF文件读取LDAP条目和LDAP请求</p>
*
* <p>构造函数使用默认大小值8,192来创建 缓冲字符输入流并假定大小很大足以容纳下一个字段的dn字段和第一行当前正在阅读的LDIF文件中的第一条记录</p>
*
* <p>构造函数使用'1'作为默认的LDIF文件版本</p>
*/
public class LDIFReader implements LDAPReader { private boolean requestFile=true; // request file=true
private String version; // LDIF file version
private int reqType; // int rep. of name
private int lNumber; // line number
private int dnlNumber; // dn line number
private int fNumber = 0; // number of fields
private byte[] bytes= new byte[0]; // for any byte value
private boolean control = false; // is control field
private String entryDN; // entry dn
private String[] modInfo; // for moddn
private ArrayList rFields = new ArrayList(); // record fields
private ArrayList cList = new ArrayList(); // control list
private BufferedReader bufReader;
private LDAPControl[] controls = null; // req controls
private LDAPEntry currentEntry = null;
private LDAPModification[] mods;
private LDAPMessage currentRequest = null; /**
* 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象,
* InputStreamReader和BufferedReader
*
* @param in The InputStream object to be processed by LDIFReader
*/
public LDIFReader( InputStream in )
throws IOException, LDAPLocalException
{
this( in, 1, 8192 );
return;
} /**
* 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象,
* InputStreamReader和BufferedReader
*
* @param in The Inputstream object to be processed by LDIFReader
* @param version The version currently used in the LDIF file
*/
public LDIFReader( InputStream in, int version )
throws IOException, LDAPLocalException
{
this( in, version, 8192 );
return;
}
/**
* 通过初始化LDIF_VERSION,isRequest构造LDIFReader对象,
* InputStreamReader和BufferedReader
*
* @param in The Inputstream object to be processed by LDIFReader
* @param version The version currently used in the LDIF file
* @param bufSize The size used to create a buffering character-input
* stream. The defaule value is 8,192.
*/
public LDIFReader(InputStream in, int version, int bufSize)
throws IOException, LDAPLocalException
{ super(); String line = null; if ( version != 1 ) { // check LDIF file version
throw new RuntimeException("com.novell.ldap.ldif_dsml.LDIFReader:"
+ "found: " + version + ", Should be: 1");
} setVersion( version );
InputStreamReader isr = new InputStreamReader(in, "US-ASCII");
bufReader = new BufferedReader(isr); //为了确定它是否是LDIF内容文件或LDIF更改
//文件,dn字段的第一行和旁边的有意义的行
// dn字段被读入内存。 //在版本行之前跳过前面的空行和注释行
/* while( (line = bufReader.readLine())!= null &&
(line.length() == 0 || line.startsWith("#")) ) {
this.lNumber++;
} //已经到达文件的末尾 if ( line == null ) {
throw new LDAPLocalException(
"com.novell.ldap.ldif_dsml.LDIFReader:"
+ " The file contains no LDIF info",
LDAPException.LOCAL_ERROR);
} //需要增加行号
this.lNumber++; // 1 //第一个有效行(版本行)。 检查版本行 if (line.startsWith("version:")) {
this.version = line.substring("version:".length()).trim();
if ( !this.version.equals( "1") ) {
throw new LDAPLocalException(
"com.novell.ldap.ldif_dsml.LDIFReader: "
+ "version: found '" + version + "' (on line "
+ this.lNumber + " of the file), should be '1'",
LDAPException.LOCAL_ERROR);
}
}else { // 第一行有效行不是版本行
throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:"
+ " Version line must be the first meaningful line(on line " +
this.lNumber + " of the file)",
LDAPException.LOCAL_ERROR);
}
*/ // 跳过版本行和之间的空行和注释行
// LDIF的第一个记录中的dn字段的第一行
// 文件,读取第一条记录的dn字段的第一行
do {
//标记第一个dn行,所以我们以后可以回到这里
bufReader.mark( bufSize );
line=bufReader.readLine(); if ( line == null) { // end of file
throw new LDAPLocalException( "com.novell.ldap.ldif_dsml."
+ "LDIFReader: the LDIF file only contains version line.",
LDAPException.LOCAL_ERROR);
}
this.lNumber++;
} while((line.length()== 0) || line.startsWith("#")); //稍后会检查dn字段; 现在忽略了其余的一行
// dn字段,并在dn字段后面读取有效行
while ( (line = bufReader.readLine()) != null ) { // ! a part of dn field ! a comment line
if ( !line.startsWith(" ") && !line.startsWith("#") ) {
//到第一个记录的结尾
if ( line.length() == 0 ) {
//空行 这个记录只有dn字段
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: the first record only has dn field(line "
+ this.lNumber + " of the file)",
LDAPException.LOCAL_ERROR);
}
//刚刚读取的行应该是开头的行
//'control', 'changetype', 属性名
break;
}
} if ( line == null) { // end of file
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: the first record only has dn field(line "
+ this.lNumber + " of the file)",
LDAPException.LOCAL_ERROR);
} if(line.startsWith("changetype")||line.startsWith("control")){
setRequest(true); // LDIF使用LDAP操作请求更改文件
}
else {
setRequest(false); // 带有LDAP条目的LDIF内容文件
} setRequest(true); //返回到LDIF文件的第一个记录的开头
//稍后读取可以从第一条记录开始
bufReader.reset(); //
this.lNumber--;
return;
} /**
* 获取与输入流相关联的LDIF数据的版本
*
* @return the version number
*/
public String getVersion()
{
return version;
} /**
* 获取与输入流相关联的LDIF数据的版本
*
* @param value the version number
*/
private void setVersion(int value)
{
version = String.valueOf(value);
return;
} /**
* 如果请求数据与输入流相关联,则返回true,
* 或如果内容数据为false。
*
* @return true if input stream contains request data.
*/
public boolean isRequest()
{
return requestFile;
} /**
* 设置正在读取的文件的请求类型,如果请求数据为true
* 或如果内容数据为false。
*
* @param type sets the type of file to content or request data.
*/
private void setRequest( boolean type)
{
requestFile = type;
return;
} /**
* 从LDIF请求(更改)文件或内容文件读取LDAP请求。.
*
* @return LDAPMessage specified by the record
*/
public LDAPMessage readMessage()
throws IOException, LDAPException
{
readRecordFields(); // 读取记录字段
if ( this.rFields == null ) { // 文件结尾
return null;
}
toRecordProperties(); // 设置记录属性 if (!isRequest()) {
return new LDAPSearchResult(currentEntry, null);
} switch( this.reqType ) {
case LDAPMessage.SEARCH_RESPONSE :
this.currentRequest = new LDAPAddRequest(currentEntry, controls);
break;
case LDAPMessage.ADD_REQUEST :
this.currentRequest = new LDAPAddRequest(currentEntry, controls);
break;
case LDAPMessage.DEL_REQUEST :
this.currentRequest = new LDAPDeleteRequest(this.entryDN, controls);
break;
case LDAPMessage.MODIFY_RDN_REQUEST :
boolean delOldRdn; if ( Integer.parseInt(this.modInfo[1]) == 1 ) {
delOldRdn = true;
} else {
delOldRdn = false;
} if((modInfo[2].length())==0 ) {
this.currentRequest = new LDAPModifyDNRequest( this.entryDN,
this.modInfo[0], null, delOldRdn, controls);
} else {
this.currentRequest = new LDAPModifyDNRequest(this.entryDN,
this.modInfo[0], modInfo[2], delOldRdn, controls);
}
break;
case LDAPMessage.MODIFY_REQUEST :
this.currentRequest =
new LDAPModifyRequest(this.entryDN, mods, controls);
break;
default:
} return this.currentRequest;
} /**
* 读取当前记录中的所有行,将记录行转换为
* 记录字段,并修剪记录字段中的多余空格。
*/
private void readRecordFields()
throws IOException, LDAPException
{ String line;
StringBuffer bLine = new StringBuffer(80); // clean rFields
this.rFields.clear(); //跳过空和注释行并读取第一个dn
//行记录
while( (line = bufReader.readLine())!= null &&
(line.length() == 0 || line.startsWith("#")) ) {
this.lNumber++;
} this.lNumber++;
this.dnlNumber = this.lNumber; if (line == null) { // 文件结尾
this.rFields = null;
}
else {
//检查dn行是否以'dn:'开头
if (!line.startsWith("dn:")) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml." +
"LDIFReacer: Any record should start with 'dn:'(on line "
+ this.lNumber + " of the file).",
LDAPException.LOCAL_ERROR);
} //保存第一个dn行
bLine.append(line); //读取除注释行之外的记录的其他行。
//读取停止在用于分隔的空行
//当前记录与下一个
while ((line = bufReader.readLine())!=null && line.length()!=0 ) {
if ( !line.startsWith("#") ) { //跳过注释行
if ( line.startsWith(" ") ) { //续行?
// trim off leading ' ' and append it to previous line
bLine.append(line.substring(1, line.length()));
}
else { // 新的一行
// handle pewvious field
bLine = trimField(bLine); // trime上一个字段
if(!this.control) { // 如果不是,保存它
this.rFields.add(bLine); // 一个控制字段
}
//处理新行
bLine = new StringBuffer(80);// create a new buffer
bLine.append(line); // to hold new line
}
}
this.lNumber++;
}
//修剪并保存最后一个字段
bLine = trimField(bLine);
this.rFields.add(bLine); this.lNumber++; // 增加行号
this.fNumber = this.rFields.size(); // 获取字段数
}
return;
} /**
* 设置记录属性。
* <p>对于LDIF内容记录,创建由此记录指定的LDAPEntry</p>
*
* <p>对于LDIF更改记录,根据请求类型,将创建LDAPEntry,modInfo或LDAPModifiction数组以及与请求相关联的控件</p>
*/
private void toRecordProperties()
throws IOException, LDAPException
{ int index;
String req; // set entry DN
StringBuffer dnField = (StringBuffer)this.rFields.get(0);
if (dnField.charAt(3) != ':') {
// commom string value
this.entryDN = dnField.substring( 3, dnField.length());
}
else {
// base64 encoded
this.bytes = Base64.decode(dnField, 4, dnField.length());
try {
this.entryDN = new String(this.bytes, "UTF-8");
} catch( UnsupportedEncodingException ue) {
throw new RuntimeException(
"UTF-8 String encoding not supported by JVM");
}
} if ( !isRequest() ) { // 是一个内容LDIF文件
toLDAPEntry();
} else { // 是一个更改LDIF文件
index = 10; // length of 'changetype'
// ctField - changetype field
StringBuffer ctField = (StringBuffer)this.rFields.get(1); this.reqType = LDAPMessage.ADD_REQUEST;
toLDAPEntry(); /*if(!ctField.substring(0, index).equalsIgnoreCase("changetype")) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+"LDIFReader: malformed changetype field in record starting"
+ " on line " + this.dnlNumber + " of the file).",
LDAPException.LOCAL_ERROR);
}
// 获取类型: 'add', 'delete','moddn', 'modrdn', or 'modify'
req = ctField.substring(index+1); // 设置请求类型
if ( req.equalsIgnoreCase("add") ) {
this.reqType = LDAPMessage.ADD_REQUEST;
toLDAPEntry();
}
else if ( req.equalsIgnoreCase("delete") ) {
this.reqType = LDAPMessage.DEL_REQUEST;
}
else if ( req.equalsIgnoreCase("modrdn") ) {
this.reqType = LDAPMessage.MODIFY_RDN_REQUEST;
toModInfo();
}
else if ( req.equalsIgnoreCase("moddn") ) {
this.reqType = LDAPMessage.MODIFY_RDN_REQUEST;
toModInfo();
}
else if ( req.equalsIgnoreCase("modify") ) {
this.reqType = LDAPMessage.MODIFY_REQUEST;
toLDAPModifications();
}
else {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: unsupported request type '" + req
+ "' specified in changetype filed of the record starting "
+ "on line " + this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}*/ if (this.cList.size() > 0) {
this.controls = new LDAPControl[this.cList.size()];
}
}
return;
} /**
* 处理LDIF记录字段以生成LDAPEntry。
*/
private void toLDAPEntry()
throws LDAPLocalException
{
int i, index, fieldIndex;
String attrName = null;
StringBuffer currentField;
LDAPAttributeSet attrSet = new LDAPAttributeSet(); if ( !isRequest() ) { // 跳过 dn 字段
fieldIndex = 0;
}
else { // 跳过dn,control和changetype字段
fieldIndex = 1;
} for (i=fieldIndex; i<this.fNumber; i++) {
currentField = (StringBuffer)this.rFields.get(i);
// ':' 分离属性名称和属性值
index = IndexOf(currentField, ':');
if (index == -1) { // ':' not found
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: missing ':' after attribute name in record "
+ "starting on line " + this.dnlNumber +" of the file.",
LDAPException.LOCAL_ERROR);
} // 获取属性名称
attrName = currentField.substring(0,index);
// 如果属性名称不存在,则添加
if ( attrSet.getAttribute(attrName) == null ) {
// add it to attrSet with no value
attrSet.add(new LDAPAttribute(attrName));
} if(currentField.length() > index+1){
// 将属性值添加到属性中
if (currentField.charAt(index+1)==':') {
// base64编码的属性值
attrSet.getAttribute(attrName).addBase64Value(currentField. substring(index+2));
} else if (currentField.charAt(index+1)=='<'){
// 文件URL属性值
attrSet.getAttribute(attrName).addBase64Value(currentField. substring(index+2));
} else {
// 字符串值
String vals=currentField.substring(index+1).trim();
attrSet.getAttribute(attrName).addValue(vals);
// attrSet.getAttribute(attrName).addValue(currentField.
// substring(index+1));
}
} else if(currentField.length() == index+1){
String vals=new String("");
attrSet.getAttribute(attrName).addValue(vals);
} }
// 构造currentEntry
this.currentEntry = new LDAPEntry(this.entryDN, attrSet);
return;
} /**
* 构建包含moddn信息的String数组对象。
*/
private void toModInfo() throws LDAPLocalException { int index = 6; // length of "newrdn"
int fieldIndex = 2; // reference newrdn field
this.modInfo = new String[3];
StringBuffer currentField = (StringBuffer)this.rFields.get(fieldIndex); if( ! currentField.substring(0, index+1).equalsIgnoreCase("newrdn:")) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:"
+ " malformed newrdn field in record starting on line "
+ this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR);
} // get newrdn
if ( currentField.charAt(index+1) != ':') {
// common string value
this.modInfo[0] = currentField.substring(index+1);
}
else {
// decode newrdn
this.bytes = Base64.decode( currentField, index+2,
currentField.length());
try {
this.modInfo[0] = new String(this.bytes, "UTF-8");
} catch( UnsupportedEncodingException ue) {
throw new RuntimeException(
"UTF-8 String encoding not supported by JVM");
}
} fieldIndex++; // reference deleteOleRDN field
index = 13; // length of "deleteoldrdn"
currentField = (StringBuffer)this.rFields.get(fieldIndex); if( ! currentField.substring(0, index).equalsIgnoreCase(
"deleteoldrdn:") ) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:"
+ " malformed deleteoldrdn field in record starting on line "
+ this.dnlNumber + " of the file.", LDAPException.LOCAL_ERROR);
} char c = currentField.charAt(index);
if (c == '1') {
this.modInfo[1] = new String("1");
}
else if (c == '0'){
this.modInfo[1] = new String("0");
}
else {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml.LDIFReader:"
+ " value for deleteoldrdn field should '0' or '1', found '" + c
+ "' in the record starting on line " + this.dnlNumber
+ " of the file.", LDAPException.LOCAL_ERROR);
} fieldIndex++; // reference newsuperior field if (fieldIndex == this.fNumber) { // no newsuperior spefified
this.modInfo[2] = new String("");
}
else { // there is a newsuperior
currentField = (StringBuffer)this.rFields.get(fieldIndex);
index = 12; // length of "newsuperior:"
if( ! currentField.substring(0, index).equalsIgnoreCase(
"newsuperior:")) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: malformed newsuperior field in the record "
+ "starting on line " + this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
} if ( currentField.charAt(index) != ':') {
// commom string value
this.modInfo[2] = currentField.substring(index);
}
else {
// base64 encoded value
this.bytes = Base64.decode( currentField, index+1,
currentField.length());
this.modInfo[2] = new String(this.bytes);;
}
}
return;
} /**
* 基于LDIF修改记录的内容构建LDAPModification数组。
*/
private void toLDAPModifications()throws LDAPLocalException{ int i, index;
int fieldIndex = 2; // 跳过 dn, control, and changetype 字段
String attrName, opName;
LDAPAttribute attr = null;
ArrayList modList = new ArrayList(); if (!(this.rFields.get(this.fNumber-1)).toString().
equalsIgnoreCase("-") ) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: modify record not ends with '-' in the record"
+ " starting on line " + this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
} // 填充LDAPModification数组对象
for (i=fieldIndex; i<this.fNumber; i++) {
// 找到":"分开mod操作和attr名称
index = IndexOf((StringBuffer)this.rFields.get(i), ':');
if (index == -1) { // ':' not found
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: malformed opName:attrName field in the record"
+ " starting on line " + this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
} StringBuffer nextField = (StringBuffer)this.rFields.get(i);
opName= nextField.substring(0, index);
attrName= nextField.substring(index+1); i++; // 指向attrName:attrValue字段
nextField = (StringBuffer)this.rFields.get(i); // 构建每个LDAPModification对象并将其添加到modList
if (nextField.charAt(0)!='-') {
// 至少有一个 属性名称:属性值 字段
for ( ; nextField.charAt(0)!='-';
i++, nextField = (StringBuffer)this.rFields.get(i)) {
// 下标分离属性名称和属性值
if ((index=IndexOf(nextField, ':')) == -1) {
throw new LDAPLocalException("com.novell.ldap."
+ "ldif_dsml.LDIFReader : no ':' found in attrName:"
+ "attrValue field in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}
else {
// 比较opName:attrName和 attrName:attrValue字段
String aName = nextField.substring(0, index);
if (!aName.equalsIgnoreCase(attrName)) {
throw new LDAPLocalException("com.novell.ldap."
+ "ldif_dsml.LDIFReader : found attribute name '"
+ aName + "', should be '" + attrName
+ "' in attrName:attrValue field in the record "
+ "starting on line " + this.dnlNumber
+ " of the file.", LDAPException.LOCAL_ERROR);
} // create attr and add value to it
attr = new LDAPAttribute(attrName);
if (nextField.charAt(index+1)==':') {
// base64 encoded attribute value
attr.addBase64Value(nextField.substring(index+2));
}
else if (nextField.charAt(index+1)=='<'){
// file URL attribute value
attr.addBase64Value(nextField.substring(index+2));
}
else {
// string value
attr.addValue(nextField.substring(index+1));
} if ( opName.equalsIgnoreCase("add") ) {
modList.add( new LDAPModification(
LDAPModification.ADD, attr));
}
else if ( opName.equalsIgnoreCase("delete") ) {
modList.add( new LDAPModification(
LDAPModification.DELETE, attr));
}
else if ( opName.equalsIgnoreCase("replace") ) {
modList.add( new LDAPModification(
LDAPModification.REPLACE, attr));
}
else {
throw new LDAPLocalException("com.novell.ldap."
+ "ldif_dsml.LDIFReader : Not supported modify "
+ " request (" + opName + ") specified in "
+ "record starting on line " + this.dnlNumber
+ " of the file.", LDAPException.LOCAL_ERROR);
}
}
}
} else {
// there is no attribute value specified; this could be
// true for 'delete' and 'replace' modify operation
attr = new LDAPAttribute(attrName); if ( opName.equalsIgnoreCase("delete") ) {
modList.add( new LDAPModification(
LDAPModification.DELETE, attr));
}
else if ( opName.equalsIgnoreCase("replace") ) {
modList.add( new LDAPModification(
LDAPModification.REPLACE, attr));
}
else {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: For '" + opName + "', no value "
+ "specified for atribute '" + attrName
+ "' in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}
}
}
this.mods = new LDAPModification[modList.size()];
this.mods = (LDAPModification[])modList.toArray(this.mods);
return;
} /**
* 返回指定字符首次出现的StringBuffer对象内的索引。
*
* @param bl The StringBuffer object
* @param ch The character to look for in the StringBuffer object
*
* @return The index of the first occurence of the character in the
* StringBuffer object, or -1 if the character does not occur.
*/
private int IndexOf(StringBuffer bl, int ch)
{ if (bl != null ) {
for (int i=0;i<bl.length(); i++) {
if(bl.charAt(i) == ch) {
return i;
}
}
}
return -1;
} /**
* <tt>去空字段<tt> 修剪一个字段中的多余空格。
*/
private StringBuffer trimField( StringBuffer line)
throws LDAPLocalException
{
int c, lastChar = 0, charIndex = 0;
char t;
char[] newChars;
boolean isEncoded=false, isURL=false, criticality = false;
String oid = null; if ((line == null)||((c=IndexOf(line,':'))==-1)) {
// not all fields contain ':'
return line;
} // elminate any trailing spaces
lastChar = line.length() - 1;
while( line.charAt(lastChar) == ' ') {
lastChar--;
} // create newChars
newChars = new char[lastChar+1]; if( (c > 6) && (line.substring(0,c).equals("control"))) {
// this is a control field
this.control = true;
c++; // skip past ':'
// eliminate any spaces after ':'
while( (c <= lastChar) && (line.charAt(c) == ' ')) {
c++;
}
}
else {
// not a control field. it's 'dn',
//'changetype', or 'attrName' field
this.control = false; // copy field name and ':', eg. 'dn:', 'changetype:', or 'attrName:'
line.getChars(0, c+1, newChars, 0);
// skip over copied chars
charIndex += c + 1;
// c points to char right after first ':'
c++;
} if(!this.control) {
// // not a control field. check if '::' or ':<'
if( c <= lastChar) {
t = line.charAt(c);
if( t == ':') {
newChars[charIndex++] = ':'; // save the ':' to
c++; // point to value
}
else if( t == '<') {
newChars[charIndex++] = '<'; // save the '<' to
c++; // point to value
}
} // for case like attr: <value>
boolean nonfile=false;
String fredir= line.substring(c);
if(fredir.length()>0 && fredir.charAt(0) != '<'){
String cstr=fredir.trim();
if(cstr.length()>0 && cstr.charAt(0) == '<'){
nonfile=true;
}
} // eliminate any space(s) after ':' or '<'
while( (c <= lastChar) && (line.charAt(c) == ' ')) {
c++;
} // for case like attr: <value>
if(nonfile==true){
c--;
} if( c <= lastChar) { // thers is a value specified
// copy field value
line.getChars(c, lastChar+1, newChars, charIndex); charIndex += lastChar - c + 1;
// create a new StringBuffer object with capacity of lastChar
StringBuffer newBuf = new StringBuffer(lastChar);
// copy the filed represented by newChars
newBuf.append( newChars, 0, charIndex);
// return the trimed field
return newBuf;
}
else if ( line.length() == c){
StringBuffer newBuf= new StringBuffer();
line.getChars(c, lastChar+1, newChars, charIndex);
charIndex += lastChar - c + 1;
newBuf.append( newChars, 0, charIndex);
return newBuf;
} else { // there is no value specified
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: a field contains no value after ':'. the "
+ "field is in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}
}
else { // a control field
// process values for control. a control field may looks like
// 1. control: 1.2.3.4 true: control value
// 2. control: 1.2.3.4: control value
// 3. control: 1.2.3.4
// extra spaces are possible between oid, criticality, and value.
// oid is a must, while criticalitty and value can be absent. // get control oid
int b = c;
while(c <= lastChar) {
// an oid consists of dots and digits
t = line.charAt(c);
if( (t == '.') || (Character.isDigit(t))) {
c++;
continue;
}
break;
} if( b == c) { // control with no oid
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: Control with no oid in the record "
+ "starting on line " + this.dnlNumber
+ " of the file.", LDAPException.LOCAL_ERROR);
}
else { // control has iod, get local copy of oid
char[] chars = new char[c-b];
line.getChars(b, c, chars, 0);
oid = new String(chars);
} if ( c > lastChar) {
// control only has an oid. create LDAPControl object
// with oid, 'false' and empty byte array
LDAPControl ctrl = new LDAPControl(oid, false, new byte[0]);
// add it to cList
this.cList.add(ctrl);
return null; // return value has no use
} // get control criticality
t = line.charAt(c);
if( t == ' ') {
// see a space, skip over any spaces
while( (c <= lastChar) && (line.charAt(c) == ' ')) {
c++;
}
}
// what we see now? 'true', 'false', or ':' ?
if(((c + 3) <= lastChar)&&(line.substring(c,c+4).equals("true"))) {
// found 'true'
c += 4;
criticality = true;
}
else if(((c+4)<=lastChar)&&(line.substring(c,c+5).equals("false"))){
// found 'false'
c += 5;
criticality = false;
} if (c > lastChar) { // to the end of the control field
// create LDAPControl object with oid,
// criticality, and empty byte array
LDAPControl ctrl=new LDAPControl(oid, criticality, new byte[0]);
// add it to cList
this.cList.add(ctrl);
return null;
} if ((t=line.charAt(c)) != ':') {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: Unexcepted char '" + t + "'. Expecting "
+ "to see ':' in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
} // get control value
c++; // go to enst char after ':'
if (c > lastChar) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: No control value after ':' "
+ "in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
} // positioned at the first char right after ':'
// check if '::' or ':<'
t = line.charAt(c);
if( t == ':') {
isEncoded = true; // indicate encoded value
c++; // point to value
if (c > lastChar) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: No control value after '::' "
+ "in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}
}
else if( t == '<') {
isURL = true; // indicate file URL value
c++; // point to value
if (c > lastChar) {
throw new LDAPLocalException("com.novell.ldap.ldif_dsml."
+ "LDIFReader: No control value after ':<' "
+ "in the record starting on line "
+ this.dnlNumber + " of the file.",
LDAPException.LOCAL_ERROR);
}
} // eliminate any space(s) after ':', '::' or ':<'
while((c <= lastChar) && (line.charAt(c) == ' ')) {
c++;
} if(c <= lastChar) { // thers is a value spec specified
char[] chars = new char[lastChar+1-c];
line.getChars(c, lastChar+1, chars, 0); if (isEncoded) {
this.bytes = Base64.decode(chars);
}
else if (isURL) {
// if isURL, what to do?
this.bytes = (new String(chars)).getBytes();
}
else {
this.bytes = (new String(chars)).getBytes();
}
}
// create LDAPControl object
LDAPControl ctrl = new LDAPControl(oid, criticality, this.bytes);
// add it to cList
this.cList.add(ctrl);
}
return null;
}
}
LdifImport.java 完整代码
package com.cn.ccc.ggg.ldap.core.common; import java.util.Enumeration; import java.util.Iterator; import javax.naming.directory.DirContext; import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.directory.server.protocol.shared.store.LdifFileLoader; import com.novell.ldap.LDAPAddRequest;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPDeleteRequest;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPMessage;
import com.novell.ldap.LDAPMessageQueue;
import com.novell.ldap.LDAPModifyDNRequest;
import com.novell.ldap.LDAPModifyRequest;
import com.novell.ldap.LDAPResponse;
import com.novell.ldap.LDAPSearchResult; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException; public class LdifImport { protected final Log logger = LogFactory.getLog(getClass());
/**
* @param args
* @date 2017年10月12日17:33:03
*/
public boolean importLdif(String [] args){
if (args.length != 4) {
usage();
return false;
}
int version = 1;
int ldapPort = LDAPConnection.DEFAULT_PORT;
int ldapVersion = LDAPConnection.LDAP_V3;
String fileName = args[0];
String ldapHost = args[1];
String loginDN = args[2];
String password = args[3];
LDIFReader reader = null;
LDAPEntry entry;
LDAPMessage msg, retMsg;
LdifImport readerTest = new LdifImport();
LDAPConnection lc = new LDAPConnection();
File file = new File(fileName);
if(!file.exists()){
logger.error("要读取的文件不存在");
return false;
}
try {
FileInputStream fis = new FileInputStream(new File(fileName));
reader = new LDIFReader(fis, version);
} catch (Exception e) {
logger.error("读取 " + fileName +"文件失败");
return false;
}
try {
// 连接LDAP服务
lc.connect( ldapHost, ldapPort );
// 绑定LDAP服务
lc.bind( ldapVersion, loginDN, password.getBytes("UTF8") ); if (!reader.isRequest()) { System.out.println("\nLDIF content file\n"); while ( (msg = reader.readMessage()) != null) { entry = ((LDAPSearchResult)msg).getEntry(); System.out.println("\nEntry DN:" + entry.getDN()); readerTest.showAttributes(entry); } } else { System.out.println("\nLDIF change file\n"); while ( (msg = reader.readMessage()) != null) { if (msg instanceof LDAPAddRequest) { System.out.println("Adding entry..."); } else if (msg instanceof LDAPDeleteRequest) { System.out.println("Deleting entry..."); } else if (msg instanceof LDAPModifyDNRequest) { System.out.println("Modifying entry's RDN..."); } else if (msg instanceof LDAPModifyRequest) { System.out.println("Modifying entry's attribute(s)..."); } LDAPMessageQueue queue = lc.sendRequest(msg, null, null); if ((retMsg = queue.getResponse()) != null) { LDAPResponse response = (LDAPResponse)retMsg; int status = response.getResultCode(); // the return code is LDAP success if ( status == LDAPException.SUCCESS ) { System.out.println("Directory information has been" + " modified."); } // the reutrn code is referral exception else if ( status == LDAPException.REFERRAL ) { String urls[]=((LDAPResponse)retMsg).getReferrals(); System.out.println("Referrals:"); for ( int i = 0; i < urls.length; i++ ) System.out.println(" " + urls[i]); } // general error else { System.out.println( response.getErrorMessage()); } } System.out.println(); } } } catch( UnsupportedEncodingException e ) {
logger.error( "错误信息为:UnsupportedEncodingException");
} catch ( IOException ioe ) {
logger.error("错误信息为:IOException");
} catch ( LDAPException le ) {
logger.error("错误信息为:LDAPException"+le.getMessage());
}
return false;
} public void usage() { logger.error("用法: <文件名称> <IP> <登录名> <密码>");
logger.error("例如: demo.ldif 192.168.0.254 \"cn=Manager,c=中华人民共和国\" 123456" ); } public void showAttributes(LDAPEntry entry) { String value; LDAPAttributeSet as = null; LDAPAttribute[] attrs = null; LDAPAttribute attr = null; Iterator allAttrs; Enumeration allAttrValues; as = entry.getAttributeSet(); allAttrs = as.iterator(); System.out.println(" Attributes:"); while(allAttrs.hasNext()) { attr = (LDAPAttribute)allAttrs.next(); System.out.println(" " + attr.getName()); allAttrValues = attr.getStringValues(); if( allAttrValues != null) { while(allAttrValues.hasMoreElements()) { value = (String) allAttrValues.nextElement(); System.out.println(" " + value); } } } } public static void main(String[] args) {
LdifImport ldifImport = new LdifImport();
String[] arg = {"C:/Users/Administrator/Desktop/Ldif Datacenter/dq.ldif","192.168.0.254","cn=Manager,c=cn","123456"};
//测试导入ldif文件
ldifImport.importLdif(arg); }
}
dq.ldif文件内容为:
dn:: bz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24=
objectClass: organization
o:: 5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6F dn:: b3U955S15a2Q5pS/5Yqh5Yqe5YWs5a6kLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs
5Y6FLCBjPWNu
ou:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k
objectClass: organizationalUnit dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757ufLG91PeeU
teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j
bg==
EncryptnotAfter: 20200614115959DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdgxHjAcBgNVBAY
MFeS4reWNjuS6uuawkeWFseWSjOWbvTESMBAGA1UECAwJ5rW35Y2X55yBMScwJQYDVQQKDB7mtbf
ljZfnnIHkurrmsJHmlL/lupzlip7lhazljoUxHjAcBgNVBAsMFeeUteWtkOaUv+WKoeWKnuWFrOW
upDE2MDQGA1UEAwwt55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757u
fMSEwHwYJKoZIhvcNAQkBDBJsaXhpb25nQGJndC5obi5nb3YwdjAQBgcqhkjOPQIBBgUrgQQAIgN
iAARuWaJE4jO7gBZypBzQUYBjqtqGn/JGG7om2H8T7uz9SZcaIfL+h5Lu75pyN5Yqh57O757uf6L
qr5Lu96K6k6K+B57O757ufMSIwIAYJKoZIhvcNAQkBDBNsaXV4aW9uZ0BiZ3QuaG4uZ292MHYwEA
YHKoZIzj0CAQYFK4EEACIDYgAEU5G7LIzuFQ+8oEws7Nrd8ArCwdNxPbGoiAxjgiE6J8L8+6Y5Ny
CxbxQQcHKnWmkqtT8QEm6HRpHyOFTh4O+fWIWuQNWuHeDhuLX9t4fkbqX9cB61RMIOkuSYdyNM1c
9aow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EANefwg7k63w7RlirMG5TPq2hs5yG2hJ
1k4r0v2P/59BpPUwzIEUAxsp8HtSNus/qY4q5jrR0ZvhrNdwFN8pEZyfrW+hPOQ2rnznceid3upU
oxOWlyJQx++iTGuJiwKccm
objectClass: wstCertificateUser
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf57uT54K56K6k6K+B57O757uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWz
MSxvdT3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazl
joUsIGM9Y24=
EncryptCertificate;binary:: MIICrjCCAjqgAwIBAgIDAO/3MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdAxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TESMBAGA1UECAwJ5rW35Y2X55yBMRIwEAYDVQQHDAnmtbflj6PluIIxJzAlBgNVBAoMHua1t+WNl
+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5Yqh5Yqe5YWs5a6kM
T0wOwYDVQQDDDTnnIHmlL/lupzkv6Hku7vmnI3liqHns7vnu5/otYTmupDorr/pl67mjqfliLbnv
ZHlhbMxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJdbjSFVH/qJ7mn9OvRfFJcv5meB13NOZft5ck
ZzLEFdzCc8ABw8V1v0x+l6tRGrsbhEvlwWDZqLg8G/O8Vs4TKqbNceWb3JjY6xBMeUbx2BDDKMuN
3r43/YbscmFJvXLow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EAbdWEWguIXMhU1bIiJ
pPttbL7fjCDIsa32Pu8eKKsEnICQHwowrVkjzq1r/3ml5KTK+3ggglwFMNveMrTGByG9VrjiQ1ot
+5mrespR2FLADGdVdKxJ3clmeq27g7pgSRj
EncryptnotAfter: 20200614115959
objectClass: wstCertificateUser
EncryptserialNumber: EFF7
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWzMQ== dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWz
MixvdT3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3mtbfljZfnnIHkurrmsJHmlL/lupzlip7lhazl
joUsIGM9Y24=
EncryptCertificate;binary:: MIICrjCCAjqgAwIBAgIDAO/4MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgdAxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TESMBAGA1UECAwJ5rW35Y2X55yBMRIwEAYDVQQHDAnmtbflj6PluIIxJzAlBgNVBAoMHua1t+WNl
+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5Yqh5Yqe5YWs5a6kM
T0wOwYDVQQDDDTnnIHmlL/lupzkv6Hku7vmnI3liqHns7vnu5/otYTmupDorr/pl67mjqfliLbnv
ZHlhbMyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFDAcXvDayxxmC8Z1zxeKulVd+jLgw+Ai1UQ2y
kHBX8K+qTYQehzIRQiMrfx7BN0MnhtWS3A3x7MGmYcV1f9KAfwabk99eLGMhVPqaMpvvDs8r7PIo
hZGD6fy4YTz/YXqow8wDTALBgNVHQ8EBAMCA/gwCwYJKoEcgUUBh2gLA2EAqGtm6vCYADU+sGn73
vvAKt53vPRkQvrummU01afdawwJMBR+GQmNdkuMo+cYI2Jl+5z3K2wgcfKoFzBsxR7+ldFAlfw4v
xHRFOwHzgxo6TvkiL6kSHi6WGN0kFuvJ2rS
EncryptnotAfter: 20200614115959
objectClass: wstCertificateUser
EncryptserialNumber: EFF8
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ6K6/6Zeu5o6n5Yi2572R5YWzMg== dn:: b3U95bqU5oCl5YqeLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu
ou:: 5bqU5oCl5Yqe
objectClass: organizationalUnit dn:: Y249546L5oyv5a6HLG91PeW6lOaApeWKnixvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF
rOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/5MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmg
KXlip4xEjAQBgNVBAMMCeeOi+aMr+WuhzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNzB6M
BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAScYxXBQbH0z1lJp7SF2oeAlQKidASCBgPbazQlm7uX5
eDvOpzTcx6pW0na611Ifp6jHVCANE/YP6ljZcyOaVcHxlkqBNlpXysK/kYGJoEcXeJlAoykt55wn
b6WT6NM5kqjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQDbnnzwyc+YygA4sYPI4ruXy
zi1GL7ArhCxcLGJlCzZB4qOk1tl4MeI2hkDa7HWohVFseGZM6eDawnlhoYgziCXWO3umwIlQWk/I
aikJsiEx+cPqRd6YfrR0VKQGELocU0=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAKMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmgKXl
ip4xEjAQBgNVBAMMCeeOi+aMr+WuhzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNzB6MBQG
ByqGSM49AgEGCSqBHIFFAYdoCANiAAR79CLIZHbBRuvwO8gjSnFwkfRzMg3E21uALi39anq1cyrS
F9N7o42uEODEjKbGzQSZ6gfKfjAssBT38FOV3k8RJtUUtP0crfaGhIvrE6k87AxyX78cRa2KQOc2
DCOQDtKjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBVfwdkcKS4J86ntBmCbU2SGGvS
FwtrIENOvtHaDdQxGW/vNN7LXd5yqyG+O7NUlPGsOvrMOYnXIDwkzkRulssMhmtTEC1D8bIQHOv+
vZGhZxcNQxtS059fgW8JvjwHbJI=
objectClass: wstCertificateUser
serialNumber: F00A
EncryptserialNumber: EFF9
cn:: 546L5oyv5a6H dn:: b3U956eY5Lmm5aSELG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu
changetype:add
ou:: 56eY5Lmm5aSE
objectClass: organizationalUnit dn:: Y2495q+b5pet5ZCbLG91PeenmOS5puWkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF
rOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/6MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jku
ablpIQxEjAQBgNVBAMMCeavm+aXreWQmzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNDB6M
BQGByqGSM49AgEGCSqBHIFFAYdoCANiAARGHqzYbixoBc2j5YlZ4kli2AcOrclQeOibMlkV0KUZQ
umacnp8NHDY6LGkmauR8Ux7g7nfskn/PyF1NImXq/4AtkFFN9i+xtgc/rLC+APiVlFP+6+PfCgtF
/dxboIxfrGjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC2Xmq72mcTduYImECzlxHvK
fmibBKuC/UQgcSffId5egTUwerP07aPUnhY1WPtH0ZaZaIZaNJYiSg/Nde4G47KcbIhNYGlLy51l
rvqGcv3y2Wkq6DJCgJzAxBFAWjyE8A=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAGMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jkuabl
pIQxEjAQBgNVBAMMCeavm+aXreWQmzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNDB6MBQG
ByqGSM49AgEGCSqBHIFFAYdoCANiAAQupbkVlEm0gDMONZwm2TEmjW2yTIGt4E29fIcdCeibIRER
KuzdK74ooP/Y9DiyB36GZn99fXQx2edQE1QwTy8k+kpvTxhju5owkeLTgr5AxgSRATmZHeQzqpoN
ZaFXIW6jDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCFgDwc/BUo37U3FW2s/kOmzozC
cYyoAazxJlALmwRY+UhgzcBEawASSlCwTonWFpkWO2eTTtUhWPM56n/WXNS0b4wyTA7xGnYyCJHN
lLoUzKgjHGTortRlfFu4uXdV7TQ=
objectClass: wstCertificateUser
serialNumber: F006
EncryptserialNumber: EFFA
cn:: 5q+b5pet5ZCb dn:: Y2495YiY6Imz5pilLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw
keaUv+W6nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAO/7MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCeWImOiJs+aYpTEcMBoGCgmSJomT8ixkAQEMDDIyM
TIxMDAxMDAwMzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATV4f5bcNKedbU8foAgfiPbCTSY2
keftHKgSoISfWUgt+nIth5onA//lbasZYpqkB7LVBCYRvB6aSWp2Evq7KBV+S8+0Le+QEty6kCkG
kRZtQfGZipQnWOXSR0RsIohPvujDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCXJmMnm
/l4RjcFG8kEc2dxHsYgRJKz5Gc7Wxq8ebzwQGdiMgNShAKufMCWmgEksBExvGpM6rGrqPtH9JMMU
1BgS0/GwAW7SAGQQyKLUQ1q9TzgvFMprNZR3zejQB1287Y=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAEMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm
lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCeWImOiJs+aYpTEcMBoGCgmSJomT8ixkAQEMDDIyMTIx
MDAxMDAwMzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASooCVyDiFZbP0mcfqWl0iMZuF3k4Tq
TkOjxhjFvmVQ5C6tHER8gk/VTH5K4gio41Xc21vrWG3ZpuAptInDol4l6gax4YpQHVmRiJzwAk9c
GXZcS2cengJgY8pMPwNs6eejDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQD33R1htZsQ
q9A1lruxb6AlSmPiZGTmVc2ahAgCODqQk8tdLtWszLdXulB0DTFPeDMIxo7l6jzwlEm5WvunvIR7
tmJq7XRGbPfMrhYOEJVsdffhMbHZn61aF0vqdWp6rGY=
objectClass: wstCertificateUser
serialNumber: F004
EncryptserialNumber: EFFB
cn:: 5YiY6Imz5pil dn:: b3U9552j5p+l5a6kLG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBjPWNu
changetype:add
ou:: 552j5p+l5a6k
objectClass: organizationalUnit dn:: Y2495byg5LuB57+ULG91Peedo+afpeWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF
rOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO/8MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn
6XlrqQxEjAQBgNVBAMMCeW8oOS7gee/lDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAxMDB6M
BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAR7D5EkIgvppfnj1yB6xh/8aji9qo9OKPz8WYeGiUBeF
Be+6FHbLYw3s91+dF+yVglPplaxQ+lBIo15lBRgZom7WgqPIngPrOu1plqIAzi7jqW/PJ52IlXUQ
aEQiw32CfCjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCNXYLkG/Oqd0Jj49HxdXM3Z
1ERmJenTrVnHfzlA0pZCV/EOscfIJXyqhkCTKpveQJGCg9ruVLZnbSq+vvHKoExETYilZrXbhz9d
04ludMSny2s/qpnULLdGDmYRx7HaTU=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAPMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn6Xl
rqQxEjAQBgNVBAMMCeW8oOS7gee/lDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAxMDB6MBQG
ByqGSM49AgEGCSqBHIFFAYdoCANiAASzeF0+mnputFpfuXEpUV8aMGd35FIWuYlJNAXRsEVTg3Fv
38nvrFlz75rkvpfxxLTLRbL1BAmUlW5vWvKIl0QBft7kwKCjpEM/lvXx/fPwOvEb8Bcgwi/t/d8H
rI5rBxGjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBnJP0+gFGtZAQoMo9aEsnWBtrh
o3Ul8YYLy6G0wFCvtKv6UVIgslrVRjXGI1PsEQ8l0pY0xKj+QFd/S2wkvfr3Z5iYX3bZ2yf5DH4+
bL4N+lro1+8prXm1VamwWWkgsOI=
objectClass: wstCertificateUser
serialNumber: F00F
EncryptserialNumber: EFFC
cn:: 5byg5LuB57+U dn:: Y2496ams5rW35LicLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw
keaUv+W6nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAO/9MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemprOa1t+S4nDEcMBoGCgmSJomT8ixkAQEMDDIyM
TIxMDAxMDAwMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAREQEWC8lO5LVxQi3rojEpCVgp1I
F3IWrU37oQVZcjReBg2KQMtIi/ZIUzzKCVNNztQ5V5bqnQ9VcnhU3iiTUeNRRMr0tSEvcL0OBRmJ
T5hqD9YHVx7+2NmQ6vEf7FX66yjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC+Vb7M6
Wlp4R2ueehitZUsWjhK5F7oiopV5SmiIDUofR1vMfsr/5qzVMXYV9+g349ndh77mM5sj2IjfkEmz
uP9g+Q9zCvsH6T+zKoh74eRqbh7wIfIu8QyJloiddB/t/8=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAMMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm
lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemprOa1t+S4nDEcMBoGCgmSJomT8ixkAQEMDDIyMTIx
MDAxMDAwMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQm66YsAYr2PS3BYGvb5AuLXdMeoP33
BET9UME9pYdKYvLHK1EKdtnEGT3V0B/NLhTtoqZjmYELh82rMM081DU/tPOLbvN8PJzQ7vMC8KCQ
j+xXHd7rCAAlGFr9In+BsHCjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQB6vLVLTGRS
9P/dtDnnxDSV9pfWCPVOYRIoQH3XPBezQ+Q56RIdjhCuHOF+dem5/kyAH6UpHZmzw4+9qp9lwr/V
rnF3bFYN9NXHb6yPBH2YtS8fH+cmjZda6RBENdEzSLQ=
objectClass: wstCertificateUser
serialNumber: F00C
EncryptserialNumber: EFFD
cn:: 6ams5rW35Lic dn:: Y2495L+e5am3LG91PeenmOS5puWkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWO
hSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICbjCCAfqgAwIBAgIDAO/+MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgYwxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jku
ablpIQxDzANBgNVBAMMBuS/nuWptzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwOTB6MBQGB
yqGSM49AgEGCSqBHIFFAYdoCANiAARXOVTTUAN/QFsjNaXxCg84+vYMcIlWD+Y1f97BJk7NB2QGW
7OGmS62Dxdn/9mEUJ5iAq8HepSKry4H1vgzeav0mCOlZE/d4mu2+I3VQ6nqC5CZtoXSBcF+9o1Tp
RbgKX6jDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQDEr8d8RcgdWfENywURju23XUEbd
TrDMkOylNCTZExhGlwEFuoVBBAKn1bT0SqUWFOZg8uvoUofntW5HCIKl96JPbnKjOiqsOZdJnNbZ
Vk3A1jxHZEd9Vk07nELKWGaF0w=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICbjCCAfqgAwIBAgIDAPAIMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgYwxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnp5jkuabl
pIQxDzANBgNVBAMMBuS/nuWptzEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwOTB6MBQGByqG
SM49AgEGCSqBHIFFAYdoCANiAAR7gb4bsSR3HSwoLLMP+ee6pjWp9w6xdOtjtvZxBg0O+kGlP0vu
GiCCjWAEHxshsCgBCD07BkhJEvsUhOiP+UH7d9Y+cDDYDocb5DomdRoIcKDB2cirZhbXtYIa2XGH
4LKjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCMeAl6+zGFXFlan2KROaY/RLVEjXHA
H8mt1hZDWlsSniX0DuLlemv6WxCX9LIAJjeb8siu4kz9u8CkkbPv8d37O+UgegpdYEc0xXTztPZe
bl5YaqKRnCAhKtQEGmhlE5g=
objectClass: wstCertificateUser
serialNumber: F008
EncryptserialNumber: EFFE
cn:: 5L+e5am3 dn:: Y2495byg5oGS54aZLG91PeW6lOaApeWKnixvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF
rOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAO//MAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmg
KXlip4xEjAQBgNVBAMMCeW8oOaBkueGmTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNTB6M
BQGByqGSM49AgEGCSqBHIFFAYdoCANiAASk0YZd+hozUD67UfqGdyDp2ypbquGCgqPkCnkCa8Lpv
+qWRIYRyRfLLAubw2iBFDEtaOKX37haCIicMDH+cJwNgWU0x8xri5vMHveSJHSlwVFsCAjiYxpIg
7dt58xHtySjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCEjzbTkWR6vZUjfe732XGyE
yDfnjBpejsx8kHn/kgqnwAguCxxEPiNROByOEzTeC0OL6Jw9fhPDDj/ubw6z68agRVogjToeQepR
CNIyfS61l4LMcJLZUBuP2WgaJgHt7E=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPALMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnlupTmgKXl
ip4xEjAQBgNVBAMMCeW8oOaBkueGmTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNTB6MBQG
ByqGSM49AgEGCSqBHIFFAYdoCANiAAQsI+c/is/BdtC9qylJc6TnroZWhwV/FYmYHCj29UoSbSrJ
KErgaMojLEjReERjax7kq+b3OYTQwbB0QDxfFkTgHH6qRvb743UUiO3jlBqBfigcZT10oyyORs0U
zEL70AmjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQB9JRENKJVVtXknenoFtA8TTq2h
BU9nKEc1TcBqMzFlv92tilGbCfr8vO5wO8fIcFExvidZORJFqjrZebBGQZHRlsEBMBzKpj3pp8gI
/uUQBEJ2c1LJuGMotAKHX7ecbz4=
objectClass: wstCertificateUser
serialNumber: F00B
EncryptserialNumber: EFFF
cn:: 5byg5oGS54aZ dn:: b3U95paw6Ze75L+h5oGv5aSELG895rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FLCBj
PWNu
ou:: 5paw6Ze75L+h5oGv5aSE
objectClass: organizationalUnit dn:: Y2496YKT56eL6IuxLG91PeaWsOmXu+S/oeaBr+WkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6
nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPAAMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl
7vkv6Hmga/lpIQxEjAQBgNVBAMMCemCk+eni+iLsTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxM
DAwMTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASJ3RcGfo8cVUDTfawSKXngNpSoJH36bVjDb
EU+QvW4L4pp3SQr+IKXOlGvR1R8IMXhhl3Kidbijkk4xphBGHJlgWVrCB2YsyrKFYTCjjcRXlzsp
HM3kqtDpg0Ce2OSwfSjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQC94CmAJ301xBDQw
ObclFDJ4dQI3oVxxSNrB7DtI7s2ElthNDEV1MAekOilrcEgbamawm4H2cVw3eKk+q+6kolKoo3Kh
qVcFtF1uD8nUanvvfO8wrBhwgzQEy3bBQsfKKg=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPAOMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl7vk
v6Hmga/lpIQxEjAQBgNVBAMMCemCk+eni+iLsTEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAw
MTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT/c/uLk1Qk7AqTCNmpl3mbR6bZG/f73gq6oZLU
rize0LClvwNBvEQ8fQNiqklwfZ5noXpG6p4a3vdYb/pNVtMqS+p2rWhaU/4hTHBpMurv9ha0zMPs
7oftu2T3sawXtH2jDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBVTFutTDZ6cPeKjXAs
z7DNQKJgv3trvAHLnHHag9mVG+HG9ypIniuMqGRqkk0jKPDjpa62fWUfFKI09zkvYAsP2Oq4G4Sc
OiOQrKr0w4YT4Dw7EFtHh53Y21B0/3CDbHM=
objectClass: wstCertificateUser
serialNumber: F00E
EncryptserialNumber: F000
cn:: 6YKT56eL6Iux dn:: Y2495byg5YWI5piMLG91PeaWsOmXu+S/oeaBr+WkhCxvPea1t+WNl+ecgeS6uuawkeaUv+W6
nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPABMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl
7vkv6Hmga/lpIQxEjAQBgNVBAMMCeW8oOWFiOaYjDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxM
DAxMTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQsUEpbw4WCp1Z/MZEwmXBEpnKHBFoMxR10p
g75oJ/bcUdLcf0j0RcZBKRFQZdBkmyfv1Py6xqB+uPmVXD1dkcEQ418wzazWm02fPVQupQtu013f
mdOqlm569X8fdKA2yCjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQBJF1dtYTBtQfTOs
pjSjj/pGt5do/rI/I9YU88XuFpr5NazWXmfHsLLAE3hqANY4xeQNfrwrPRNDD7rJCRq0ewBI5a/E
QZEpGhR54dTf8q2h1Rm5ymIG5pSQIgtexzCIu4=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICdzCCAgOgAwIBAgIDAPANMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZUxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRgwFgYDVQQLDA/mlrDpl7vk
v6Hmga/lpIQxEjAQBgNVBAMMCeW8oOWFiOaYjDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAx
MTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASE54Ac3/GQ5SDO1ZaGyZ+7iADWWm28knQDytjM
0gSkb3URScaRxUpp952SmYbdEKjnYoLx8Mq0dyPoRDa+m9CWy9Ppn8KPpiTU4vxy0VnyXSDt4pmP
mAG02ppMeDo9KlmjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQAX3XlXjdXZFgpxkQQE
DopiYfECJv5PDVL9ILF5+wljcahb9ES/I1ubKqv2SW9qLiUqeurpCzhw2Icon2Ah8FcAYSCDhCQ/
/Gmc/MjRrBT8rvXPYGdLb5zWRMTRccrV/fU=
objectClass: wstCertificateUser
serialNumber: F00D
EncryptserialNumber: F001
cn:: 5byg5YWI5piM dn:: Y2495LqO6LSk5oiQLG91Peedo+afpeWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWF
rOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPACMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn
6XlrqQxEjAQBgNVBAMMCeS6jui0pOaIkDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNjB6M
BQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT2LsSPTVOm4bWarrKFyBQDF8jKzP9hc1atfiKgcy0JL
Q8eDhNIkN7MFZV2Qq1D0B5nuYQ4bCCdO0vgGeGhzThi24Z5iMU6G3SixZInNFsno71iRBUCkufZb
tQLM+QU0SGjDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQB6qkE3SC65UnG7KbmQ8Dtt4
njk4gTyp9PY6UfFg4pGb1uLFffMKS5jHz9DvKgk+yRBTef4UjP0qRA3hZIReXBhPRCBhbLh2zEnV
3Uctz9ZtVy/xxppF24MNirjPBXQnHs=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICcTCCAf2gAwIBAgIDAPAHMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgY8xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMRIwEAYDVQQLDAnnnaPmn6Xl
rqQxEjAQBgNVBAMMCeS6jui0pOaIkDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAxMDAwNjB6MBQG
ByqGSM49AgEGCSqBHIFFAYdoCANiAAQ72jqVYk22FoVWoX/Pk7Zg7bgdnvGzA+kyBK0dGtrxSZ1Y
OnlyP75IoIJxqOerXy9KwgZRWtkDuBcS2I62rTU2c//7D2Zfwj1kEcDRwXy0SGMUCK6bZIigRFUU
DY4WHeijDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQBHNA3CCF1cpw98PGdJZJEwzxlL
/LZpKYFqXHjKyXCm0meKVQLc3DHk26QGrMI0YOYnxBQppeYmHjU5upQQb2FZdxz/bEj0PRWJmiJH
EBue5hV+m6LuI7eZ++6KC33Fu8w=
objectClass: wstCertificateUser
serialNumber: F007
EncryptserialNumber: F002
cn:: 5LqO6LSk5oiQ dn:: Y2496YOR5Zu95piOLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuaw
keaUv+W6nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPADMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemDkeWbveaYjjEcMBoGCgmSJomT8ixkAQEMDDIyM
TIxMDAxMDAwODB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAS3Eg3r2xyMskJap1A2kYJcfnKUP
TwZOhKaX5hDga6OwxG7nsPsMqKJxHXLlTKde/mRb7IOt8KaaNHI3nfyuyUxqunOAKCKxxTlvkKgW
XVOJDLVZOIpg2qyQMMiGq8OkDejDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQBKZbbUI
1SFUpGaYB335UT4hyHL6nJmjDl5NAeaQwQLEBRAfNZBTIseySF3Kuiff5nCYYkWjEFVCTZA9g4qy
IyH1tGXzsPs0a++hfRBHXFzVXxArfOXWq9NZZ0/8CjupPA=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICfTCCAgmgAwIBAgIDAPAQMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZsxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm
lL/liqHlip7lhazlrqQxEjAQBgNVBAMMCemDkeWbveaYjjEcMBoGCgmSJomT8ixkAQEMDDIyMTIx
MDAxMDAwODB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASJZ8VG7wTFTcp3iN/giqpAafmzoagT
svWHilseMZaQrticqx1YfojFvmFxOftOHB+6hJrpOWT1Fa8aj8x5niFkuK0o3/R7STu0y9hzoAWd
RVx5TQOjWJQUt++31Ks64VSjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQAPGxgxepGg
zKy0hYlLNa9H83czGFrd3XQ7JvgYubIRPSyO9XY1AwQmPfeZnNzQgTQ8kqEXRbzl/GPqa4nJWMY8
MU621vL5dE+U/ummILC6NIFOZWSL0EopaG7d2fasKLw=
objectClass: wstCertificateUser
serialNumber: F010
EncryptserialNumber: F003
cn:: 6YOR5Zu95piO dn:: Y2495YiY6ZuELG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaU
v+W6nOWKnuWFrOWOhSwgYz1jbg==
notAfter: 20200614115959
EncryptCertificate;binary:: MIICejCCAgagAwIBAgIDAPAFMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
DE2MDAwMFoXDTIwMDYxNDE1NTk1OVowgZgxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxDzANBgNVBAMMBuWImOmbhDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxM
DAxMDAxMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASZpPPLO/EbPfMGhY34+6yVVNZwaq0gz
z+gNL6wwj58Swb5avhrQVNOJ199OO5NGu1ESShc/N0QKan/3lM7jJOr1QuA9JlrbPkwUUs/Pk+2e
dMnd254IYkJkUiUXVN0O66jDzANMAsGA1UdDwQEAwIDODALBgkqgRyBRQGHaAsDYQCryhp3sqTBZ
8kbXsUrtJilrqs5w5jQFcuZDjke802Q9LldGF9TA+fF1/v8A+SKmNFVdKI9HeO6i4qzRx7JQAE5M
6qVnmcOkr3ujnCiOshPhKdiWo/lNovDZVZME+BFbg4=
EncryptnotAfter: 20200614115959
userCertificate;binary:: MIICejCCAgagAwIBAgIDAPAJMAsGCSqBHIFFAYdoCzCBpDE2MDQG
A1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwNAYD
VQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQBgNV
BAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxNDE2
MDAwMFoXDTIwMDYxNDE1NTk1OVowgZgxHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbvTEn
MCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlrZDm
lL/liqHlip7lhazlrqQxDzANBgNVBAMMBuWImOmbhDEcMBoGCgmSJomT8ixkAQEMDDIyMTIxMDAx
MDAxMjB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATWQJCy2ENxXaqv9OpsoyV2IfpRm6EVTQ9i
yqfsMTkHBjPC8NQmlOgYU1mudci1wXahVQOKC65fIaAqbwzZPu+5Q9EzazkkCRejsMbVkafp/L2D
vvByoQfLlpTZPXnH5oCjDzANMAsGA1UdDwQEAwIGwDALBgkqgRyBRQGHaAsDYQCXOsoFPbGqf2sR
GEEh1FySgTUBbwnr2E+T0d1atTqInX/puRTfuuF+SGdSHzoqzKCFcjfoZRXE1IdmUcpKYLHWZnT3
xw6W7yZKePWg8RME0itmvAVC3jaNWYZEqbf0Aao=
objectClass: wstCertificateUser
serialNumber: F009
EncryptserialNumber: F005
cn:: 5YiY6ZuE dn:: Y2495rW35Y2X55yB5Lq65rCR5pS/5bqcLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1
t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1jbg==
EncryptCertificate;binary:: MIICfzCCAgugAwIBAgIDAPARMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgZ0xHjAcBgNVBAMMFea1t+WNl+ecgeS6uuawkeaUv+W6n
DEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MRIwEAYDVQQIDAnmtbfljZfnnIExJzAlB
gNVBAoMHua1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhTEeMBwGA1UECwwV55S15a2Q5pS/5
Yqh5Yqe5YWs5a6kMHowFAYHKoZIzj0CAQYJKoEcgUUBh2gIA2IABDjDxa3JeTB+4Q846SKfQEj7v
FMBYXOi6gOyaOdPtXuDWjzPt714OukAeUceWp4fSBxmVGHMVFRj36hdcetkrZFdtKZktY7tm4yVu
JOGiScjMq8wb0E1y2L5QbKHtj7OnqMPMA0wCwYDVR0PBAQDAgM4MAsGCSqBHIFFAYdoCwNhALEih
LJkSVjCu6suTDg3z7m7tAZAUcuphZbtQhz1WBUBrOTWvvofjEdZQJ2C64KzoqXC8Ikx6FlVjStsn
28ZnLIGo2zvh3ZGJujkKtOaI/pYIryloazRb39Dk/uDcorjAg==
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F011
cn:: 5rW35Y2X55yB5Lq65rCR5pS/5bqc dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Y+R5biD6aqM6K+B
57O757ufLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK
nuWFrOWOhSwgYz1jbg==
EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPASMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt
eWtkOWNsOeroOWPkeW4g+mqjOivgeezu+e7nzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASxl
dgx1eB/bGYJMJxcf/fFSfklt1DoLePXB5SNL9iCDkXyOwBfNuZQ/+MJKYm20MZVRtCfLm15FXSaE
cubJgxxr9abn0a0mS2lqnKMPPMeIVmRItVB9ebnyS5M7By07l2jDzANMAsGA1UdDwQEAwID+DALB
gkqgRyBRQGHaAsDYQCD+93k9XNMsNkzNLl3xgyVtlSmWtdPUclYWiGbPkT7J8V4pi5lMPDzVC2q6
mzAMpJAjwgqlmaND0LnOM1alhDpF4kJr8u2AwpXz5bK7Q2obichggbS6tKwErwGJIXq2jE=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F012
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Y+R5biD6aqM6K+B57O7
57uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Zyo57q/5pyN5Yqh
57O757ufLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK
nuWFrOWOhSwgYz1jbg==
EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPATMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt
eWtkOWNsOeroOWcqOe6v+acjeWKoeezu+e7nzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAT3Y
3r7euWmkFJeo6UxvcwWXokankXJhPdwOQAJo0G01Ms8/ku57iF/1v9qnaGUpW1VmxB9M60Hrt6fq
+5Xq9fP79aXN0K1ffsm0GurgajT/uTmvODYfDutYaULTiR5bQijDzANMAsGA1UdDwQEAwID+DALB
gkqgRyBRQGHaAsDYQBL+Ifd3r8RUPOti/A3+lv2RGhSsn41XzWlsxzYo4JdPfO982MhNjlVQvuBw
Wt7nqE6uISJ/aMacuD8W+QPS6ZQM93uDwddh3oGsRJRsM6H3hO2rivgz0I83MtdqMrx2YQ=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F013
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5Zyo57q/5pyN5Yqh57O7
57uf dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug562+5Y+R566h55CG
6K6+5aSHLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK
nuWFrOWOhSwgYz1jbg==
EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPAUMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt
eWtkOWNsOeroOetvuWPkeeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAASGt
EDJAiKCQkDeLCCf5ERgSGXrp0HB60pzyvH0aT1E5JuiVYYpBpypHGRPdgOPAv2t7MSZZCktTCuUU
GRK0XWwOZtFObMDIJTTFq6y/KOkrYJHvtgocUJYyNmv/HaBftWjDzANMAsGA1UdDwQEAwID+DALB
gkqgRyBRQGHaAsDYQDeOAclwZoG9ulDpmi0gZaq8bnExzWbkcFo01+eoseqrCyyk0QUu/V3nJbaP
o/1RqkR5dMAZJneCxFZSYNfmGFljS/u1t/C6ECcBW1IFaO7V+MuD55E6CKJQzLXlEQnmdE=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F014
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug562+5Y+R566h55CG6K6+
5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5rOo5YaM566h55CG
6K6+5aSHLG91PeeUteWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWK
nuWFrOWOhSwgYz1jbg==
EncryptCertificate;binary:: MIICjzCCAhugAwIBAgIDAPAVMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowga0xHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxQjBABgNVBAMMOeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+eUt
eWtkOWNsOeroOazqOWGjOeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATfe
860NwLtJ6+WlxgzJKajw/4yaBdgsnZHH5UOz5KlHKal85vNYWeQ01/PpMRZNUaHHdZXwBeX1GoE0
43H7Ydd8ljZwXNi7HeDSk5OZ0AMttAawy81TQ+2Ow34UHNRpc+jDzANMAsGA1UdDwQEAwID+DALB
gkqgRyBRQGHaAsDYQBASlFH/K9QJt1QPS2y8ShLC8Htu1TB3dgO4TzTx8jtGh/gCGHenxcJDfjCz
yZf1DmZouz26WhqZ8d/ouk6h/XPMBKD1ijXSls4bFMgmRtIOUPWD9w1lNkHAbhkIEvkR6o=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F015
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf55S15a2Q5Y2w56ug5rOo5YaM566h55CG6K6+
5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5Y+v5L+h5pe26Ze05pyN5YqhLG91PeeU
teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j
bg==
EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAWMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+WPr
+S/oeaXtumXtOacjeWKoTB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAARjbFCPyopT/n1J510rY
fqoWOSZ31RZ6tsi2W9ERas86OyZnOYffHN/nNJIhuP62hG+8x1GQvxRQJTtMQmG8yTf3guqCAKEV
JvJ8YqvFjrryPr5comQFq+aCPH5DalFsbGjDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY
QDGnifEI4VCDIuCzkH4T90m/nBKsP40ERsfbgT6f959SPIOhbvT7lQg9iTru21bXHHDwP2ZLOhdr
1jRNmguSPRHfYk9R+/CtSijvM5h/VbgbxfB8ifT27yXJYP3G+89oKo=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F016
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5Y+v5L+h5pe26Ze05pyN5Yqh dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5o6I5p2D566h55CG6K6+5aSHLG91PeeU
teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j
bg==
EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAXMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+aOi
Oadg+euoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAR9DCT3EnxjPUiNyeeLJ
eARvaVGbLnqRykTs6g63Pz1sJ8KytUpd8u3TRmE8I6mmg62tj0CrWdRTDWlFCEjDS3nZMmRTr/OF
+2TfdQpankZywvalhASLgWZDSw3H2y6bJOjDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY
QD3AEmWE6YuzItIvRxtqBRbMvGaI4FldYD4eS0qCa9Qpma0izzYOstdam6pBAvLMS93ArmDTlXSs
Zvx/OEV3/ryTyZHa5moMRJRroQdEmHM1yz2aX4pTq7RFe6PLKSajwE=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F017
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf5o6I5p2D566h55CG6K6+5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LSj5Lu76K6k5a6a6K6+5aSHLG91PeeU
teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j
bg==
EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAYMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+i0o
+S7u+iupOWumuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAATTORploAGr0V5s+yHJH
sP8K8tAml8SGyGhajpg6pscwhikkQCDy9uFIMyQJUiEJ8AXod86ZH/KI7XxwK2gfw7+XrjC+YZ+D
TE/Ty7babBnOctC1Y/73dqhSoRjMw5q9J2jDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY
QA6MJjxhAMDKyBNqLhnG2vhsCPDjXcjeQkzP9H54UJKlAkqldGVlxEhCdeKoqOppg8F9CgfYdi+4
FD4ZtKZMvd6SibC+n4Kbd/PbjaIH5gG/lt35AKLgkb79n0x+HDtMu4=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F018
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LSj5Lu76K6k5a6a6K6+5aSH dn:: Y24955yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ566h55CG6K6+5aSHLG91PeeU
teWtkOaUv+WKoeWKnuWFrOWupCxvPea1t+WNl+ecgeS6uuawkeaUv+W6nOWKnuWFrOWOhSwgYz1j
bg==
EncryptCertificate;binary:: MIICgzCCAg+gAwIBAgIDAPAZMAsGCSqBHIFFAYdoCzCBpDE2M
DQGA1UEAwwt5rW35Y2X55yB55S15a2Q5pS/5Yqh5YaF572R55S15a2Q6K6k6K+B57uT54K5MTYwN
AYDVQQKDC3mtbfljZfnnIHnlLXlrZDmlL/liqHlhoXnvZHnlLXlrZDorqTor4Hnu5PngrkxEjAQB
gNVBAgMCea1t+WNl+ecgTEeMBwGA1UEBgwV5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9MB4XDTE3MDYxN
TE2MDAwMFoXDTIwMDYxNTE1NTk1OVowgaExHjAcBgNVBAYMFeS4reWNjuS6uuawkeWFseWSjOWbv
TEnMCUGA1UECgwe5rW35Y2X55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6FMR4wHAYDVQQLDBXnlLXlr
ZDmlL/liqHlip7lhazlrqQxNjA0BgNVBAMMLeecgeaUv+W6nOS/oeS7u+acjeWKoeezu+e7n+i1h
Oa6kOeuoeeQhuiuvuWkhzB6MBQGByqGSM49AgEGCSqBHIFFAYdoCANiAAQoMEkVxLEqNYvIaiQ/3
eICcDMJ9/3TIdpkRP6puuwQ43TQdr/UUqPzrd0lWNtdWe35H0+ENwUNlYisBJraco/GHpw81LNRt
zfo4okEgukL9X0tXnxyusd6z6EZJcmCvH+jDzANMAsGA1UdDwQEAwID+DALBgkqgRyBRQGHaAsDY
QCuJ+HYlSJXSn6G5g+xF7NCjNixSO72vghDKs+O32dz3lL7jKdZ8foMJ55S7Z2HTVNLBQbwOJDv/
/J03XeXvcuc+Bos7PTYtQHJ5tYn4rSDDrUbY+LQA1oZxoE+BQ3s7yg=
EncryptnotAfter: 20200615115959
objectClass: wstCertificateUser
EncryptserialNumber: F019
cn:: 55yB5pS/5bqc5L+h5Lu75pyN5Yqh57O757uf6LWE5rqQ566h55CG6K6+5aSH dn:: bz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 5Zub5bed55yB5Lq65rCR5pS/5bqc5Yqe5YWs5Y6F dn:: bz3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazl
joUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k dn:: bz3kv53lr4blip7lhazlrqQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9
Y24=
objectClass: top
objectClass: organization
o:: 5L+d5a+G5Yqe5YWs5a6k dn:: bz3lrqPkvKDpg6gsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 5a6j5Lyg6YOo dn:: bz3mlrDpl7vlip7kuovlpIQsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9
Y24=
objectClass: top
objectClass: organization
o:: 5paw6Ze75Yqe5LqL5aSE dn:: bz3nnIHlp5Tnu4Tnu4fpg6gsbz3lm5vlt53nnIHkurrmsJHmlL/lupzlip7lhazljoUsIGM9
Y24=
objectClass: top
objectClass: organization
o:: 55yB5aeU57uE57uH6YOo dn:: bz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 5rmW5YyX55yB5Lq65rCR5pS/5Yqh5Yqe5YWs5Y6F dn:: bz3nnIHlp5TlrqPkvKDpg6gsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9
Y24=
objectClass: top
objectClass: organization
o:: 55yB5aeU5a6j5Lyg6YOo dn:: bz3nnIHlp5Tkv53lr4bnnaPmn6Xnu4Qsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazl
joUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 55yB5aeU5L+d5a+G552j5p+l57uE dn:: bz3nnIHlp5TlpJbkuqTpg6gsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazljoUsIGM9
Y24=
objectClass: top
objectClass: organization
o:: 55yB5aeU5aSW5Lqk6YOo dn:: bz3nlLXlrZDmlL/liqHlip7lhazlrqQsbz3muZbljJfnnIHkurrmsJHmlL/liqHlip7lhazl
joUsIGM9Y24=
objectClass: top
objectClass: organization
o:: 55S15a2Q5pS/5Yqh5Yqe5YWs5a6k
最后运行LdifImport.java中的main方法,控制台输出结果为以下就说明成功了
LDIF change file Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
changetype: attribute type undefined Adding entry... Adding entry...
Directory information has been modified. Adding entry...
changetype: attribute type undefined Adding entry... Adding entry...
Directory information has been modified. Adding entry... Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry... Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified. Adding entry...
Directory information has been modified.
java导入ldif文件的更多相关文章
- java读取ldif文件并创建新的节点
所需jar包ldap.jar. jldap-4.3-source.jar http://www.java2s.com/Code/Jar/l/Downloadldapjar.htm 浏览器输入http: ...
- Java 导入Excel文件到数据库
原文:http://www.jb51.net/article/44021.htm 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两 ...
- Java导入Excel文件页面实现JS
Excel导入: 页面创建导入按钮,如: 代码: <button class="layui-btn layui-btn-small layui-btn-primary ajax-all ...
- java 操作 csv文件
CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件中,数据“栏”以逗号分隔,可允许程序通 ...
- java从ldap中导出数据到ldif文件中
原创:http://www.cnblogs.com/dqcer/p/7814034.html 导入ldap.jar包,笔者已对下面两个文件测试并通过.若有疑问欢迎留言 LDAPExport.java ...
- java调用sqlldr导入csv文件数据到临时表
package cn.com.file;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File; ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- java导入、导出Excel文件
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- java后端导入excel模板和导入excel文件去读数据
模板转载地址:https://www.cnblogs.com/zhangyangtao/p/9802948.html 直接上代码(我是基于ssm写的demo,导入文件目前只能读取.xls后缀的exce ...
随机推荐
- Python_ONLINE_习题集_1 递归
1.1 使用递归实现:计算某个数的阶乘 def func(x): if x == 2: return 2 else: return x*func(x-1) a = func(4) print(a) 2 ...
- IF条件控制
条件控制 定义 Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块. 如下图所示 IF语句 if condition_1: statement_blo ...
- BAT推荐免费下载JAVA转型大数据开发全链路教程(视频+源码)价值19880元
如今随着环境的改变,物联网.AI.大数据.人工智能等,是未来的大趋势,而大数据是这些基石,万物互联,机器学习都是大数据应用场景! 为什么要学习大数据?我们JAVA到底要不要转型大数据? 好比问一个程序 ...
- numpy库的认识以及数组的创建
numpy库 numpy是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础.numpy十分高效,基于NumPy的算法要比纯Python快10到100倍(甚至 ...
- Spring boot项目集成Neo4j
第一步,创建Springboot工程 使用Eclipse 创建Maven项目,并修改pom.xml文件为: <?xml version="1.0" encoding=&quo ...
- 四:JVM调优原理与常见异常处理方案
在jvm调优之前,我们必须先了解jvm的内存模型与GC回收机制,这些在我前面的文章里面有介绍!接下来我们通过一个案例来调整jvm性能. 一测试案例: 1.1 编写demo import java.te ...
- asp,net 传值方式 优缺点比较
.net C#中页面之间传值传参的六种方法 1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用 ...
- STL之 stack
栈的常用操作函数:top()push()pop()size()empty() 建栈: stack<int> st; stack<int> st[4]; 四个栈 //可以使用li ...
- todo JVM笔记
之前给自己定了很多计划,要学Dubbo,Netty,SSHM源码,Tomcat源码...这些基本浅尝辄止,很难继续研读,过不了多久就忘了. 觉得还是基础不够,所以决定把<JVM>.< ...
- oracle给用户赋dblink权限
create database link 别名(可任意起) connect to 需要连接库的用户名identified by 需要连接库的用户名 using '(DESCRIPTION =(ADDR ...