]> git.saurik.com Git - apple/security.git/blobdiff - SecurityASN1/c++/sm_x509ce.cpp
Security-163.tar.gz
[apple/security.git] / SecurityASN1 / c++ / sm_x509ce.cpp
diff --git a/SecurityASN1/c++/sm_x509ce.cpp b/SecurityASN1/c++/sm_x509ce.cpp
deleted file mode 100644 (file)
index 576033a..0000000
+++ /dev/null
@@ -1,6837 +0,0 @@
-//   NOTE: this is a machine generated file--editing not recommended
-//
-// sm_x509ce.cpp - class member functions for ASN.1 module CertificateExtensions
-//
-//   This file was generated by snacc on Mon Apr 22 22:34:19 2002
-//   UBC snacc written by Mike Sample
-//   A couple of enhancements made by IBM European Networking Center
-
-
-#include "asn-incl.h"
-#include "sm_vdatypes.h"
-#include "sm_x501ud.h"
-#include "sm_x411ub.h"
-#include "sm_x411mtsas.h"
-#include "sm_x501if.h"
-#include "sm_x520sa.h"
-#include "sm_x509cmn.h"
-#include "sm_x509af.h"
-#include "sm_x509ce.h"
-#include "pkcs1oids.h"
-#include "pkcs9oids.h"
-#include "sm_cms.h"
-#include "sm_ess.h"
-#include "pkcs7.h"
-#include "pkcs8.h"
-#include "appleoids.h"
-#include "pkcs10.h"
-
-//------------------------------------------------------------------------------
-// value defs
-
-
-//------------------------------------------------------------------------------
-// class member definitions:
-
-PolicyQualifierInfo::PolicyQualifierInfo()
-{
-  qualifier = NULL;
-}
-
-PolicyQualifierInfo::PolicyQualifierInfo (const PolicyQualifierInfo &)
-{
-  Asn1Error << "use of incompletely defined PolicyQualifierInfo::PolicyQualifierInfo (const PolicyQualifierInfo &)" << endl;
-  abort();
-}
-
-PolicyQualifierInfo::~PolicyQualifierInfo()
-{
-  delete qualifier;
-}
-
-AsnType *PolicyQualifierInfo::Clone() const
-{
-  return new PolicyQualifierInfo;
-}
-
-AsnType *PolicyQualifierInfo::Copy() const
-{
-  return new PolicyQualifierInfo (*this);
-}
-
-#if SNACC_DEEP_COPY
-PolicyQualifierInfo &PolicyQualifierInfo::operator = (const PolicyQualifierInfo &that)
-#else // SNACC_DEEP_COPY
-PolicyQualifierInfo &PolicyQualifierInfo::operator = (const PolicyQualifierInfo &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    policyQualifierId = that.policyQualifierId;
-    if (that.qualifier)
-    {
-      if (!qualifier)
-        qualifier = new AsnAny;
-      *qualifier = *that.qualifier;
-    }
-    else
-    {
-      delete qualifier;
-      qualifier = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyQualifierInfo &PolicyQualifierInfo::operator = (const PolicyQualifierInfo &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-PolicyQualifierInfo::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (qualifier))
-  {
-        ENC_LOAD_ANYBUF(qualifier, b, l);
-    totalLen += l;
-  }
-
-    l = policyQualifierId.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // PolicyQualifierInfo::BEncContent
-
-
-void PolicyQualifierInfo::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    policyQualifierId.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = b.PeekByte();
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDecEoc (b, seqBytesDecoded, env);
-
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-100);
-  }
-
-  // ANY type
-    qualifier = new AsnAny;
-        DEC_LOAD_ANYBUF(qualifier, b, seqBytesDecoded, env);
-
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-101);
-  }
-  else
-    return;
-} // PolicyQualifierInfo::BDecContent
-
-AsnLen PolicyQualifierInfo::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyQualifierInfo::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyQualifierInfo::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-102);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void PolicyQualifierInfo::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  {
-    Indent (os, indentG);
-    os << "policyQualifierId ";
-    os << policyQualifierId;
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (qualifier))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "qualifier ";
-    os << *qualifier;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "qualifier ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // PolicyQualifierInfo::Print
-
-
-AsnType *AttributesSyntax::Clone() const
-{
-  return new AttributesSyntax;
-}
-
-AsnType *AttributesSyntax::Copy() const
-{
-  return new AttributesSyntax (*this);
-}
-
-AsnLen AttributesSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void AttributesSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "AttributesSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-103);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-AttributesSyntax::AttributesSyntax (const AttributesSyntax &)
-{
-  Asn1Error << "use of incompletely defined AttributesSyntax::AttributesSyntax (const AttributesSyntax &)" << endl;
-  abort();
-}
-
-AttributesSyntax::~AttributesSyntax()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-AttributesSyntax &AttributesSyntax::operator = (const AttributesSyntax &that)
-#else // SNACC_DEEP_COPY
-AttributesSyntax &AttributesSyntax::operator = (const AttributesSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AttributesSyntax &AttributesSyntax::operator = (const AttributesSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void AttributesSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  AttributesSyntax::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // AttributesSyntax::SetCurrElmt
-
-
-unsigned long int  AttributesSyntax::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // AttributesSyntax::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-Attribute *AttributesSyntax::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new Attribute;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributesSyntax::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-Attribute  *AttributesSyntax::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributesSyntax::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-Attribute  *AttributesSyntax::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributesSyntax::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-Attribute *AttributesSyntax::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // AttributesSyntax::InsertAfter
-
-
-AttributesSyntax  &AttributesSyntax::AppendCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-AttributesSyntax  &AttributesSyntax::PrependCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributesSyntax::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-AttributesSyntax &AttributesSyntax::InsertBeforeAndCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributesSyntax::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-AttributesSyntax  &AttributesSyntax::InsertAfterAndCopy (Attribute &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new Attribute;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // AttributesSyntax::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void AttributesSyntax::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen AttributesSyntax::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // AttributesSyntax::BEncContent
-
-
-void  AttributesSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    Attribute *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-104);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // AttributesSyntax::BDecContent
-
-
-DistributionPointName::DistributionPointName()
-{
-  choiceId = fullNameCid;
-#if TCL
-  fullName = new GeneralNames;
-#else
-  fullName = NULL; // incomplete initialization of mandatory element!
-#endif // TCL
-}
-
-DistributionPointName::DistributionPointName (const DistributionPointName &)
-{
-  Asn1Error << "use of incompletely defined DistributionPointName::DistributionPointName (const DistributionPointName &)" << endl;
-  abort();
-}
-
-DistributionPointName::~DistributionPointName()
-{
-  switch (choiceId)
-  {
-    case fullNameCid:
-      delete fullName;
-      break;
-    case nameRelativeToCRLIssuerCid:
-      delete nameRelativeToCRLIssuer;
-      break;
-  } // end of switch
-} // end of destructor
-
-AsnType *DistributionPointName::Clone() const
-{
-  return new DistributionPointName;
-}
-
-AsnType *DistributionPointName::Copy() const
-{
-  return new DistributionPointName (*this);
-}
-
-#if SNACC_DEEP_COPY
-DistributionPointName &DistributionPointName::operator = (const DistributionPointName &that)
-#else // SNACC_DEEP_COPY
-DistributionPointName &DistributionPointName::operator = (const DistributionPointName &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    switch (choiceId)
-    {
-      case fullNameCid:
-        delete fullName;
-        break;
-      case nameRelativeToCRLIssuerCid:
-        delete nameRelativeToCRLIssuer;
-        break;
-    }
-    switch (choiceId = that.choiceId)
-    {
-      case fullNameCid:
-        fullName = new GeneralNames;
-        *fullName = *that.fullName;
-        break;
-      case nameRelativeToCRLIssuerCid:
-        nameRelativeToCRLIssuer = new RelativeDistinguishedName;
-        *nameRelativeToCRLIssuer = *that.nameRelativeToCRLIssuer;
-        break;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined DistributionPointName &DistributionPointName::operator = (const DistributionPointName &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-DistributionPointName::BEncContent (BUF_TYPE b)
-{
-  AsnLen l;
-  switch (choiceId)
-  {
-    case fullNameCid:
-      BEncEocIfNec (b);
-      l = fullName->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 0);
-      break;
-
-    case nameRelativeToCRLIssuerCid:
-      BEncEocIfNec (b);
-      l = nameRelativeToCRLIssuer->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 1);
-      break;
-
-  } // end switch
-  return l;
-} // DistributionPointName::BEncContent
-
-
-void DistributionPointName::BDecContent (BUF_TYPE b, AsnTag tag, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  switch (tag)
-  {
-    case MAKE_TAG_ID (CNTX, CONS, 0):
-      choiceId = fullNameCid;
-      fullName = new GeneralNames;
-        fullName->BDecContent (b, tag, elmtLen0, bytesDecoded, env);
-      break;
-
-    case MAKE_TAG_ID (CNTX, CONS, 1):
-      choiceId = nameRelativeToCRLIssuerCid;
-      nameRelativeToCRLIssuer = new RelativeDistinguishedName;
-        nameRelativeToCRLIssuer->BDecContent (b, tag, elmtLen0, bytesDecoded, env);
-      break;
-
-    default:
-      Asn1Error << "ERROR - unexpected tag in CHOICE" << endl;
-      SnaccExcep::throwMe(-105);
-      break;
-  } // end switch
-} // DistributionPointName::BDecContent
-
-
-AsnLen DistributionPointName::BEnc (BUF_TYPE b)
-{
-    AsnLen l;
-    l = BEncContent (b);
-    return l;
-}
-
-void DistributionPointName::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    AsnLen elmtLen;
-    AsnTag tag;
-
-    /*  CHOICEs are a special case - grab identifying tag */
-    /*  this allows easier handling of nested CHOICEs */
-    tag = BDecTag (b, bytesDecoded, env);
-    elmtLen = BDecLen (b, bytesDecoded, env);
-    BDecContent (b, tag, elmtLen, bytesDecoded, env);
-}
-
-void DistributionPointName::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  switch (choiceId)
-  {
-    case fullNameCid:
-      os << "fullName ";
-      if (fullName)
-        os << *fullName;
-      else
-        os << "-- void3 --\n";
-      break;
-
-    case nameRelativeToCRLIssuerCid:
-      os << "nameRelativeToCRLIssuer ";
-      if (nameRelativeToCRLIssuer)
-        os << *nameRelativeToCRLIssuer;
-      else
-        os << "-- void3 --\n";
-      break;
-
-  } // end of switch
-#endif /* NDEBUG */
-} // DistributionPointName::Print
-
-PolicyMappingsSyntaxSeq::PolicyMappingsSyntaxSeq()
-{
-}
-
-PolicyMappingsSyntaxSeq::PolicyMappingsSyntaxSeq (const PolicyMappingsSyntaxSeq &)
-{
-  Asn1Error << "use of incompletely defined PolicyMappingsSyntaxSeq::PolicyMappingsSyntaxSeq (const PolicyMappingsSyntaxSeq &)" << endl;
-  abort();
-}
-
-PolicyMappingsSyntaxSeq::~PolicyMappingsSyntaxSeq()
-{
-}
-
-AsnType *PolicyMappingsSyntaxSeq::Clone() const
-{
-  return new PolicyMappingsSyntaxSeq;
-}
-
-AsnType *PolicyMappingsSyntaxSeq::Copy() const
-{
-  return new PolicyMappingsSyntaxSeq (*this);
-}
-
-#if SNACC_DEEP_COPY
-PolicyMappingsSyntaxSeq &PolicyMappingsSyntaxSeq::operator = (const PolicyMappingsSyntaxSeq &that)
-#else // SNACC_DEEP_COPY
-PolicyMappingsSyntaxSeq &PolicyMappingsSyntaxSeq::operator = (const PolicyMappingsSyntaxSeq &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    issuerDomainPolicy = that.issuerDomainPolicy;
-    subjectDomainPolicy = that.subjectDomainPolicy;
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyMappingsSyntaxSeq &PolicyMappingsSyntaxSeq::operator = (const PolicyMappingsSyntaxSeq &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-PolicyMappingsSyntaxSeq::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-    l = subjectDomainPolicy.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-    l = issuerDomainPolicy.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // PolicyMappingsSyntaxSeq::BEncContent
-
-
-void PolicyMappingsSyntaxSeq::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    issuerDomainPolicy.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-106);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    subjectDomainPolicy.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-107);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-108);
-  }
-  else
-    return;
-} // PolicyMappingsSyntaxSeq::BDecContent
-
-AsnLen PolicyMappingsSyntaxSeq::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyMappingsSyntaxSeq::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyMappingsSyntaxSeq::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-109);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void PolicyMappingsSyntaxSeq::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  {
-    Indent (os, indentG);
-    os << "issuerDomainPolicy ";
-    os << issuerDomainPolicy;
-    os << "," << endl;
-  }
-
-  {
-    Indent (os, indentG);
-    os << "subjectDomainPolicy ";
-    os << subjectDomainPolicy;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // PolicyMappingsSyntaxSeq::Print
-
-
-AsnType *PolicyInformationSeqOf::Clone() const
-{
-  return new PolicyInformationSeqOf;
-}
-
-AsnType *PolicyInformationSeqOf::Copy() const
-{
-  return new PolicyInformationSeqOf (*this);
-}
-
-AsnLen PolicyInformationSeqOf::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyInformationSeqOf::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyInformationSeqOf::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-110);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-PolicyInformationSeqOf::PolicyInformationSeqOf (const PolicyInformationSeqOf &)
-{
-  Asn1Error << "use of incompletely defined PolicyInformationSeqOf::PolicyInformationSeqOf (const PolicyInformationSeqOf &)" << endl;
-  abort();
-}
-
-PolicyInformationSeqOf::~PolicyInformationSeqOf()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-PolicyInformationSeqOf &PolicyInformationSeqOf::operator = (const PolicyInformationSeqOf &that)
-#else // SNACC_DEEP_COPY
-PolicyInformationSeqOf &PolicyInformationSeqOf::operator = (const PolicyInformationSeqOf &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyInformationSeqOf &PolicyInformationSeqOf::operator = (const PolicyInformationSeqOf &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void PolicyInformationSeqOf::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  PolicyInformationSeqOf::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // PolicyInformationSeqOf::SetCurrElmt
-
-
-unsigned long int  PolicyInformationSeqOf::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // PolicyInformationSeqOf::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-PolicyQualifierInfo *PolicyInformationSeqOf::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new PolicyQualifierInfo;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyInformationSeqOf::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-PolicyQualifierInfo  *PolicyInformationSeqOf::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyInformationSeqOf::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-PolicyQualifierInfo  *PolicyInformationSeqOf::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyInformationSeqOf::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-PolicyQualifierInfo *PolicyInformationSeqOf::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyInformationSeqOf::InsertAfter
-
-
-PolicyInformationSeqOf  &PolicyInformationSeqOf::AppendCopy (PolicyQualifierInfo &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-PolicyInformationSeqOf  &PolicyInformationSeqOf::PrependCopy (PolicyQualifierInfo &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyInformationSeqOf::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-PolicyInformationSeqOf &PolicyInformationSeqOf::InsertBeforeAndCopy (PolicyQualifierInfo &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyInformationSeqOf::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-PolicyInformationSeqOf  &PolicyInformationSeqOf::InsertAfterAndCopy (PolicyQualifierInfo &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyQualifierInfo;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyInformationSeqOf::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void PolicyInformationSeqOf::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen PolicyInformationSeqOf::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // PolicyInformationSeqOf::BEncContent
-
-
-void  PolicyInformationSeqOf::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    PolicyQualifierInfo *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-111);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // PolicyInformationSeqOf::BDecContent
-
-
-PolicyInformation::PolicyInformation()
-{
-  policyQualifiers = NULL;
-}
-
-PolicyInformation::PolicyInformation (const PolicyInformation &)
-{
-  Asn1Error << "use of incompletely defined PolicyInformation::PolicyInformation (const PolicyInformation &)" << endl;
-  abort();
-}
-
-PolicyInformation::~PolicyInformation()
-{
-  delete policyQualifiers;
-}
-
-AsnType *PolicyInformation::Clone() const
-{
-  return new PolicyInformation;
-}
-
-AsnType *PolicyInformation::Copy() const
-{
-  return new PolicyInformation (*this);
-}
-
-#if SNACC_DEEP_COPY
-PolicyInformation &PolicyInformation::operator = (const PolicyInformation &that)
-#else // SNACC_DEEP_COPY
-PolicyInformation &PolicyInformation::operator = (const PolicyInformation &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    policyIdentifier = that.policyIdentifier;
-    if (that.policyQualifiers)
-    {
-      if (!policyQualifiers)
-        policyQualifiers = new PolicyInformationSeqOf;
-      *policyQualifiers = *that.policyQualifiers;
-    }
-    else
-    {
-      delete policyQualifiers;
-      policyQualifiers = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyInformation &PolicyInformation::operator = (const PolicyInformation &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-PolicyInformation::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (policyQualifiers))
-  {
-      BEncEocIfNec (b);
-    l = policyQualifiers->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-    totalLen += l;
-  }
-
-    l = policyIdentifier.BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // PolicyInformation::BEncContent
-
-
-void PolicyInformation::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    policyIdentifier.BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-112);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    policyQualifiers = new PolicyInformationSeqOf;
-    policyQualifiers->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-113);
-  }
-  else
-    return;
-} // PolicyInformation::BDecContent
-
-AsnLen PolicyInformation::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyInformation::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyInformation::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-114);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void PolicyInformation::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  {
-    Indent (os, indentG);
-    os << "policyIdentifier ";
-    os << policyIdentifier;
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (policyQualifiers))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "policyQualifiers ";
-    os << *policyQualifiers;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "policyQualifiers ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // PolicyInformation::Print
-
-
-GeneralSubtree::GeneralSubtree()
-{
-#if TCL
-  base = new GeneralName;
-#else
-  base = NULL; // incomplete initialization of mandatory element!
-#endif // TCL
-  minimum = NULL;
-  maximum = NULL;
-}
-
-GeneralSubtree::GeneralSubtree (const GeneralSubtree &)
-{
-  Asn1Error << "use of incompletely defined GeneralSubtree::GeneralSubtree (const GeneralSubtree &)" << endl;
-  abort();
-}
-
-GeneralSubtree::~GeneralSubtree()
-{
-  delete base;
-  delete minimum;
-  delete maximum;
-}
-
-AsnType *GeneralSubtree::Clone() const
-{
-  return new GeneralSubtree;
-}
-
-AsnType *GeneralSubtree::Copy() const
-{
-  return new GeneralSubtree (*this);
-}
-
-#if SNACC_DEEP_COPY
-GeneralSubtree &GeneralSubtree::operator = (const GeneralSubtree &that)
-#else // SNACC_DEEP_COPY
-GeneralSubtree &GeneralSubtree::operator = (const GeneralSubtree &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.base)
-    {
-      if (!base)
-        base = new GeneralName;
-      *base = *that.base;
-    }
-    else
-    {
-      delete base;
-      base = NULL;
-    }
-    if (that.minimum)
-    {
-      if (!minimum)
-        minimum = new BaseDistance;
-      *minimum = *that.minimum;
-    }
-    else
-    {
-      delete minimum;
-      minimum = NULL;
-    }
-    if (that.maximum)
-    {
-      if (!maximum)
-        maximum = new BaseDistance;
-      *maximum = *that.maximum;
-    }
-    else
-    {
-      delete maximum;
-      maximum = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined GeneralSubtree &GeneralSubtree::operator = (const GeneralSubtree &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-GeneralSubtree::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (maximum))
-  {
-    l = maximum->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (minimum))
-  {
-    l = minimum->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 0);
-    totalLen += l;
-  }
-
-    l = base->BEncContent (b);
-    totalLen += l;
-
-  return totalLen;
-} // GeneralSubtree::BEncContent
-
-
-void GeneralSubtree::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0))
-    || (tag1 == MAKE_TAG_ID (CNTX, PRIM, 1))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 1))
-    || (tag1 == MAKE_TAG_ID (CNTX, PRIM, 2))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 2))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 3))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 4))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 5))
-    || (tag1 == MAKE_TAG_ID (CNTX, PRIM, 6))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 6))
-    || (tag1 == MAKE_TAG_ID (CNTX, PRIM, 7))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 7))
-    || (tag1 == MAKE_TAG_ID (CNTX, PRIM, 8)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    base = new GeneralName;
-    base->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-115);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    minimum = new BaseDistance;
-    minimum->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    maximum = new BaseDistance;
-    maximum->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-116);
-  }
-  else
-    return;
-} // GeneralSubtree::BDecContent
-
-AsnLen GeneralSubtree::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void GeneralSubtree::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "GeneralSubtree::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-117);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void GeneralSubtree::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (base))
-  {
-    Indent (os, indentG);
-    os << "base ";
-    os << *base;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "base ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (minimum))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "minimum ";
-    os << *minimum;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "minimum ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (maximum))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "maximum ";
-    os << *maximum;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "maximum ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // GeneralSubtree::Print
-
-
-DistributionPoint::DistributionPoint()
-{
-  distributionPoint = NULL;
-  reasons = NULL;
-  cRLIssuer = NULL;
-}
-
-DistributionPoint::DistributionPoint (const DistributionPoint &)
-{
-  Asn1Error << "use of incompletely defined DistributionPoint::DistributionPoint (const DistributionPoint &)" << endl;
-  abort();
-}
-
-DistributionPoint::~DistributionPoint()
-{
-  delete distributionPoint;
-  delete reasons;
-  delete cRLIssuer;
-}
-
-AsnType *DistributionPoint::Clone() const
-{
-  return new DistributionPoint;
-}
-
-AsnType *DistributionPoint::Copy() const
-{
-  return new DistributionPoint (*this);
-}
-
-#if SNACC_DEEP_COPY
-DistributionPoint &DistributionPoint::operator = (const DistributionPoint &that)
-#else // SNACC_DEEP_COPY
-DistributionPoint &DistributionPoint::operator = (const DistributionPoint &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.distributionPoint)
-    {
-      if (!distributionPoint)
-        distributionPoint = new DistributionPointName;
-      *distributionPoint = *that.distributionPoint;
-    }
-    else
-    {
-      delete distributionPoint;
-      distributionPoint = NULL;
-    }
-    if (that.reasons)
-    {
-      if (!reasons)
-        reasons = new ReasonFlags;
-      *reasons = *that.reasons;
-    }
-    else
-    {
-      delete reasons;
-      reasons = NULL;
-    }
-    if (that.cRLIssuer)
-    {
-      if (!cRLIssuer)
-        cRLIssuer = new GeneralNames;
-      *cRLIssuer = *that.cRLIssuer;
-    }
-    else
-    {
-      delete cRLIssuer;
-      cRLIssuer = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined DistributionPoint &DistributionPoint::operator = (const DistributionPoint &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-DistributionPoint::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (cRLIssuer))
-  {
-      BEncEocIfNec (b);
-    l = cRLIssuer->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 2);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (reasons))
-  {
-    l = reasons->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (distributionPoint))
-  {
-      BEncEocIfNec (b);
-    l = distributionPoint->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // DistributionPoint::BEncContent
-
-
-void DistributionPoint::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  AsnLen elmtLen2;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-    elmtLen2 = BDecLen (b, seqBytesDecoded, env);
-    distributionPoint = new DistributionPointName;
-    distributionPoint->BDecContent (b, tag1, elmtLen2, seqBytesDecoded, env);
-    if (elmtLen1 == INDEFINITE_LEN)
-      BDecEoc (b, seqBytesDecoded, env);
-
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 1))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    reasons = new ReasonFlags;
-    reasons->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 2)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    cRLIssuer = new GeneralNames;
-    cRLIssuer->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-118);
-  }
-  else
-    return;
-} // DistributionPoint::BDecContent
-
-AsnLen DistributionPoint::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void DistributionPoint::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "DistributionPoint::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-119);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void DistributionPoint::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (distributionPoint))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "distributionPoint ";
-    os << *distributionPoint;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "distributionPoint ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (reasons))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "reasons ";
-    os << *reasons;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "reasons ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (cRLIssuer))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "cRLIssuer ";
-    os << *cRLIssuer;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "cRLIssuer ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // DistributionPoint::Print
-
-
-AsnType *CertificatePoliciesSyntax::Clone() const
-{
-  return new CertificatePoliciesSyntax;
-}
-
-AsnType *CertificatePoliciesSyntax::Copy() const
-{
-  return new CertificatePoliciesSyntax (*this);
-}
-
-AsnLen CertificatePoliciesSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void CertificatePoliciesSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "CertificatePoliciesSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-120);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-CertificatePoliciesSyntax::CertificatePoliciesSyntax (const CertificatePoliciesSyntax &)
-{
-  Asn1Error << "use of incompletely defined CertificatePoliciesSyntax::CertificatePoliciesSyntax (const CertificatePoliciesSyntax &)" << endl;
-  abort();
-}
-
-CertificatePoliciesSyntax::~CertificatePoliciesSyntax()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-CertificatePoliciesSyntax &CertificatePoliciesSyntax::operator = (const CertificatePoliciesSyntax &that)
-#else // SNACC_DEEP_COPY
-CertificatePoliciesSyntax &CertificatePoliciesSyntax::operator = (const CertificatePoliciesSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined CertificatePoliciesSyntax &CertificatePoliciesSyntax::operator = (const CertificatePoliciesSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void CertificatePoliciesSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  CertificatePoliciesSyntax::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // CertificatePoliciesSyntax::SetCurrElmt
-
-
-unsigned long int  CertificatePoliciesSyntax::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // CertificatePoliciesSyntax::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-PolicyInformation *CertificatePoliciesSyntax::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new PolicyInformation;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertificatePoliciesSyntax::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-PolicyInformation  *CertificatePoliciesSyntax::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertificatePoliciesSyntax::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-PolicyInformation  *CertificatePoliciesSyntax::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertificatePoliciesSyntax::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-PolicyInformation *CertificatePoliciesSyntax::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertificatePoliciesSyntax::InsertAfter
-
-
-CertificatePoliciesSyntax  &CertificatePoliciesSyntax::AppendCopy (PolicyInformation &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-CertificatePoliciesSyntax  &CertificatePoliciesSyntax::PrependCopy (PolicyInformation &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // CertificatePoliciesSyntax::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-CertificatePoliciesSyntax &CertificatePoliciesSyntax::InsertBeforeAndCopy (PolicyInformation &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // CertificatePoliciesSyntax::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-CertificatePoliciesSyntax  &CertificatePoliciesSyntax::InsertAfterAndCopy (PolicyInformation &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyInformation;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // CertificatePoliciesSyntax::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void CertificatePoliciesSyntax::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen CertificatePoliciesSyntax::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // CertificatePoliciesSyntax::BEncContent
-
-
-void  CertificatePoliciesSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    PolicyInformation *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-121);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // CertificatePoliciesSyntax::BDecContent
-
-
-AsnType *GeneralSubtrees::Clone() const
-{
-  return new GeneralSubtrees;
-}
-
-AsnType *GeneralSubtrees::Copy() const
-{
-  return new GeneralSubtrees (*this);
-}
-
-AsnLen GeneralSubtrees::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void GeneralSubtrees::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "GeneralSubtrees::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-122);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-GeneralSubtrees::GeneralSubtrees (const GeneralSubtrees &)
-{
-  Asn1Error << "use of incompletely defined GeneralSubtrees::GeneralSubtrees (const GeneralSubtrees &)" << endl;
-  abort();
-}
-
-GeneralSubtrees::~GeneralSubtrees()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-GeneralSubtrees &GeneralSubtrees::operator = (const GeneralSubtrees &that)
-#else // SNACC_DEEP_COPY
-GeneralSubtrees &GeneralSubtrees::operator = (const GeneralSubtrees &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined GeneralSubtrees &GeneralSubtrees::operator = (const GeneralSubtrees &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void GeneralSubtrees::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  GeneralSubtrees::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // GeneralSubtrees::SetCurrElmt
-
-
-unsigned long int  GeneralSubtrees::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // GeneralSubtrees::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-GeneralSubtree *GeneralSubtrees::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new GeneralSubtree;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // GeneralSubtrees::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-GeneralSubtree  *GeneralSubtrees::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // GeneralSubtrees::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-GeneralSubtree  *GeneralSubtrees::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // GeneralSubtrees::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-GeneralSubtree *GeneralSubtrees::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // GeneralSubtrees::InsertAfter
-
-
-GeneralSubtrees  &GeneralSubtrees::AppendCopy (GeneralSubtree &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-GeneralSubtrees  &GeneralSubtrees::PrependCopy (GeneralSubtree &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // GeneralSubtrees::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-GeneralSubtrees &GeneralSubtrees::InsertBeforeAndCopy (GeneralSubtree &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // GeneralSubtrees::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-GeneralSubtrees  &GeneralSubtrees::InsertAfterAndCopy (GeneralSubtree &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new GeneralSubtree;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // GeneralSubtrees::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void GeneralSubtrees::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen GeneralSubtrees::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // GeneralSubtrees::BEncContent
-
-
-void  GeneralSubtrees::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    GeneralSubtree *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-123);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // GeneralSubtrees::BDecContent
-
-
-AuthorityKeyIdentifier::AuthorityKeyIdentifier()
-{
-  keyIdentifier = NULL;
-  authorityCertIssuer = NULL;
-  authorityCertSerialNumber = NULL;
-}
-
-AuthorityKeyIdentifier::AuthorityKeyIdentifier (const AuthorityKeyIdentifier &)
-{
-  Asn1Error << "use of incompletely defined AuthorityKeyIdentifier::AuthorityKeyIdentifier (const AuthorityKeyIdentifier &)" << endl;
-  abort();
-}
-
-AuthorityKeyIdentifier::~AuthorityKeyIdentifier()
-{
-  delete keyIdentifier;
-  delete authorityCertIssuer;
-  delete authorityCertSerialNumber;
-}
-
-AsnType *AuthorityKeyIdentifier::Clone() const
-{
-  return new AuthorityKeyIdentifier;
-}
-
-AsnType *AuthorityKeyIdentifier::Copy() const
-{
-  return new AuthorityKeyIdentifier (*this);
-}
-
-#if SNACC_DEEP_COPY
-AuthorityKeyIdentifier &AuthorityKeyIdentifier::operator = (const AuthorityKeyIdentifier &that)
-#else // SNACC_DEEP_COPY
-AuthorityKeyIdentifier &AuthorityKeyIdentifier::operator = (const AuthorityKeyIdentifier &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.keyIdentifier)
-    {
-      if (!keyIdentifier)
-        keyIdentifier = new KeyIdentifier;
-      *keyIdentifier = *that.keyIdentifier;
-    }
-    else
-    {
-      delete keyIdentifier;
-      keyIdentifier = NULL;
-    }
-    if (that.authorityCertIssuer)
-    {
-      if (!authorityCertIssuer)
-        authorityCertIssuer = new GeneralNames;
-      *authorityCertIssuer = *that.authorityCertIssuer;
-    }
-    else
-    {
-      delete authorityCertIssuer;
-      authorityCertIssuer = NULL;
-    }
-    if (that.authorityCertSerialNumber)
-    {
-      if (!authorityCertSerialNumber)
-        authorityCertSerialNumber = new CertificateSerialNumber;
-      *authorityCertSerialNumber = *that.authorityCertSerialNumber;
-    }
-    else
-    {
-      delete authorityCertSerialNumber;
-      authorityCertSerialNumber = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined AuthorityKeyIdentifier &AuthorityKeyIdentifier::operator = (const AuthorityKeyIdentifier &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-AuthorityKeyIdentifier::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (authorityCertSerialNumber))
-  {
-    l = authorityCertSerialNumber->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 2);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (authorityCertIssuer))
-  {
-      BEncEocIfNec (b);
-    l = authorityCertIssuer->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (keyIdentifier))
-  {
-    l = keyIdentifier->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // AuthorityKeyIdentifier::BEncContent
-
-
-void AuthorityKeyIdentifier::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    keyIdentifier = new KeyIdentifier;
-    keyIdentifier->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    authorityCertIssuer = new GeneralNames;
-    authorityCertIssuer->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 2))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 2)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    authorityCertSerialNumber = new CertificateSerialNumber;
-    authorityCertSerialNumber->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-124);
-  }
-  else
-    return;
-} // AuthorityKeyIdentifier::BDecContent
-
-AsnLen AuthorityKeyIdentifier::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void AuthorityKeyIdentifier::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "AuthorityKeyIdentifier::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-125);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void AuthorityKeyIdentifier::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (keyIdentifier))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "keyIdentifier ";
-    os << *keyIdentifier;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "keyIdentifier ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (authorityCertIssuer))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "authorityCertIssuer ";
-    os << *authorityCertIssuer;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "authorityCertIssuer ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (authorityCertSerialNumber))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "authorityCertSerialNumber ";
-    os << *authorityCertSerialNumber;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "authorityCertSerialNumber ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // AuthorityKeyIdentifier::Print
-
-
-AsnType *ExtKeyUsageSyntax::Clone() const
-{
-  return new ExtKeyUsageSyntax;
-}
-
-AsnType *ExtKeyUsageSyntax::Copy() const
-{
-  return new ExtKeyUsageSyntax (*this);
-}
-
-AsnLen ExtKeyUsageSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void ExtKeyUsageSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "ExtKeyUsageSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-126);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-ExtKeyUsageSyntax::ExtKeyUsageSyntax (const ExtKeyUsageSyntax &)
-{
-  Asn1Error << "use of incompletely defined ExtKeyUsageSyntax::ExtKeyUsageSyntax (const ExtKeyUsageSyntax &)" << endl;
-  abort();
-}
-
-ExtKeyUsageSyntax::~ExtKeyUsageSyntax()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-ExtKeyUsageSyntax &ExtKeyUsageSyntax::operator = (const ExtKeyUsageSyntax &that)
-#else // SNACC_DEEP_COPY
-ExtKeyUsageSyntax &ExtKeyUsageSyntax::operator = (const ExtKeyUsageSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined ExtKeyUsageSyntax &ExtKeyUsageSyntax::operator = (const ExtKeyUsageSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void ExtKeyUsageSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  ExtKeyUsageSyntax::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // ExtKeyUsageSyntax::SetCurrElmt
-
-
-unsigned long int  ExtKeyUsageSyntax::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // ExtKeyUsageSyntax::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-KeyPurposeId *ExtKeyUsageSyntax::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new KeyPurposeId;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // ExtKeyUsageSyntax::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-KeyPurposeId  *ExtKeyUsageSyntax::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // ExtKeyUsageSyntax::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-KeyPurposeId  *ExtKeyUsageSyntax::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // ExtKeyUsageSyntax::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-KeyPurposeId *ExtKeyUsageSyntax::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // ExtKeyUsageSyntax::InsertAfter
-
-
-ExtKeyUsageSyntax  &ExtKeyUsageSyntax::AppendCopy (KeyPurposeId &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-ExtKeyUsageSyntax  &ExtKeyUsageSyntax::PrependCopy (KeyPurposeId &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // ExtKeyUsageSyntax::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-ExtKeyUsageSyntax &ExtKeyUsageSyntax::InsertBeforeAndCopy (KeyPurposeId &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // ExtKeyUsageSyntax::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-ExtKeyUsageSyntax  &ExtKeyUsageSyntax::InsertAfterAndCopy (KeyPurposeId &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new KeyPurposeId;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // ExtKeyUsageSyntax::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void ExtKeyUsageSyntax::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen ExtKeyUsageSyntax::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncDefLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // ExtKeyUsageSyntax::BEncContent
-
-
-void  ExtKeyUsageSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    KeyPurposeId *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-127);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // ExtKeyUsageSyntax::BDecContent
-
-
-PrivateKeyUsagePeriod::PrivateKeyUsagePeriod()
-{
-  notBefore = NULL;
-  notAfter = NULL;
-}
-
-PrivateKeyUsagePeriod::PrivateKeyUsagePeriod (const PrivateKeyUsagePeriod &)
-{
-  Asn1Error << "use of incompletely defined PrivateKeyUsagePeriod::PrivateKeyUsagePeriod (const PrivateKeyUsagePeriod &)" << endl;
-  abort();
-}
-
-PrivateKeyUsagePeriod::~PrivateKeyUsagePeriod()
-{
-  delete notBefore;
-  delete notAfter;
-}
-
-AsnType *PrivateKeyUsagePeriod::Clone() const
-{
-  return new PrivateKeyUsagePeriod;
-}
-
-AsnType *PrivateKeyUsagePeriod::Copy() const
-{
-  return new PrivateKeyUsagePeriod (*this);
-}
-
-#if SNACC_DEEP_COPY
-PrivateKeyUsagePeriod &PrivateKeyUsagePeriod::operator = (const PrivateKeyUsagePeriod &that)
-#else // SNACC_DEEP_COPY
-PrivateKeyUsagePeriod &PrivateKeyUsagePeriod::operator = (const PrivateKeyUsagePeriod &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.notBefore)
-    {
-      if (!notBefore)
-        notBefore = new GeneralizedTime;
-      *notBefore = *that.notBefore;
-    }
-    else
-    {
-      delete notBefore;
-      notBefore = NULL;
-    }
-    if (that.notAfter)
-    {
-      if (!notAfter)
-        notAfter = new GeneralizedTime;
-      *notAfter = *that.notAfter;
-    }
-    else
-    {
-      delete notAfter;
-      notAfter = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PrivateKeyUsagePeriod &PrivateKeyUsagePeriod::operator = (const PrivateKeyUsagePeriod &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-PrivateKeyUsagePeriod::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (notAfter))
-  {
-    l = notAfter->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (notBefore))
-  {
-    l = notBefore->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // PrivateKeyUsagePeriod::BEncContent
-
-
-void PrivateKeyUsagePeriod::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    notBefore = new GeneralizedTime;
-    notBefore->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 1))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    notAfter = new GeneralizedTime;
-    notAfter->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-128);
-  }
-  else
-    return;
-} // PrivateKeyUsagePeriod::BDecContent
-
-AsnLen PrivateKeyUsagePeriod::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PrivateKeyUsagePeriod::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PrivateKeyUsagePeriod::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-129);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void PrivateKeyUsagePeriod::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (notBefore))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "notBefore ";
-    os << *notBefore;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "notBefore ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (notAfter))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "notAfter ";
-    os << *notAfter;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "notAfter ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // PrivateKeyUsagePeriod::Print
-
-
-AsnType *PolicyMappingsSyntax::Clone() const
-{
-  return new PolicyMappingsSyntax;
-}
-
-AsnType *PolicyMappingsSyntax::Copy() const
-{
-  return new PolicyMappingsSyntax (*this);
-}
-
-AsnLen PolicyMappingsSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyMappingsSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyMappingsSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-130);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-PolicyMappingsSyntax::PolicyMappingsSyntax (const PolicyMappingsSyntax &)
-{
-  Asn1Error << "use of incompletely defined PolicyMappingsSyntax::PolicyMappingsSyntax (const PolicyMappingsSyntax &)" << endl;
-  abort();
-}
-
-PolicyMappingsSyntax::~PolicyMappingsSyntax()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-PolicyMappingsSyntax &PolicyMappingsSyntax::operator = (const PolicyMappingsSyntax &that)
-#else // SNACC_DEEP_COPY
-PolicyMappingsSyntax &PolicyMappingsSyntax::operator = (const PolicyMappingsSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyMappingsSyntax &PolicyMappingsSyntax::operator = (const PolicyMappingsSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void PolicyMappingsSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  PolicyMappingsSyntax::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // PolicyMappingsSyntax::SetCurrElmt
-
-
-unsigned long int  PolicyMappingsSyntax::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // PolicyMappingsSyntax::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-PolicyMappingsSyntaxSeq *PolicyMappingsSyntax::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new PolicyMappingsSyntaxSeq;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyMappingsSyntax::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-PolicyMappingsSyntaxSeq  *PolicyMappingsSyntax::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyMappingsSyntax::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-PolicyMappingsSyntaxSeq  *PolicyMappingsSyntax::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyMappingsSyntax::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-PolicyMappingsSyntaxSeq *PolicyMappingsSyntax::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // PolicyMappingsSyntax::InsertAfter
-
-
-PolicyMappingsSyntax  &PolicyMappingsSyntax::AppendCopy (PolicyMappingsSyntaxSeq &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-PolicyMappingsSyntax  &PolicyMappingsSyntax::PrependCopy (PolicyMappingsSyntaxSeq &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyMappingsSyntax::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-PolicyMappingsSyntax &PolicyMappingsSyntax::InsertBeforeAndCopy (PolicyMappingsSyntaxSeq &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyMappingsSyntax::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-PolicyMappingsSyntax  &PolicyMappingsSyntax::InsertAfterAndCopy (PolicyMappingsSyntaxSeq &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new PolicyMappingsSyntaxSeq;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // PolicyMappingsSyntax::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void PolicyMappingsSyntax::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen PolicyMappingsSyntax::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // PolicyMappingsSyntax::BEncContent
-
-
-void  PolicyMappingsSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    PolicyMappingsSyntaxSeq *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-131);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // PolicyMappingsSyntax::BDecContent
-
-
-SupportedAlgorithm::SupportedAlgorithm()
-{
-#if TCL
-  algorithmIdentifier = new AlgorithmIdentifier;
-#else
-  algorithmIdentifier = NULL; // incomplete initialization of mandatory element!
-#endif // TCL
-  intendedUsage = NULL;
-  intendedCertificatePolicies = NULL;
-}
-
-SupportedAlgorithm::SupportedAlgorithm (const SupportedAlgorithm &)
-{
-  Asn1Error << "use of incompletely defined SupportedAlgorithm::SupportedAlgorithm (const SupportedAlgorithm &)" << endl;
-  abort();
-}
-
-SupportedAlgorithm::~SupportedAlgorithm()
-{
-  delete algorithmIdentifier;
-  delete intendedUsage;
-  delete intendedCertificatePolicies;
-}
-
-AsnType *SupportedAlgorithm::Clone() const
-{
-  return new SupportedAlgorithm;
-}
-
-AsnType *SupportedAlgorithm::Copy() const
-{
-  return new SupportedAlgorithm (*this);
-}
-
-#if SNACC_DEEP_COPY
-SupportedAlgorithm &SupportedAlgorithm::operator = (const SupportedAlgorithm &that)
-#else // SNACC_DEEP_COPY
-SupportedAlgorithm &SupportedAlgorithm::operator = (const SupportedAlgorithm &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.algorithmIdentifier)
-    {
-      if (!algorithmIdentifier)
-        algorithmIdentifier = new AlgorithmIdentifier;
-      *algorithmIdentifier = *that.algorithmIdentifier;
-    }
-    else
-    {
-      delete algorithmIdentifier;
-      algorithmIdentifier = NULL;
-    }
-    if (that.intendedUsage)
-    {
-      if (!intendedUsage)
-        intendedUsage = new KeyUsage;
-      *intendedUsage = *that.intendedUsage;
-    }
-    else
-    {
-      delete intendedUsage;
-      intendedUsage = NULL;
-    }
-    if (that.intendedCertificatePolicies)
-    {
-      if (!intendedCertificatePolicies)
-        intendedCertificatePolicies = new CertificatePoliciesSyntax;
-      *intendedCertificatePolicies = *that.intendedCertificatePolicies;
-    }
-    else
-    {
-      delete intendedCertificatePolicies;
-      intendedCertificatePolicies = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined SupportedAlgorithm &SupportedAlgorithm::operator = (const SupportedAlgorithm &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-SupportedAlgorithm::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (intendedCertificatePolicies))
-  {
-      BEncEocIfNec (b);
-    l = intendedCertificatePolicies->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (intendedUsage))
-  {
-    l = intendedUsage->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 0);
-    totalLen += l;
-  }
-
-      BEncEocIfNec (b);
-    l = algorithmIdentifier->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-    totalLen += l;
-
-  return totalLen;
-} // SupportedAlgorithm::BEncContent
-
-
-void SupportedAlgorithm::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  tag1 = BDecTag (b, seqBytesDecoded, env);
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    algorithmIdentifier = new AlgorithmIdentifier;
-    algorithmIdentifier->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-  else
-  {
-    Asn1Error << "ERROR - SEQUENCE is missing non-optional elmt." << endl;
-    SnaccExcep::throwMe(-132);
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    intendedUsage = new KeyUsage;
-    intendedUsage->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    intendedCertificatePolicies = new CertificatePoliciesSyntax;
-    intendedCertificatePolicies->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-133);
-  }
-  else
-    return;
-} // SupportedAlgorithm::BDecContent
-
-AsnLen SupportedAlgorithm::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void SupportedAlgorithm::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "SupportedAlgorithm::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-134);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void SupportedAlgorithm::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (algorithmIdentifier))
-  {
-    Indent (os, indentG);
-    os << "algorithmIdentifier ";
-    os << *algorithmIdentifier;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "algorithmIdentifier ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (intendedUsage))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "intendedUsage ";
-    os << *intendedUsage;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "intendedUsage ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (intendedCertificatePolicies))
-  {
-    os << ","<< endl;
-    Indent (os, indentG);
-    os << "intendedCertificatePolicies ";
-    os << *intendedCertificatePolicies;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "intendedCertificatePolicies ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // SupportedAlgorithm::Print
-
-
-BasicConstraintsSyntax::BasicConstraintsSyntax()
-{
-  cA = NULL;
-  pathLenConstraint = NULL;
-}
-
-BasicConstraintsSyntax::BasicConstraintsSyntax (const BasicConstraintsSyntax &)
-{
-  Asn1Error << "use of incompletely defined BasicConstraintsSyntax::BasicConstraintsSyntax (const BasicConstraintsSyntax &)" << endl;
-  abort();
-}
-
-BasicConstraintsSyntax::~BasicConstraintsSyntax()
-{
-  delete cA;
-  delete pathLenConstraint;
-}
-
-AsnType *BasicConstraintsSyntax::Clone() const
-{
-  return new BasicConstraintsSyntax;
-}
-
-AsnType *BasicConstraintsSyntax::Copy() const
-{
-  return new BasicConstraintsSyntax (*this);
-}
-
-#if SNACC_DEEP_COPY
-BasicConstraintsSyntax &BasicConstraintsSyntax::operator = (const BasicConstraintsSyntax &that)
-#else // SNACC_DEEP_COPY
-BasicConstraintsSyntax &BasicConstraintsSyntax::operator = (const BasicConstraintsSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.cA)
-    {
-      if (!cA)
-        cA = new AsnBool;
-      *cA = *that.cA;
-    }
-    else
-    {
-      delete cA;
-      cA = NULL;
-    }
-    if (that.pathLenConstraint)
-    {
-      if (!pathLenConstraint)
-        pathLenConstraint = new AsnInt;
-      *pathLenConstraint = *that.pathLenConstraint;
-    }
-    else
-    {
-      delete pathLenConstraint;
-      pathLenConstraint = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined BasicConstraintsSyntax &BasicConstraintsSyntax::operator = (const BasicConstraintsSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-BasicConstraintsSyntax::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (pathLenConstraint))
-  {
-    l = pathLenConstraint->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, UNIV, PRIM, INTEGER_TAG_CODE);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (cA))
-  {
-    l = cA->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, UNIV, PRIM, BOOLEAN_TAG_CODE);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // BasicConstraintsSyntax::BEncContent
-
-
-void BasicConstraintsSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, BOOLEAN_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    cA = new AsnBool;
-    cA->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (UNIV, PRIM, INTEGER_TAG_CODE)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    pathLenConstraint = new AsnInt;
-    pathLenConstraint->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-135);
-  }
-  else
-    return;
-} // BasicConstraintsSyntax::BDecContent
-
-AsnLen BasicConstraintsSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void BasicConstraintsSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "BasicConstraintsSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-136);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void BasicConstraintsSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (cA))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "cA ";
-    os << *cA;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "cA ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (pathLenConstraint))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "pathLenConstraint ";
-    os << *pathLenConstraint;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "pathLenConstraint ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // BasicConstraintsSyntax::Print
-
-
-NameConstraintsSyntax::NameConstraintsSyntax()
-{
-  permittedSubtrees = NULL;
-  excludedSubtrees = NULL;
-}
-
-NameConstraintsSyntax::NameConstraintsSyntax (const NameConstraintsSyntax &)
-{
-  Asn1Error << "use of incompletely defined NameConstraintsSyntax::NameConstraintsSyntax (const NameConstraintsSyntax &)" << endl;
-  abort();
-}
-
-NameConstraintsSyntax::~NameConstraintsSyntax()
-{
-  delete permittedSubtrees;
-  delete excludedSubtrees;
-}
-
-AsnType *NameConstraintsSyntax::Clone() const
-{
-  return new NameConstraintsSyntax;
-}
-
-AsnType *NameConstraintsSyntax::Copy() const
-{
-  return new NameConstraintsSyntax (*this);
-}
-
-#if SNACC_DEEP_COPY
-NameConstraintsSyntax &NameConstraintsSyntax::operator = (const NameConstraintsSyntax &that)
-#else // SNACC_DEEP_COPY
-NameConstraintsSyntax &NameConstraintsSyntax::operator = (const NameConstraintsSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.permittedSubtrees)
-    {
-      if (!permittedSubtrees)
-        permittedSubtrees = new GeneralSubtrees;
-      *permittedSubtrees = *that.permittedSubtrees;
-    }
-    else
-    {
-      delete permittedSubtrees;
-      permittedSubtrees = NULL;
-    }
-    if (that.excludedSubtrees)
-    {
-      if (!excludedSubtrees)
-        excludedSubtrees = new GeneralSubtrees;
-      *excludedSubtrees = *that.excludedSubtrees;
-    }
-    else
-    {
-      delete excludedSubtrees;
-      excludedSubtrees = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined NameConstraintsSyntax &NameConstraintsSyntax::operator = (const NameConstraintsSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-NameConstraintsSyntax::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (excludedSubtrees))
-  {
-      BEncEocIfNec (b);
-    l = excludedSubtrees->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (permittedSubtrees))
-  {
-      BEncEocIfNec (b);
-    l = permittedSubtrees->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // NameConstraintsSyntax::BEncContent
-
-
-void NameConstraintsSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    permittedSubtrees = new GeneralSubtrees;
-    permittedSubtrees->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    excludedSubtrees = new GeneralSubtrees;
-    excludedSubtrees->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-137);
-  }
-  else
-    return;
-} // NameConstraintsSyntax::BDecContent
-
-AsnLen NameConstraintsSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void NameConstraintsSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "NameConstraintsSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-138);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void NameConstraintsSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (permittedSubtrees))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "permittedSubtrees ";
-    os << *permittedSubtrees;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "permittedSubtrees ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (excludedSubtrees))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "excludedSubtrees ";
-    os << *excludedSubtrees;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "excludedSubtrees ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // NameConstraintsSyntax::Print
-
-
-PolicyConstraintsSyntax::PolicyConstraintsSyntax()
-{
-  requireExplicitPolicy = NULL;
-  inhibitPolicyMapping = NULL;
-}
-
-PolicyConstraintsSyntax::PolicyConstraintsSyntax (const PolicyConstraintsSyntax &)
-{
-  Asn1Error << "use of incompletely defined PolicyConstraintsSyntax::PolicyConstraintsSyntax (const PolicyConstraintsSyntax &)" << endl;
-  abort();
-}
-
-PolicyConstraintsSyntax::~PolicyConstraintsSyntax()
-{
-  delete requireExplicitPolicy;
-  delete inhibitPolicyMapping;
-}
-
-AsnType *PolicyConstraintsSyntax::Clone() const
-{
-  return new PolicyConstraintsSyntax;
-}
-
-AsnType *PolicyConstraintsSyntax::Copy() const
-{
-  return new PolicyConstraintsSyntax (*this);
-}
-
-#if SNACC_DEEP_COPY
-PolicyConstraintsSyntax &PolicyConstraintsSyntax::operator = (const PolicyConstraintsSyntax &that)
-#else // SNACC_DEEP_COPY
-PolicyConstraintsSyntax &PolicyConstraintsSyntax::operator = (const PolicyConstraintsSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.requireExplicitPolicy)
-    {
-      if (!requireExplicitPolicy)
-        requireExplicitPolicy = new SkipCerts;
-      *requireExplicitPolicy = *that.requireExplicitPolicy;
-    }
-    else
-    {
-      delete requireExplicitPolicy;
-      requireExplicitPolicy = NULL;
-    }
-    if (that.inhibitPolicyMapping)
-    {
-      if (!inhibitPolicyMapping)
-        inhibitPolicyMapping = new SkipCerts;
-      *inhibitPolicyMapping = *that.inhibitPolicyMapping;
-    }
-    else
-    {
-      delete inhibitPolicyMapping;
-      inhibitPolicyMapping = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined PolicyConstraintsSyntax &PolicyConstraintsSyntax::operator = (const PolicyConstraintsSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-PolicyConstraintsSyntax::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (inhibitPolicyMapping))
-  {
-    l = inhibitPolicyMapping->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (requireExplicitPolicy))
-  {
-    l = requireExplicitPolicy->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // PolicyConstraintsSyntax::BEncContent
-
-
-void PolicyConstraintsSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    requireExplicitPolicy = new SkipCerts;
-    requireExplicitPolicy->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    inhibitPolicyMapping = new SkipCerts;
-    inhibitPolicyMapping->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-139);
-  }
-  else
-    return;
-} // PolicyConstraintsSyntax::BDecContent
-
-AsnLen PolicyConstraintsSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void PolicyConstraintsSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "PolicyConstraintsSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-140);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void PolicyConstraintsSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (requireExplicitPolicy))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "requireExplicitPolicy ";
-    os << *requireExplicitPolicy;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "requireExplicitPolicy ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (inhibitPolicyMapping))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "inhibitPolicyMapping ";
-    os << *inhibitPolicyMapping;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "inhibitPolicyMapping ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // PolicyConstraintsSyntax::Print
-
-
-AsnType *CertPolicySet::Clone() const
-{
-  return new CertPolicySet;
-}
-
-AsnType *CertPolicySet::Copy() const
-{
-  return new CertPolicySet (*this);
-}
-
-AsnLen CertPolicySet::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void CertPolicySet::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "CertPolicySet::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-141);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-CertPolicySet::CertPolicySet (const CertPolicySet &)
-{
-  Asn1Error << "use of incompletely defined CertPolicySet::CertPolicySet (const CertPolicySet &)" << endl;
-  abort();
-}
-
-CertPolicySet::~CertPolicySet()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-CertPolicySet &CertPolicySet::operator = (const CertPolicySet &that)
-#else // SNACC_DEEP_COPY
-CertPolicySet &CertPolicySet::operator = (const CertPolicySet &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined CertPolicySet &CertPolicySet::operator = (const CertPolicySet &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void CertPolicySet::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  CertPolicySet::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // CertPolicySet::SetCurrElmt
-
-
-unsigned long int  CertPolicySet::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // CertPolicySet::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-CertPolicyId *CertPolicySet::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new CertPolicyId;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertPolicySet::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-CertPolicyId  *CertPolicySet::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertPolicySet::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-CertPolicyId  *CertPolicySet::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertPolicySet::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-CertPolicyId *CertPolicySet::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CertPolicySet::InsertAfter
-
-
-CertPolicySet  &CertPolicySet::AppendCopy (CertPolicyId &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-CertPolicySet  &CertPolicySet::PrependCopy (CertPolicyId &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // CertPolicySet::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-CertPolicySet &CertPolicySet::InsertBeforeAndCopy (CertPolicyId &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // CertPolicySet::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-CertPolicySet  &CertPolicySet::InsertAfterAndCopy (CertPolicyId &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new CertPolicyId;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // CertPolicySet::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void CertPolicySet::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen CertPolicySet::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncDefLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, PRIM, OID_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // CertPolicySet::BEncContent
-
-
-void  CertPolicySet::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    CertPolicyId *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, PRIM, OID_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-142);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // CertPolicySet::BDecContent
-
-
-AsnType *CRLDistPointsSyntax::Clone() const
-{
-  return new CRLDistPointsSyntax;
-}
-
-AsnType *CRLDistPointsSyntax::Copy() const
-{
-  return new CRLDistPointsSyntax (*this);
-}
-
-AsnLen CRLDistPointsSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void CRLDistPointsSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "CRLDistPointsSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-143);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-CRLDistPointsSyntax::CRLDistPointsSyntax (const CRLDistPointsSyntax &)
-{
-  Asn1Error << "use of incompletely defined CRLDistPointsSyntax::CRLDistPointsSyntax (const CRLDistPointsSyntax &)" << endl;
-  abort();
-}
-
-CRLDistPointsSyntax::~CRLDistPointsSyntax()
-{
-  SetCurrToFirst();
-  for (; Curr() != NULL; RemoveCurrFromList())
-    ;
-} // end of destructor
-
-#if SNACC_DEEP_COPY
-CRLDistPointsSyntax &CRLDistPointsSyntax::operator = (const CRLDistPointsSyntax &that)
-#else // SNACC_DEEP_COPY
-CRLDistPointsSyntax &CRLDistPointsSyntax::operator = (const CRLDistPointsSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    SetCurrToFirst();
-    for (; Curr(); RemoveCurrFromList())
-      ;
-
-    //that.SetCurrToFirst();
-    //for (; that.Curr(); that.GoNext())
-    //  AppendCopy (*that.Curr());
-    for (const AsnListElmt *run=that.first; run; run=run->next)
-      AppendCopy (*run->elmt);
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined CRLDistPointsSyntax &CRLDistPointsSyntax::operator = (const CRLDistPointsSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-void CRLDistPointsSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-    os << "{ -- SEQUENCE/SET OF -- " << endl;
-    indentG += stdIndentG;
-    //SetCurrToFirst();
-    //for (; Curr() != NULL; GoNext())
-    for (const AsnListElmt *run=first; run; run=run->next)
-    {
-        Indent (os, indentG);
-        //os << *Curr();
-        os << *run->elmt;
-        //if (Curr() != Last())
-        if (run != last)
-            os << ",";
-        os << endl;
-    }
-    indentG -= stdIndentG;
-    Indent (os, indentG);
-    os << "}\n";
-#endif /* NDEBUG */
-
-
-} // Print
-
-
-void  CRLDistPointsSyntax::SetCurrElmt (unsigned long int index)
-{
-  unsigned long int i;
-  curr = first;
-  if (count)
-    for (i = 0; (i < (count-1)) && (i < index); i++)
-      curr = curr->next;
-} // CRLDistPointsSyntax::SetCurrElmt
-
-
-unsigned long int  CRLDistPointsSyntax::GetCurrElmtIndex()
-{
-    unsigned long int i;
-    AsnListElmt *tmp;
-    if (curr != NULL)
-    {
-        for (i = 0, tmp = first; tmp != NULL; i++)
-        {
-            if (tmp == curr)
-                return i;
-            else
-                tmp = tmp->next;
-        }
-    }
-    return count;
-} // CRLDistPointsSyntax::GetCurrElmtIndex
-
-
-// alloc new list elmt, put at end of list
-//  and return the component type
-DistributionPoint *CRLDistPointsSyntax::Append()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt  = new DistributionPoint;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CRLDistPointsSyntax::Append
-
-
-// alloc new list elmt, put at begining of list
-//  and return the component type
-DistributionPoint  *CRLDistPointsSyntax::Prepend()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CRLDistPointsSyntax::Prepend
-
-
-// alloc new list elmt, insert it before the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-DistributionPoint  *CRLDistPointsSyntax::InsertBefore()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CRLDistPointsSyntax::InsertBefore
-
-
-// alloc new list elmt, insert it after the
-// current element and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-DistributionPoint *CRLDistPointsSyntax::InsertAfter()
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return (curr = newElmt)->elmt;
-} // CRLDistPointsSyntax::InsertAfter
-
-
-CRLDistPointsSyntax  &CRLDistPointsSyntax::AppendCopy (DistributionPoint &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    *newElmt->elmt = elmt;
-    newElmt->next = NULL;
-    if (last == NULL)
-    {
-        newElmt->prev = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->prev = last;
-        last->next    = newElmt;
-        last          = newElmt;
-    }
-    count++;
-    return *this;
-} // AppendCopy
-
-
-CRLDistPointsSyntax  &CRLDistPointsSyntax::PrependCopy (DistributionPoint &elmt)
-{
-    AsnListElmt *newElmt;
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    *newElmt->elmt = elmt;
-    newElmt->prev = NULL;
-    if (first == NULL)
-    {
-        newElmt->next = NULL;
-        first = last  = newElmt;
-    }
-    else
-    {
-        newElmt->next = first;
-        first->prev   = newElmt;
-        first         = newElmt;
-    }
-    count++;
-    return *this;
-} // CRLDistPointsSyntax::PrependCopy
-
-
-// alloc new list elmt, insert it before the
-// current element, copy the given elmt into the new elmt
-// and return the component type.
-// if the current element is null, the new element
-// is placed at the beginning of the list.
-CRLDistPointsSyntax &CRLDistPointsSyntax::InsertBeforeAndCopy (DistributionPoint &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    *newElmt->elmt = elmt;
-
-    if (curr == NULL)
-    {
-        newElmt->next = first;
-        newElmt->prev = NULL;
-        first = newElmt;
-        if (last == NULL)
-            last = newElmt;
-    }
-    else
-    {
-        newElmt->next = curr;
-        newElmt->prev = curr->prev;
-        curr->prev = newElmt;
-        if (curr == first)
-            first = newElmt;
-        else
-            newElmt->prev->next = newElmt;
-    }
-    count++;
-    return *this;
-} // CRLDistPointsSyntax::InsertBeforeAndCopy
-
-
-// alloc new list elmt, insert it after the
-// current element, copy given elmt in to new elmt
-//  and return the component type
-// if the current element is null, the new element
-// is placed at the end of the list.
-CRLDistPointsSyntax  &CRLDistPointsSyntax::InsertAfterAndCopy (DistributionPoint &elmt)
-{
-    AsnListElmt *newElmt;
-
-    newElmt  = new AsnListElmt;
-    newElmt->elmt = new DistributionPoint;
-    *newElmt->elmt = elmt;
-    if (curr == NULL)
-    {
-        newElmt->prev = last;
-        newElmt->next = NULL;
-        last = newElmt;
-        if (first == NULL)
-            first = newElmt;
-    }
-    else
-    {
-        newElmt->prev = curr;
-        newElmt->next = curr->next;
-        curr->next = newElmt;
-        if (curr == last)
-            last = newElmt;
-        else
-            newElmt->next->prev = newElmt;
-    }
-    count++;
-    return *this;
-} // CRLDistPointsSyntax::InsertAfterAndCopy
-
-
-// remove current element from list if current element is not NULL 
-// The new current element will be the next element.
-// If the current element is the last element in the list
-// the second but last element will become the new current element.
-void CRLDistPointsSyntax::RemoveCurrFromList()
-{
-    AsnListElmt *del_elmt;
-
-    if (curr != NULL)
-    {
-        del_elmt = curr;
-        count--;
-
-        if (count == 0)
-            first = last = curr = NULL;
-        else if (curr == first)
-        {
-            curr = first= first->next;
-            first->prev = NULL;
-        }
-        else if (curr == last)
-        {
-            curr = last = last->prev;
-            last->next = NULL;
-        }
-        else
-        {
-            curr->prev->next = curr->next;
-            curr->next->prev = curr->prev;
-        }
-
-        delete del_elmt->elmt;
-        delete del_elmt;
-    }
-}
-
-
-AsnLen CRLDistPointsSyntax::BEncContent (BUF_TYPE b)
-{
-    AsnListElmt *currElmt;
-    AsnLen elmtLen;
-    AsnLen totalLen = 0;
-    for (currElmt = last; currElmt != NULL; currElmt = currElmt->prev)
-    {
-      BEncEocIfNec (b);
-        elmtLen = currElmt->elmt->BEncContent (b);
-    elmtLen += BEncConsLen (b, elmtLen);
-
-    elmtLen += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-        totalLen += elmtLen;
-    }
-    return totalLen;
-} // CRLDistPointsSyntax::BEncContent
-
-
-void  CRLDistPointsSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0,
-                                  AsnLen &bytesDecoded, ENV_TYPE env)
-{
-    DistributionPoint *listElmt;
-    AsnTag tag1;
-    AsnLen listBytesDecoded = 0;
-    AsnLen elmtLen1;
-
-    while ((listBytesDecoded < elmtLen0) || (elmtLen0 == INDEFINITE_LEN))
-    {
-        tag1 = BDecTag (b, listBytesDecoded, env);
-        if ((tag1 == EOC_TAG_ID) && (elmtLen0 == INDEFINITE_LEN))
-        {
-            BDEC_2ND_EOC_OCTET (b, listBytesDecoded, env);
-            break;
-        }
-        if ((tag1 != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE)))
-        {
-            Asn1Error << "Unexpected Tag" << endl;
-            SnaccExcep::throwMe(-144);
-        }
-
-        elmtLen1 = BDecLen (b, listBytesDecoded, env);
-        listElmt = Append();
-        listElmt->BDecContent (b, tag1, elmtLen1, listBytesDecoded, env);
-    }
-
-    bytesDecoded += listBytesDecoded;
-} // CRLDistPointsSyntax::BDecContent
-
-
-IssuingDistPointSyntax::IssuingDistPointSyntax()
-{
-  distributionPoint = NULL;
-  onlyContainsUserCerts = NULL;
-  onlyContainsCACerts = NULL;
-  onlySomeReasons = NULL;
-  indirectCRL = NULL;
-}
-
-IssuingDistPointSyntax::IssuingDistPointSyntax (const IssuingDistPointSyntax &)
-{
-  Asn1Error << "use of incompletely defined IssuingDistPointSyntax::IssuingDistPointSyntax (const IssuingDistPointSyntax &)" << endl;
-  abort();
-}
-
-IssuingDistPointSyntax::~IssuingDistPointSyntax()
-{
-  delete distributionPoint;
-  delete onlyContainsUserCerts;
-  delete onlyContainsCACerts;
-  delete onlySomeReasons;
-  delete indirectCRL;
-}
-
-AsnType *IssuingDistPointSyntax::Clone() const
-{
-  return new IssuingDistPointSyntax;
-}
-
-AsnType *IssuingDistPointSyntax::Copy() const
-{
-  return new IssuingDistPointSyntax (*this);
-}
-
-#if SNACC_DEEP_COPY
-IssuingDistPointSyntax &IssuingDistPointSyntax::operator = (const IssuingDistPointSyntax &that)
-#else // SNACC_DEEP_COPY
-IssuingDistPointSyntax &IssuingDistPointSyntax::operator = (const IssuingDistPointSyntax &)
-#endif // SNACC_DEEP_COPY
-{
-#if SNACC_DEEP_COPY
-  if (this != &that)
-  {
-    if (that.distributionPoint)
-    {
-      if (!distributionPoint)
-        distributionPoint = new DistributionPointName;
-      *distributionPoint = *that.distributionPoint;
-    }
-    else
-    {
-      delete distributionPoint;
-      distributionPoint = NULL;
-    }
-    if (that.onlyContainsUserCerts)
-    {
-      if (!onlyContainsUserCerts)
-        onlyContainsUserCerts = new AsnBool;
-      *onlyContainsUserCerts = *that.onlyContainsUserCerts;
-    }
-    else
-    {
-      delete onlyContainsUserCerts;
-      onlyContainsUserCerts = NULL;
-    }
-    if (that.onlyContainsCACerts)
-    {
-      if (!onlyContainsCACerts)
-        onlyContainsCACerts = new AsnBool;
-      *onlyContainsCACerts = *that.onlyContainsCACerts;
-    }
-    else
-    {
-      delete onlyContainsCACerts;
-      onlyContainsCACerts = NULL;
-    }
-    if (that.onlySomeReasons)
-    {
-      if (!onlySomeReasons)
-        onlySomeReasons = new ReasonFlags;
-      *onlySomeReasons = *that.onlySomeReasons;
-    }
-    else
-    {
-      delete onlySomeReasons;
-      onlySomeReasons = NULL;
-    }
-    if (that.indirectCRL)
-    {
-      if (!indirectCRL)
-        indirectCRL = new AsnBool;
-      *indirectCRL = *that.indirectCRL;
-    }
-    else
-    {
-      delete indirectCRL;
-      indirectCRL = NULL;
-    }
-  }
-
-  return *this;
-#else // SNACC_DEEP_COPY
-  Asn1Error << "use of incompletely defined IssuingDistPointSyntax &IssuingDistPointSyntax::operator = (const IssuingDistPointSyntax &)" << endl;
-  abort();
-  // if your compiler complains here, check the -novolat option
-#endif // SNACC_DEEP_COPY
-}
-
-AsnLen
-IssuingDistPointSyntax::BEncContent (BUF_TYPE b)
-{
-  AsnLen totalLen = 0;
-  AsnLen l;
-
-  if (NOT_NULL (indirectCRL))
-  {
-    l = indirectCRL->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 4);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (onlySomeReasons))
-  {
-    l = onlySomeReasons->BEncContent (b);
-    l += BEncDefLen (b, l);
-
-    l += BEncTag1 (b, CNTX, PRIM, 3);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (onlyContainsCACerts))
-  {
-    l = onlyContainsCACerts->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 2);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (onlyContainsUserCerts))
-  {
-    l = onlyContainsUserCerts->BEncContent (b);
-    BEncDefLenTo127 (b, l);
-    l++;
-
-    l += BEncTag1 (b, CNTX, PRIM, 1);
-    totalLen += l;
-  }
-
-  if (NOT_NULL (distributionPoint))
-  {
-      BEncEocIfNec (b);
-    l = distributionPoint->BEncContent (b);
-    l += BEncConsLen (b, l);
-
-    l += BEncTag1 (b, CNTX, CONS, 0);
-    totalLen += l;
-  }
-
-  return totalLen;
-} // IssuingDistPointSyntax::BEncContent
-
-
-void IssuingDistPointSyntax::BDecContent (BUF_TYPE b, AsnTag /*tag0*/, AsnLen elmtLen0, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag1;
-  AsnLen seqBytesDecoded = 0;
-  AsnLen elmtLen1;
-  AsnLen elmtLen2;
-  if (elmtLen0 == 0)
-    return;
-  else
-  {
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-
-    if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-    {
-      BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, CONS, 0)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    tag1 = BDecTag (b, seqBytesDecoded, env);
-    elmtLen2 = BDecLen (b, seqBytesDecoded, env);
-    distributionPoint = new DistributionPointName;
-    distributionPoint->BDecContent (b, tag1, elmtLen2, seqBytesDecoded, env);
-    if (elmtLen1 == INDEFINITE_LEN)
-      BDecEoc (b, seqBytesDecoded, env);
-
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 1)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    onlyContainsUserCerts = new AsnBool;
-    onlyContainsUserCerts->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 2)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    onlyContainsCACerts = new AsnBool;
-    onlyContainsCACerts->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 3))
-    || (tag1 == MAKE_TAG_ID (CNTX, CONS, 3)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    onlySomeReasons = new ReasonFlags;
-    onlySomeReasons->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-    if (seqBytesDecoded == elmtLen0)
-    {
-      bytesDecoded += seqBytesDecoded;
-      return;
-    }
-    else
-    {
-      tag1 = BDecTag (b, seqBytesDecoded, env);
-
-      if ((elmtLen0 == INDEFINITE_LEN) && (tag1 == EOC_TAG_ID))
-      {
-        BDEC_2ND_EOC_OCTET (b, seqBytesDecoded, env)
-        bytesDecoded += seqBytesDecoded;
-        return;
-      }
-    }
-  }
-
-  if ((tag1 == MAKE_TAG_ID (CNTX, PRIM, 4)))
-  {
-    elmtLen1 = BDecLen (b, seqBytesDecoded, env);
-    indirectCRL = new AsnBool;
-    indirectCRL->BDecContent (b, tag1, elmtLen1, seqBytesDecoded, env);
-  }
-
-  bytesDecoded += seqBytesDecoded;
-  if (elmtLen0 == INDEFINITE_LEN)
-  {
-    BDecEoc (b, bytesDecoded, env);
-    return;
-  }
-  else if (seqBytesDecoded != elmtLen0)
-  {
-    Asn1Error << "ERROR - Length discrepancy on sequence." << endl;
-    SnaccExcep::throwMe(-145);
-  }
-  else
-    return;
-} // IssuingDistPointSyntax::BDecContent
-
-AsnLen IssuingDistPointSyntax::BEnc (BUF_TYPE b)
-{
-  AsnLen l;
-  l = BEncContent (b);
-  l += BEncConsLen (b, l);
-  l += BEncTag1 (b, UNIV, CONS, SEQ_TAG_CODE);
-  return l;
-}
-
-void IssuingDistPointSyntax::BDec (BUF_TYPE b, AsnLen &bytesDecoded, ENV_TYPE env)
-{
-  AsnTag tag;
-  AsnLen elmtLen1;
-
-  if ((tag = BDecTag (b, bytesDecoded, env)) != MAKE_TAG_ID (UNIV, CONS, SEQ_TAG_CODE))
-  {
-    Asn1Error << "IssuingDistPointSyntax::BDec: ERROR - wrong tag" << endl;
-    SnaccExcep::throwMe(-146);
-  }
-  elmtLen1 = BDecLen (b, bytesDecoded, env);
-  BDecContent (b, tag, elmtLen1, bytesDecoded, env);
-}
-
-void IssuingDistPointSyntax::Print (ostream &os) const
-{
-#ifndef NDEBUG
-  int nonePrinted = true;
-  os << "{ -- SEQUENCE --" << endl;
-  indentG += stdIndentG;
-
-  if (NOT_NULL (distributionPoint))
-  {
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "distributionPoint ";
-    os << *distributionPoint;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "distributionPoint ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (onlyContainsUserCerts))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "onlyContainsUserCerts ";
-    os << *onlyContainsUserCerts;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "onlyContainsUserCerts ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (onlyContainsCACerts))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "onlyContainsCACerts ";
-    os << *onlyContainsCACerts;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "onlyContainsCACerts ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (onlySomeReasons))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "onlySomeReasons ";
-    os << *onlySomeReasons;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "onlySomeReasons ";
-    os << "-- void --";
-    os << "," << endl;
-  }
-
-  if (NOT_NULL (indirectCRL))
-  {
-    if (!nonePrinted)
-      os << "," << endl;
-    nonePrinted = false;
-    Indent (os, indentG);
-    os << "indirectCRL ";
-    os << *indirectCRL;
-  }
-  else
-  {
-    Indent (os, indentG);
-    os << "indirectCRL ";
-    os << "-- void --";
-    os << endl;
-  }
-
-  os << endl;
-  indentG -= stdIndentG;
-  Indent (os, indentG);
-  os << "}";
-#endif /* NDEBUG */
-} // IssuingDistPointSyntax::Print
-
-