#include "QFramework/TQTaggable.h"
#include "TString.h"
#include "TNamed.h"
#include "TClass.h"
#include "TList.h"
#include "TParameter.h"
#include "TIterator.h"
#include "TCollection.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQListUtils.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQFolder.h"

// #define _DEBUG_

#include "QFramework/TQLibrary.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQTaggable:
//
// The TQTaggable class represents a set of tags and introduces a methods to read and write
// tags from and to it. A tag is a key-value-pair, where the key is a unique string and the
// value might be a string, a bool, an integer or a double.
//
// Tags are set using either of the methods:
//
// - TQTaggable::setTagString("<key>", "<value>")
// - TQTaggable::setTagInteger("<key>", <value>)
// - TQTaggable::setTagDouble("<key>", <value>)
// - TQTaggable::setTagBool("<key>", <value>)
//
// To retrieve the value of a tag one can use
//
// - TQTaggable::getTagStringDefault("<key>", "<default>")
// - TQTaggable::getTagIntegerDefault("<key>", <default>)
// - TQTaggable::getTagDoubleDefault("<key>", <default>)
// - TQTaggable::getTagBoolDefault("<key>", <default>)
//
// where the default value <default> is used if the tag is not present or
//
// - TQTaggable::getTagString("<key>", <value>)
// - TQTaggable::getTagInteger("<key>", <value>)
// - TQTaggable::getTagDouble("<key>", <value>)
// - TQTaggable::getTagBool("<key>", <value>)
//
// where <value> is a variable set to the value of the tag if it is present (return value of
// corresponding function indicates if tag is present). In each case data types are converted
// if necessary and possible.
//
// The TQTaggable class is prepared to allow for an hierarchical tree-like structure of
// instances of TQTaggable (if implemented by a descendant class).
//
// Some special symbols allow to modify the way in which tags are retrieved:
// "~tag" search for the first occurence of tag 'tag' upwards the tree
// "tag~" search for the first occurence of tag 'tag' downwards
//
// Some special symbols allow to modify the way in which tags are set:
// "tag?" only set the tag if it does not exist yet, i.e. don't overwrite
//
// Renaming/removing tags can be done using
//
// - TQTaggable::removeTag(...) remove one tag
//
// - TQTaggable::clearTags() remove all tags
//
// - TQTaggable::renameTag(...) rename one tag
//
// - TQTaggable::renameTags(...) rename all tags with certain key prefix
//
//
// The presence (or absence) and the validity (in terms of data types and simple numerical
// requirements) of tags may be tested using
//
// - TQTaggable::claimTags(...) test validity of tags
//
//
// Useful string parsing utilities provided by the TQTaggable class are
//
// - TQTaggable::importTags(...) parses a string with comma-separated key-value
//  assignments, e.g. "hello = world, x = 5"
//
// - TQTaggable::parseParameterList(...) parses a string with (not necessarily comma-)
//  separated values, e.g. "'test', 4, 1"
//
// - TQTaggable::parseFlags(...) parses a string with flags and optional
//  parameters, e.g. "abc4"
//
// Would be nice to have at some point but has not yet been finalized:
//
// "||key" logical OR of all tags 'key' upwards
// "&&key" logical AND of all tags 'key' upwards
// "key||" logical OR of all tags 'key' downwards
// "key&&" logical AND of all tags 'key' downwards
//
// "+key" SUM of all tags 'key' upwards
// "*key" PRODUCT of all tags 'key' upwards
// "key+" SUM of all tags 'key' downwards
// "key*" PRODUCT of all tags 'key' downwards
//
// "#key" number of occurences of tags 'key' upwards
// "key#" number of occurences of tags 'key' downwards
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQTaggable)


//__________________________________________________________________________________|___________

TQTaggable::TQTaggable() :
  fTags(0),
  fReadFlags(0),
  fGlobalIgnoreCase(false),
  fGlobalOverwrite(true)
{
  // Creates a new instance of the TQTaggable class without any tags set.
}


//__________________________________________________________________________________|___________

TQTaggable::TQTaggable(const TString& tags) :
  TQTaggable(tags.Data())
{
  // Creates a new instance of TQTaggable and tries to interpret the input string
  // <tags> as comma-separated key-value assignments (see TQTaggable::importTags(...)).
  // In case "--" is prepended the following string will be interpreted as flags
  // (see TQTaggable:parseFlags(...)).
}


//__________________________________________________________________________________|___________

TQTaggable::TQTaggable(const char* str) :
  TQTaggable()
{
  // Creates a new instance of TQTaggable and tries to interpret the input string
  // <tags> as comma-separated key-value assignments (see TQTaggable::importTags(...)).
  // In case "--" is prepended the following string will be interpreted as flags
  // (see TQTaggable:parseFlags(...)).

  TString tags(str);

  if (TQStringUtils::removeLeading(tags, "-") == 2) {
    // interpret and import as flags
    TQTaggable * flags = TQTaggable::parseFlags(tags);
    if (flags) {
      flags->exportTags(this);
      delete flags;
    }
  } else {
    // simply import tags
    importTags(tags);
  }
}


//__________________________________________________________________________________|___________

TQTaggable::TQTaggable(TQTaggable * tags) :
  TQTaggable()
{
  // Creates a new instance of TQTaggable and imports tags assigned to <tags> to
  // this instance.
  this->importTags(tags);
}

//__________________________________________________________________________________|___________

TQTaggable::TQTaggable(const TQTaggable& tags) :
  TQTaggable()
{
  // Creates a new instance of TQTaggable and imports tags assigned to <tags> to
  // this instance.
  this->importTags(tags);
}

//__________________________________________________________________________________|___________

TQTaggable * TQTaggable::getBaseTaggable() const {
  // Returns a pointer to the base instance of TQTaggable in a tree of TQTaggables.
  // This method is supposed to be overwritten by a descendant class implementing
  // the management of a tree-like structure of TQTaggables.

  // default: no base taggable present
  return 0;
}


//__________________________________________________________________________________|___________

TList * TQTaggable::getDescendantTaggables() {
  // default: no descendant taggables
  return 0;
}


//__________________________________________________________________________________|___________

TList * TQTaggable::getTaggablesByName(const TString& /*name*/) {
  // default: no taggables around
  return 0;
}

//__________________________________________________________________________________|___________

TList * TQTaggable::getListOfTaggables(const TString& /*name*/) {
  // default: no taggables around
  return 0;
}


//__________________________________________________________________________________|___________

const TString& TQTaggable::getValidKeyCharacters() {
  // return the list of all valid key characters
  return TQValue::getValidNameCharacters();
}


//__________________________________________________________________________________|___________

bool TQTaggable::isValidKey(const TString& key) {
  // Returns true if <key> is a valid key and false otherwise.

  return TQValue::isValidName(key);
}


//__________________________________________________________________________________|___________

void TQTaggable::resetReadFlags() {
  // reset the counting of which flags have been read already
  if (fReadFlags) {
    delete fReadFlags;
  }
  fReadFlags = new TList();
  fReadFlags->SetOwner(true);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasUnreadKeys(const TString& filter) {
  // get the list of unread keys
  TList * unreadKeys = getListOfUnreadKeys(filter);

  if (unreadKeys) {
    delete unreadKeys;
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

TList * TQTaggable::getListOfUnreadKeys(const TString& filter) {

  // get the list of all keys matching <filter> and ...
  TList * unreadKeys = getListOfKeys(filter);
  if (!unreadKeys) {
    return NULL;
  }

  // ... remove the flagged ones
  TQIterator itr(fReadFlags);
  while (itr.hasNext()) {
    TObject * tag = unreadKeys->FindObject(itr.readNext()->GetName());
    if (tag) {
      unreadKeys->Remove(tag);
      delete tag;
    }
  }

  if (unreadKeys->GetEntries() == 0) {
    delete unreadKeys;
    unreadKeys = NULL;
  }

  return unreadKeys;
}


//__________________________________________________________________________________|___________

void TQTaggable::onAccess(TQValue * /*tag*/) {
}


//__________________________________________________________________________________|___________

void TQTaggable::onRead(TQValue * tag) {

  if (fReadFlags) {
    if (!fReadFlags->FindObject(tag->GetName())) {
      fReadFlags->Add(new TObjString(tag->GetName()));
    }
  }
}


//__________________________________________________________________________________|___________

void TQTaggable::onWrite(TQValue * /*tag*/) {
}


//__________________________________________________________________________________|___________

TQTaggable * TQTaggable::parseFlags(const TString& flags) {
  // Reads the input string <flags>, interprets it as a set of flags with optional
  // parameters, and in case of success returns an instance of TQTaggable with tags
  // set corresponding to the flags and its parameters listed in the input string
  // (the user is responsible for deleting the returned instance). Returns a null
  // pointer in case of failure. Please note: this method returns a new instance of
  // TQTaggable even if there are no flags, e.g. if an empty string has been passed,
  // parseFlags(""). A flag is usually represented by a single letter, also allowing
  // for flags with more than one letter. Optionally, the flag might come with an
  // additional parameter, either of type string or integer.
  //
  // "a" occurence of flag "a", resulting in tag "a = true"
  // "a6" flag "a" coming with integer parameter (6), resulting in tag "a = 6"
  // "a[test]" flag "a" coming with string parameter ("test"), resulting in tag
  // "a = 'test'"
  //
  // Boolean flags (simple occurence) can be negated by prepending "!":
  //
  // "!a" negated occurence of flag "a", resulting in tag "a = false"
  //
  // Flags may be made of more than one single letter by enclosing its full name in "<>":
  //
  // "<myFlag>" occurence of flag "myFlag", resulting in tag "myFlag = true"
  //
  // Multiple flags are listed by simple string concatenation:
  //
  // "abc" occurence of flags "a", "b", and "c", resulting in tags "a = true,
  // b = true, c = true"
  // "ab5c[hello]" occurence of flag "a", flag "b" coming with integer parameter (5),
  // and flag "c" coming with string parameter ("hello"), resulting in
  // tags "a = true, b = 5, c = 'hello'"
  // "a-2<flag>5" flag "a" coming with integer parameter (-2) and flag "flag" coming
  // with integer parameter (5), resulting in tags "a = -2, flag = 5"
  //
  // This method is used to parse option flags to several functions of TQx classes.
  //
  // The inverse of TQTaggable::parseFlags(...) is TQTaggable::getFlags().

  // input string will be manipulated during parsing
  TString myFlags = flags;

  // will be the instance to return
  TQTaggable * tags = new TQTaggable();

  // parse the input string
  bool stop = false;
  while (!myFlags.IsNull() && !stop) {
    // negate a boolean flag?
    bool negate = false;
    if (TQStringUtils::removeLeading(myFlags, "!", 1)) {
      negate = true;
    }
    TString flag;
    // read one flag from head of string
    if (!TQStringUtils::readToken(myFlags, flag, TQStringUtils::getLetters(), 1) &&
        !TQStringUtils::readBlock(myFlags, flag, "<>[]{}", "\"\"''")) {
      stop = true;
      continue;
    }
    if (tags->hasTag(flag)) {
      // multiple occurence of flag => ERROR
      stop = true;
      continue;
    }

    // flag with string parameter
    TString block;
    if (TQStringUtils::readBlock(myFlags, block, "[]<>{}", "\"\"''")) {
      if (negate || !tags->setTagString(flag, block)) {
        // negating string flag or failed to set tag => ERROR
        stop = true;
      }
      continue;
    }

    // flag with numberic parameter
    TString number;
    if (TQStringUtils::readToken(myFlags, number, TQStringUtils::getNumerals() + "-")) {
      if (!TQStringUtils::isInteger(number)) {
        // not a valid integer found after integer flag => ERROR
        stop = true;
        continue;
      }
      if (negate || !tags->setTagInteger(flag, number.Atoi())) {
        // negating integer flag or failed to set tag => ERROR
        stop = true;
      }
      continue;
    }

    // flag without parameter
    tags->setTagBool(flag, !negate);
  }

  if (stop) {
    // cleanup in case there was an error
    delete tags;
    tags = NULL;
  }

  // return instance of TQTaggable with tags corresponding to flags
  return tags;
}


//__________________________________________________________________________________|___________

TString TQTaggable::getFlags() {
  // Creates and returns a string representing the tags associated to this instance
  // of TQTaggable as flags (see TQTaggable::parseFlags(...) for detailed information).

  // will be the string to return
  TString flags;

  // iterate over tags of this instance
  TQIterator itr(this->getListOfKeys(), true);
  while (itr.hasNext()) {
    TString name = itr.readNext()->GetName();
    TString flag;
    if (name.Length() == 1 && TQStringUtils::getLetters().Index(name) != kNPOS) {
      // single letter flag
      flag.Append(name);
    } else {
      // flag not made of one single letter
      flag.Append(TString("<") + name + ">");
    }

    TQValue * val = this->findTag(name);
    if (!val) {
      // should never happen
      continue;
    }
    if (!val->isBool()) {
      if (val->isInteger()) {
        // integer flag
        flag.Append(TString::Format("%d", val->getInteger()));
      } else {
        // string flag (here: also double flag possible)
        flag.Append(TString::Format("[%s]", val->getString().Data()));
      }
    } else {
      // boolean flag
      if (!val->getBool()) {
        // negate if tag is false
        flag.Prepend("!");
      }
    }

    // compile final string
    flags.Append(flag);
  }

  return flags;
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(TQValue * tag, const TString& destination, bool overwrite) {

  /* stop if no tag to add was given */
  if (!tag)
    return 0;

  /* if no destination was specified explicitly, add the tag to this taggable */
  if (destination.IsNull()) {

    // make sure the list exists and remove a potentially
    // existing tag with the same name (if overwrite == true)
    if (!fTags) {
      fTags = new TList();
    } else {
      TObject * existing = fTags->FindObject(tag->GetName());
      if (existing) {
        if (!overwrite) {
          // not allowed to overwrite existing tag
          return 0;
        }
        fTags->Remove(existing);
        delete existing;
      }
    }

    /* now add the tag: we add the instance that was passed
     * to this function, thus no need to delete anything */
    this->fTags->Add(tag);
    this->onWrite(tag);

    /* we added one tag */
    return 1;

    /* if a destination was specified we need to get
     * the list of taggables matching the destination */
  } else {

    /* get the list of taggables matching the destination
     * (assuming we have to delete the list returned) */
    TList * taggables = this->getTaggablesByName(destination);

    /* if there is no matching element we are done */
    if (!taggables)
      return 0;

    /* the number of taggables the tag is added to */
    int nTags = 0;

    /* loop over taggables in the list */
    TQIterator itr(taggables);

    while (itr.hasNext()) {
      /* sanity check: we don't expect anything else but instances of
       * the TQTaggable class, but nevertheless make sure this is true */
      TQTaggable* t = dynamic_cast<TQTaggable*>(itr.readNext());
      if(!t) continue;

      /* add a copy of the tag to the taggable from the list */
      if (nTags == 0)
        nTags += t->setTag(tag, "", overwrite);
      else
        nTags += t->setTag(tag->copy(), "", overwrite);

    }

    /* delete the list (but not the objects in the list) */
    delete taggables;

    /* return the number of taggables the tag was added to */
    return nTags;
  }
}


//__________________________________________________________________________________|___________

void TQTaggable::setGlobalIgnoreCase(bool globalIgnoreCase) {

  fGlobalIgnoreCase = globalIgnoreCase;
}


//__________________________________________________________________________________|___________

bool TQTaggable::getGlobalIgnoreCase() const {

  return fGlobalIgnoreCase;
}


//__________________________________________________________________________________|___________

void TQTaggable::setGlobalOverwrite(bool globalOverwrite) {

  fGlobalOverwrite = globalOverwrite;
}


//__________________________________________________________________________________|___________

bool TQTaggable::getGlobalOverwrite() const {
  TQTaggable* base = this->getBaseTaggable();
  return base ? base->getGlobalOverwrite() : fGlobalOverwrite;
}

//__________________________________________________________________________________|___________

TQValue * TQTaggable::findTag(TString name) {

  if (!fTags) return nullptr;

  bool ignoreCase = (TQStringUtils::removeLeading(name, "^", 1) > 0) || fGlobalIgnoreCase;

  // the TQValue object to return
  TQValue * tag = NULL;

  TQIterator itr(fTags);
  while (itr.hasNext() && !tag) {
    TObject * thisObj = itr.readNext();
    // is this check really needed?
    if (!thisObj) {
      continue;
    }
    TString thisName = thisObj->GetName();
    if ((name.CompareTo(thisName, ignoreCase ? TString::kIgnoreCase : TString::kExact) == 0)
        && thisObj->InheritsFrom(TQValue::Class())) {
      tag = (TQValue*)thisObj;
    }
  }

  // NULL if no matching object has been found
  return tag;
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasMatchingTag(const TString& name) const {
  // return true if a tag matching the expression exists, false otherwise
  return this->countMatchingTags(name)>0;
}

//__________________________________________________________________________________|___________

int TQTaggable::countMatchingTags(const TString& name) const {
  // count tags matching expression
  if (!fTags) return 0;
  
  int retval = 0;
  
  TQIterator itr(fTags);
  while (itr.hasNext()) {
    TObject * thisObj = itr.readNext();
    // is this check really needed?
    if (!thisObj) {
      continue;
    }
    if(TQStringUtils::matches(thisObj->GetName(),name)) retval++;
  }
  return retval;
}

//__________________________________________________________________________________|___________

bool TQTaggable::hasEquivalentTag(const TQValue* reference, bool recurseUp) {
  if (!reference) return false;
  TQValue* existing = nullptr;
  TString key = reference->GetName();
  if (recurseUp) TQStringUtils::ensureLeadingText(key,"~");
  getTag(key, existing);

  if (!existing) {
    return false;
  }
  return reference->isEquivalentTo(existing);
}

bool TQTaggable::hasEquivalentTag(const TQValue& reference, bool recurseUp) {
  //wrapper for pointer variant
  return this->hasEquivalentTag(&reference, recurseUp);
}

//__________________________________________________________________________________|___________

bool TQTaggable::hasEquivalentTag(const TString& key, const TString& value) {
  // check if there is a tag for the given key and if its value is equivalent
  // to the given one
  return this->hasEquivalentTag(TQValueString(key,value));
}

bool TQTaggable::hasEquivalentTag(const TString& key, const double value) {
  return this->hasEquivalentTag(TQValueDouble(key,value));
}

bool TQTaggable::hasEquivalentTag(const TString& key, const int value) {
  return this->hasEquivalentTag(TQValueInteger(key,value));
}

bool TQTaggable::hasEquivalentTag(const TString& key, const bool value) {
  return this->hasEquivalentTag(TQValueBool(key,value));
}

//__________________________________________________________________________________|___________

bool TQTaggable::isTagOverwrittenByDescendants(TString key) {
  TQStringUtils::removeLeading(key, "~"); //ensure no leading ~, this would mess things up
  TQStringUtils::ensureTrailingText(key,"~"); //we'll want to search upwards

  //need to explicitly go one level down as we don't want to consider this taggable itself!
  TList * descendantTaggables = this->getDescendantTaggables();
  TQIterator itr(descendantTaggables,true);
  while(itr.hasNext()){
    TQTaggable* child = dynamic_cast<TQTaggable*>(itr.readNext());
    if(!child) continue;
    if(child->hasTag(key)){
      //we got a match
      return true;
    }
  }
  //nothing matched for any decendant
  return false;

}

//__________________________________________________________________________________|___________

bool TQTaggable::getTag(const TString& key, TQValue * &tag) {

  TString myKey(key);

  // get tag recursively?
  bool recursiveUp = TQStringUtils::removeLeading(myKey, "~", 1) > 0;
  bool recursiveDown = TQStringUtils::removeTrailing(myKey, "~", 1) > 0;

  // try to find the tag
  TQValue * value = findTag(myKey);

  if (value) {

    /* we found the tag: return it */
    tag = (TQValue*)value;
    onAccess(tag);
    return true;

  } else {

    if (recursiveUp) {
      /* get the base taggable */
      TQTaggable * baseTaggable = getBaseTaggable();
      if (baseTaggable) {
        /* search the base taggable for the tag */
        return baseTaggable->getTag(key, tag);
      }
    }

    if (recursiveDown){
      /* get descendant taggables */
      TList * descendantTaggables = this->getDescendantTaggables();
      TQIterator itr(descendantTaggables,true);
      while(itr.hasNext()){
        TQTaggable* child = dynamic_cast<TQTaggable*>(itr.readNext());
        if(!child) continue;
        if(child->getTag(key,tag)){
          DEBUGclass("found tag '%s' with value '%s' on %p",key.Data(),tag->getValueAsString().Data(),child);
          return true;
        }
      }
    }

    /* we couldn't find the tag */
    return false;
  }
}

//__________________________________________________________________________________|___________


int TQTaggable::getTagsSize(){
  // return the size of all the tags in this object
  if (!fTags) return 0;
  int size=sizeof(*fTags);;
  TQValueIterator itr(fTags);
  while(itr.hasNext()){
    TQValue* obj = itr.readNext();
    size += obj->getSize();
  }
  return size;
}

//__________________________________________________________________________________|___________

int TQTaggable::getFlagsSize(){
  // return the size of all the tags in this object
  int size=0;
  if(fReadFlags){
    size+=sizeof(*fReadFlags);;    
    TQStringIterator flagitr(fReadFlags);
    while(flagitr.hasNext()){
      TObjString* objstr = flagitr.readNext();
      size += sizeof(*objstr);
    }
  }
  return size;
}

//__________________________________________________________________________________|___________

TList * TQTaggable::getListOfKeys(const TString& filter) {

  /* the final list to return */
  TList * list = NULL;

  if (!fTags) return NULL;

  TQValueIterator itr(fTags);
  while(itr.hasNext()){
    TQValue* obj = itr.readNext();
    if(!obj) continue;
    if (!filter.IsNull() && !TQStringUtils::matchesFilter(obj->GetName(), filter, ",", true)) {
      continue;
    }

    if (!list) {
      /* create the list */
      list = new TList();
      list->SetOwner(true);
    }
    list->Add(new TObjString(obj->GetName()));
  }

  /* return the final list */
  return list;
}


//__________________________________________________________________________________|___________

bool TQTaggable::tagsAreEquivalentTo(TQTaggable * tags, const TString& filter) {

  if (!tags) {
    return false;
  }

  TList * keys = TQListUtils::getMergedListOfNames(
                                                   this->getListOfKeys(filter), tags->getListOfKeys(filter), true);

  TQIterator itr(keys, true);
  while (itr.hasNext()) {
    TString name = itr.readNext()->GetName();

    TQValue * myTag = this->findTag(name);
    TQValue * theirTag = tags->findTag(name);

    if (!myTag || !theirTag || !myTag->isEquivalentTo(theirTag)) {
      return false;
    }
  }

  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::printDiffOfTags(TQTaggable * tags, const TString& options) {

  // parse options flags
  TQTaggable * opts = TQTaggable::parseFlags(options);
  if (!opts) {
    std::cout << TQStringUtils::makeBoldRed(TString::Format("TQTaggable::printDiffOfTags(...): "
                                                       "Failed to parse options '%s'", options.Data())).Data() << std::endl;
    return false;
  }

  bool result = false;
  result = this->printDiffOfTags(tags, *opts);
  delete opts;
  return result;
}


//__________________________________________________________________________________|___________

bool TQTaggable::printDiffOfTags(TQTaggable * tags, TQTaggable& options) {

  const int cColWidth_Name = 50;
  const int cColWidth_Comp = 20;
  const int cColWidth_Details = 30;

  if (!tags) {
    return false;
  }
  //@tag:[i] This argument tag sets the indentation when printing a tag diff. Default: 0
  int indent = options.getTagIntegerDefault("i", 0) * 2;
  //@tag:[z] This argument tag enables printing folder diff. Default: false
  bool folderPrintDiff = options.getTagBoolDefault("z", false);
  //@tag:[m] This argument tag enables printing only mismatched in tag diff. Default: false
  bool onlyListMismatches = options.getTagBoolDefault("m", false);
  //@tag:[d] this argument tag enables printing details in tag diff. Default: false
  bool printDetails = options.getTagBoolDefault("d", false);

  bool equivalent = true;

  TList * keys = TQListUtils::getMergedListOfNames(
                                                   this->getListOfKeys(), tags->getListOfKeys(), true);

  TString line;

  // print headline
  if (!folderPrintDiff) {
    line = TQStringUtils::fixedWidth("Tag", cColWidth_Name, "l");
    line.Append(TQStringUtils::fixedWidth("Comparison", cColWidth_Comp, "l"));
    if (printDetails) {
      line.Append(TQStringUtils::fixedWidth("Details (1)", cColWidth_Details, "l"));
      line.Append(TQStringUtils::fixedWidth("Details (2)", cColWidth_Details, "l"));
    }
    std::cout << TQStringUtils::makeBoldWhite(line) << std::endl;
    std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", line.Length())) << std::endl;
  }

  TQIterator itr(keys, true);
  while (itr.hasNext()) {
    TString name = itr.readNext()->GetName();

    TQValue * myTag = this->findTag(name);
    TQValue * theirTag = tags->findTag(name);

    if (folderPrintDiff) {
      line = TQStringUtils::fixedWidth(TQStringUtils::repeatSpaces(indent) +
                                       TString::Format("\033[0;36m<%s>\033[0m", name.Data()), cColWidth_Name, "l");
    } else {
      line = TQStringUtils::fixedWidth(TQStringUtils::repeatSpaces(indent) + name, cColWidth_Name, "l");
    }

    TString comp;
    bool thisEquivalent = true;
    if (myTag && theirTag) {
      if (myTag->isEquivalentTo(theirTag)) {
        comp = TQStringUtils::makeBoldGreen("<1> == <2>");
      } else {
        thisEquivalent = false;
        comp = TQStringUtils::makeBoldRed("<1> != <2>");
      }
    } else if (myTag) {
      thisEquivalent = false;
      comp = TQStringUtils::makeBoldRed("<1> - ");
    } else if (theirTag) {
      thisEquivalent = false;
      comp = TQStringUtils::makeBoldRed(" - <2>");
    }

    if (!onlyListMismatches || !thisEquivalent) {
      line.Append(TQStringUtils::fixedWidth(comp, cColWidth_Comp, "l"));
      if (printDetails) {
        TString detail1;
        TString detail2;
        if (myTag) {
          detail1 = myTag->getValueAsString();
        }
        if (theirTag) {
          detail2 = theirTag->getValueAsString();
        }
        line.Append(TQStringUtils::fixedWidth(detail1, cColWidth_Details, "l"));
        line.Append(TQStringUtils::fixedWidth(detail2, cColWidth_Details, "l"));
      }
      std::cout << line.Data() << std::endl;
    }
    if (!thisEquivalent) {
      equivalent = false;
    }
  }

  return equivalent;
}


//__________________________________________________________________________________|___________

int TQTaggable::removeTag(const TString& key) {

  // the number of tags removed
  int nTags = 0;

  if (!fTags) {
    // not a single tag present
    return 0;
  }

  // find tag
  TString myKey = key;
  TQValue * tag = findTag(myKey);
  if (tag) {
    // remove and delete tag
    fTags->Remove(tag);
    delete tag;
    nTags++;
  }

  // delete the list itself, if the last tag was removed
  if (fTags->GetEntries() == 0) {
    delete fTags;
    fTags = NULL;
  }

  // return the number of tags removed
  return nTags;
}

//__________________________________________________________________________________|___________

int TQTaggable::removeTags(const TString& key) {
  // remove all tags matching the given key and return their number
  int nTags = 0;

  if (!fTags) {
    // not a single tag present
    return 0;
  }

  // find tag
  TQValueIterator itr(this->fTags);
  while(itr.hasNext()){
    TQValue* tag = itr.readNext();
    if(TQStringUtils::matches(tag->GetName(),key)){
      // remove and delete tag
      fTags->Remove(tag);
      delete tag;
      nTags++;
    }
  }

  // delete the list itself, if the last tag was removed
  if (fTags->GetEntries() == 0) {
    delete fTags;
    fTags = NULL;
  }

  // return the number of tags removed
  return nTags;
}


//__________________________________________________________________________________|___________

bool TQTaggable::renameTag(const TString& oldKey, const TString& newKey) {
  // Renames tag with key <oldKey> to key <newKey> and returns true if renaming was
  // successful and false otherwise. Renaming fails if <newKey> is not a valid key
  // or a tag with key <newKey> already exists.

  // check new name
  if (this->hasTag(newKey) || !TQValue::isValidName(newKey)) {
    return false;
  }

  // try to find tag
  TQValue * tag = findTag(oldKey);
  if (tag) {
    // rename tag
    tag->setName(newKey.Data());
    return true;
  } else {
    // couldn't find tag
    return false;
  }
}


//__________________________________________________________________________________|___________

int TQTaggable::renameTags(const TString& oldPrefix, const TString& newPrefix) {
  // Renames all tags with keys that begin with <oldPrefix> replacing <oldPrefix>
  // by <newPrefix> and returns the number of tags that were successfully renamed.

  // will be the number of tags renamed
  int n = 0;

  // iterate over all tags present
  TQIterator itr(this->getListOfKeys(), true);
  while (itr.hasNext()) {
    TString key = itr.readNext()->GetName();
    TString oldKey = key;
    // remove old key prefix
    if (!TQStringUtils::removeLeadingText(key, oldPrefix)) {
      // skip if key does not begin with <oldPrefix>
      continue;
    }
    // rename tag
    if (renameTag(oldKey, newPrefix + key)) {
      n++;
    }
  }

  return n;
}

//__________________________________________________________________________________|___________

void TQTaggable::clear() {
  // Removes and deletes all tags of this instance of TQTaggable ansd returns the
  // number of tags that have been removed.
  this->clearTags();
}

//__________________________________________________________________________________|___________

int TQTaggable::clearTags() {
  // Removes and deletes all tags of this instance of TQTaggable ansd returns the
  // number of tags that have been removed.

  int n = 0;

  // delete all tags
  if (fTags) {
    n = fTags->GetEntries();
    fTags->Delete();
    delete fTags;
    fTags = NULL;
  }

  return n;
}


//__________________________________________________________________________________|___________

int TQTaggable::printClaim(const TString& definition) {

  TString missing;
  TString invalid;
  TString unexpected;

  int result = claimTags(definition, missing, invalid, unexpected);

  std::cout << "Missing : " << missing.Data() << std::endl;
  std::cout << "Invalid : " << invalid.Data() << std::endl;
  std::cout << "Unexpected: " << unexpected.Data() << std::endl;

  return result;
}


//__________________________________________________________________________________|___________

int TQTaggable::claimTags(const TString& definition, bool printErrMsg) {

  TString errMsg;

  int result = claimTags(definition, errMsg);

  if (printErrMsg && result < 1) {
    std::cout << "TQTaggable::claimTags(...): " << errMsg.Data() << std::endl;
  }

  return result;
}


//__________________________________________________________________________________|___________

int TQTaggable::claimTags(const TString& definition, TString& message) {

  if (message.IsNull()) {
    message = "tag";
  }

  // dummy strings
  TString missing;
  TString invalid;
  TString unexpected;

  int result = claimTags(definition, missing, invalid, unexpected);

  if (result < 0) {
    message = "Failed to parse definition";
  } else if (!missing.IsNull()) {
    message = TString::Format("Missing %s '%s'", message.Data(),
                              TQStringUtils::getFirstToken(missing).Data());
  } else if (!invalid.IsNull()) {
    message = TString::Format("Invalid %s '%s'", message.Data(),
                              TQStringUtils::getFirstToken(invalid).Data());
  } else if (!unexpected.IsNull()) {
    message = TString::Format("Unexpected %s '%s'", message.Data(),
                              TQStringUtils::getFirstToken(unexpected).Data());
  }

  return result;
}


//__________________________________________________________________________________|___________

int TQTaggable::claimTags(const TString& definition, TString& missing,
                          TString& invalid, TString& unexpected) {
  // Tests the compatibility of the tags associated to this instance of TQTaggable
  // with an expectation encoded in the input string <definition> and returns 1
  // if tags are compatible and 0 otherwise. Basically, <definition> is a
  // comma-separated list of keys that need to exist as tags. Wildcards "?" and "*"
  // may be used, in which case at least one tag with a key matching the pattern
  // has to exist:
  //
  // - expected tag(s): "key, myTag, style.*"
  //
  // If a "!" is prepended to a key name a corresponding tag is expected to not be
  // present:
  //
  // - unaccepted tag: "!key"
  //
  // Tags may be expected to have a certain data type or to be convertable to
  // certain data types (i = integer, d = double, b = bool, s = string):
  //
  // - expect data type for tag: "key:d!"
  // - expect tag to be convertable to data types: "key:id"
  //
  // Here, the "!" appended to a data type (or a list of data types) indicates that
  // the tag has to have one of the listed data types (logical OR). In case no "!"
  // is appended the tag is required to be convertable to every listed data type
  // (logical AND).
  //
  // Tags may be marked as optional by enclosing the corresponding part in "[]":
  //
  // - optional tags: "[key], [style.color.*:i!]"
  //
  // If "!!" appears as one entry in the comma-separated list <definition> no tag
  // with a key other than the listed ones is expected:
  //
  // - expect only listed keys: "key, myTag, style.*, !!"
  //
  // Numerical tags may be required to fulfill a certain condition, e.g. must be
  // positive (operators "==", "!=", ">=", ">", "<=", and "<" are supported):
  //
  // - Tags must be positive: "myKeys*:d:>0"
  // - Tags must not be zero: "myKeys*:d:!=0"
  //
  // The value -1 is returned in case the definition string could not be parsed
  // properly.

  // taggable fulfills claim? (will be set to zero in the course of
  // this function once there is a tag not fulfilling the definition)
  bool fulfilled = true;

  // list of keys not listed in claim definition
  TList * unlisted = this->getListOfKeys();

  // expect no tags but the ones listed in claim definition
  bool nothingElse = false;

  // iterate over (comma-separated) elements in definition
  bool error = false;
  TQIterator itr(TQStringUtils::tokenize(definition, ",", true, "[]"), true);
  while (!error && itr.hasNext()) {
    TString token = itr.readNext()->GetName();

    if (token.CompareTo("!!") == 0) {
      // don't accept unlisted keys
      nothingElse = true;
      continue;
    }

    // unaccepted?
    bool unaccepted = TQStringUtils::removeLeading(token, "!", 1);

    // optional?
    bool optional = false;

    TString block;
    if (TQStringUtils::readBlock(token, block, "[]")) {
      if (unaccepted || !token.IsNull()) {
        // invalid expectations (unaccepted && optional doesn't make sense)
        error = true;
        continue;
      }
      optional = true;
      token = block;
    }

    // read key filter (allowing wildcards)
    TString keyFilter;
    if (!TQStringUtils::readToken(token, keyFilter, TQValue::getValidNameCharacters() + "?*")) {
      // invalid expectations (missing key filter)
      error = true;
      continue;
    }

    // read type def
    TString typeFilter;
    bool forceType = false;
    if (TQStringUtils::removeLeading(token, ":", 1)) {
      if (!TQStringUtils::readToken(token, typeFilter, "ibds")) {
        // invalid expectation
        error = true;
        continue;
      }
      forceType = (TQStringUtils::removeLeading(token, "!", 1) > 0);
    }

    // read numerical constraint
    TString numConstraint;
    if (TQStringUtils::removeLeading(token, ":", 1)) {
      if (TQStringUtils::isEmpty(token, true)) {
        // invalid expectations (expecting constraint definition)
        error = true;
        continue;
      }
      numConstraint = token;
    } else if (!TQStringUtils::isEmpty(token, true)) {
      // invalid expectations (unexpected stuff in definition);
      error = true;
      continue;
    }

    bool found = false;

    // remove listed keys from list of unlisted keys
    TQListUtils::removeElements(unlisted, keyFilter);

    TQIterator itrKeys(this->getListOfKeys(keyFilter), true);
    while (itrKeys.hasNext()) {
      TString key = itrKeys.readNext()->GetName();
      TQValue * tag = this->findTag(key);
      if (!tag) {
        // should not happen
        continue;
      }

      // found a key matching key filter
      found = true;

      if (unaccepted) {
        // unexpected tag found
        fulfilled = false;
        TQStringUtils::append(unexpected, key, ", ");
        continue;
      }

      if (!typeFilter.IsNull() && ((forceType && (
                                                  // typeFilter lists accepted tag types
                                                  (tag->isInteger() && !typeFilter.Contains("i")) ||
                                                  (tag->isBool() && !typeFilter.Contains("b")) ||
                                                  (tag->isDouble() && !typeFilter.Contains("d")) ||
                                                  (tag->isString() && !typeFilter.Contains("s")))) ||
                                   // typeFilter lists tag types tag needs to be convertable to
                                   ( !forceType && (
                                                    (typeFilter.Contains("i") && !tag->isValidInteger()) ||
                                                    (typeFilter.Contains("b") && !tag->isValidBool()) ||
                                                    (typeFilter.Contains("d") && !tag->isValidDouble()))))) {

        // invalid tag type
        fulfilled = false;
        TQStringUtils::append(invalid, key, ", ");
        continue;
      }

      if (!numConstraint.IsNull()) {
        int test = TQStringUtils::testNumber(tag->getDouble(), numConstraint);
        if (test < 0) {
          // invalid expectations (invalid test expression)
          error = true;
          continue;
        } else if (!tag->isValidDouble() || test == 0) {
          // numerically invalid tag
          fulfilled = false;
          TQStringUtils::append(invalid, key, ", ");
          continue;
        }
      }
    }

    if (!found && !optional && !unaccepted) {
      // couldn't find expected tag
      fulfilled = false;
      TQStringUtils::append(missing, keyFilter, ", ");
    }
  }

  if (!error) {
    if (nothingElse) {
      if (unlisted && unlisted->GetEntries() > 0) {
        // unexpected tags found
        fulfilled = false;
      }
      TQStringUtils::append(unexpected, TQStringUtils::concatNames(unlisted, ", "), ", ");
    }
  }

  if (unlisted) {
    delete unlisted;
  }

  if (!error) {
    return fulfilled ? 1 : 0;
  } else {
    return -1;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTag(const TString& key) {

  /* a dummy (won't be used) */
  TQValue * dummy = 0;

  /* try to find the tag */
  return getTag(key, dummy);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTagDouble(const TString& key) {

  /* a dummy (won't be used) */
  double dummy = 0.;

  /* try to find the tag */
  return getTagDouble(key, dummy);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTagInteger(const TString& key) {

  /* a dummy (won't be used) */
  int dummy = 0;

  /* try to find the tag */
  return getTagInteger(key, dummy);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTagBool(const TString& key) {

  /* a dummy (won't be used) */
  bool dummy = false;

  /* try to find the tag */
  return getTagBool(key, dummy);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTagString(const TString& key) {

  /* a dummy (won't be used) */
  TString dummy;

  /* try to find the tag */
  return getTagString(key, dummy);
}


//__________________________________________________________________________________|___________

bool TQTaggable::tagIsOfTypeDouble(const TString& key) {

  // a dummy (won't be used)
  TQValue * dummy = NULL;

  // try to find the tag
  getTag(key, dummy);

  // return true if tag exists and is of type double
  return (dummy != NULL) && dummy->isDouble();
}


//__________________________________________________________________________________|___________

bool TQTaggable::tagIsOfTypeInteger(const TString& key) {

  // a dummy (won't be used)
  TQValue * dummy = NULL;

  // try to find the tag
  getTag(key, dummy);

  // return true if tag exists and is of type integer
  return (dummy != NULL) && dummy->isInteger();
}


//__________________________________________________________________________________|___________

bool TQTaggable::tagIsOfTypeBool(const TString& key) {

  // a dummy (won't be used)
  TQValue * dummy = NULL;

  // try to find the tag
  getTag(key, dummy);

  // return true if tag exists and is of type bool
  return (dummy != NULL) && dummy->isBool();
}


//__________________________________________________________________________________|___________

bool TQTaggable::tagIsOfTypeString(const TString& key) {

  // a dummy (won't be used)
  TQValue * dummy = NULL;

  // try to find the tag
  getTag(key, dummy);

  // return true if tag exists and is of type string
  return (dummy != NULL) && dummy->isString();
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsValidDoubles() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!hasTagDouble(itr.readNext()->GetName())) {
      // one tag not a valid double
      return false;
    }
  }

  // no tags at all or all tags valid doubles
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsValidIntegers() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!hasTagDouble(itr.readNext()->GetName())) {
      // one tag not a valid integer
      return false;
    }
  }

  // no tags at all or all tags valid integers
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsValidBools() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!hasTagBool(itr.readNext()->GetName())) {
      // one tag not a valid bool
      return false;
    }
  }

  // no tags at all or all tags valid bools
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsOfTypeDouble() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!tagIsOfTypeDouble(itr.readNext()->GetName())) {
      // one tag not a double
      return false;
    }
  }

  // no tags at all or all tags of type double
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsOfTypeInteger() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!tagIsOfTypeInteger(itr.readNext()->GetName())) {
      // one tag not a integer
      return false;
    }
  }

  // no tags at all or all tags of type integer
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsOfTypeBool() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!tagIsOfTypeBool(itr.readNext()->GetName())) {
      // one tag not a bool
      return false;
    }
  }

  // no tags at all or all tags of type bool
  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::allTagsOfTypeString() {

  // loop over all present tags
  TQIterator itr(getListOfKeys(), true);
  while (itr.hasNext()) {
    if (!tagIsOfTypeString(itr.readNext()->GetName())) {
      // one tag not a string
      return false;
    }
  }

  // no tags at all or all tags of type string
  return true;
}


//__________________________________________________________________________________|___________

int TQTaggable::countTagUp(const TString& key) {

  /* the number of tags upwards */
  int nTags = 0;

  /* count tag of this taggable */
  if (hasTag(key))
    nTags++;

  /* count tags of base taggable */
  TQTaggable * baseTaggable = getBaseTaggable();
  if (baseTaggable)
    nTags += baseTaggable->countTagUp(key);

  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::countTagDown(const TString& key) {

  /* the number of tags upwards */
  int nTags = 0;

  /* count tag of this taggable */
  if (hasTag(key))
    nTags++;

  /* count tags of descendant taggables */
  TList * taggables = getDescendantTaggables();
  if (taggables) {

    TIterator * itr = taggables->MakeIterator();
    TObject * obj;
    while ((obj = itr->Next())) {
      if (obj->InheritsFrom(TQTaggable::Class()))
        nTags += ((TQTaggable*)obj)->countTagDown(key);
    }

    /* delete iterator */
    delete itr;
    /* delete the list */
    delete taggables;

  }

  return nTags;
}


//__________________________________________________________________________________|___________

bool TQTaggable::getOp(const TString& op, int &opCode) {

  if (op.Length() == 0)
    opCode = kOpNone;
  else if (op.CompareTo("~") == 0)
    opCode = kOpRec;
  else if (op.CompareTo("||") == 0)
    opCode = kOpOR;
  else if (op.CompareTo("&&") == 0)
    opCode = kOpAND;
  else if (op.CompareTo("+") == 0)
    opCode = kOpADD;
  else if (op.CompareTo("*") == 0)
    opCode = kOpMULT;
  else if (op.CompareTo("#") == 0)
    opCode = kOpCNT;
  else
    return false;

  return true;
}


//__________________________________________________________________________________|___________

bool TQTaggable::parseKey(TString key, TString &bareKey, int &opUp, int &opDown) {

  TString prefix;
  TString keyName;
  TString appendix;

  TQStringUtils::readToken(key, prefix, "~|&+*#");
  TQStringUtils::readToken(key, keyName, TQValue::getValidNameCharacters());
  TQStringUtils::readToken(key, appendix, "~|&+*#");

  /* some unexpected characters: stop */
  if (key.Length() != 0)
    return false;

  int tmpOpUp = kOpNone;
  int tmpOpDown = kOpNone;

  if (!getOp(prefix, tmpOpUp) || !getOp(appendix, tmpOpDown))
    return false;

  opUp = tmpOpUp;
  opDown = tmpOpDown;
  bareKey = keyName;
  return true;
}


//__________________________________________________________________________________|___________

int TQTaggable::getNTags() const {
  // Return the number of tags

  if (fTags)
    return fTags->GetEntries();
  else
    return 0;
}


//__________________________________________________________________________________|___________

void TQTaggable::printTags(TString options) {

  /* the taggable to list tags of */
  TQTaggable * taggable = this;

  /* remember the tags already printed */
  TList * printed = new TList();

  /* define the width of table columns */
  const int cColWidth_Key = 40;
  const int cColWidth_Type = 10;
  const int cColWidth_Value = 40;

  bool printRecursive = options.Contains("r");

  /* print the headline */
  TString line;
  line.Append(TQStringUtils::fixedWidth("Key", cColWidth_Key));
  line.Append(TQStringUtils::fixedWidth("Type", cColWidth_Type));
  line.Append(TQStringUtils::fixedWidth("Value", cColWidth_Value));
  std::cout << TQStringUtils::makeBoldWhite(line) << std::endl;
  std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", TQStringUtils::getWidth(line))) << std::endl;

  while (taggable) {

    /* iterate over every tag */
    TQIterator itr(taggable->getListOfTags());
    while(itr.hasNext()){
      TObject* obj = itr.readNext();
      if(!obj) continue;

      /* skip this tag if it was already printed */
      if (printed->FindObject(obj->GetName()))
        continue;

      /* remember the tag */
      printed->Add(obj);

      /* get the tag */
      TString key = obj->GetName();
      TString value, type;
      if (taggable->getValueOfTagAsString(key, value)
          && taggable->getTypeOfTagAsString(key, type)) {

        /* mark tags that were propagated to this taggable with ~ */
        if (taggable != this)
          key.Prepend("\033[1;31m~\033[0m");

        line.Clear();
        line.Append(TQStringUtils::fixedWidth(key, cColWidth_Key));
        line.Append(TQStringUtils::fixedWidth(type, cColWidth_Type));
        line.Append(TQStringUtils::fixedWidth(value, cColWidth_Value));
        std::cout << line.Data() << std::endl;

      }

    }

    if (printRecursive)
      taggable = taggable->getBaseTaggable();
    else
      taggable = 0;

  }

  delete printed;
}


//__________________________________________________________________________________|___________

TList * TQTaggable::getListOfTags() {

  return fTags;
}


//__________________________________________________________________________________|___________

TList * TQTaggable::getListOfTagNames() {

  TList* l = new TList();
  if (!fTags) return l;
  TQValueIterator itr(fTags);
  while(itr.hasNext()){
    TQValue* v = itr.readNext();
    TObjString* s = new TObjString(v->GetName());
    l->Add(s);
  }
  l->SetOwner(true);
  return l;
}


//__________________________________________________________________________________|___________

TQTaggable * TQTaggable::parseParameterList(const TString& parameter, const TString& sep, bool trim, const TString& blocks, const TString& quotes) {
  // Tries to interpret the input string <parameter> as a comma-separated list of
  // values and returns a new instance of TQTaggable with the parameter values
  // represented as tags with the keys corresponding to the index of occurence of
  // the value in the list (the user is responsible for deleting the returned
  // instance). Returns a null pointer in case of failure.
  //
  // "1, 6, 4" results in tags "0 = 1, 1 = 6, 2 = 4",
  // "1, 'hello', 4" results in tags "0 = 1, 1 = 'hello', 2 = 4".

  // create a new instance of TQTaggable
  TQTaggable * pars = new TQTaggable();

  int i = 0;
  bool error = false;

  // tokenize values and iterate over list
  TQIterator itr(TQStringUtils::tokenize(parameter, sep, trim, blocks, quotes), true);
  while (itr.hasNext() && !error) {
    TString thisPar = itr.readNext()->GetName();
    if (!pars->importTagWithPrefix(thisPar, "", false, TString::Format("%d", i++))) {
      error = true;
    }
  }

  // return NULL pointer in case no parameters were parsed
  if (pars->getNTags() == 0 || error) {
    delete pars;
    pars = NULL;
  }

  // return the parameter list
  return pars;
}


//__________________________________________________________________________________|___________

int TQTaggable::importTagsWithPrefix(TString tags, const TString& prefix,
                                     bool overwrite, bool keepStringQuotes, TString fallbackKey) {

  /* the number of tags imported */
  int nTags = 0;

  /* import the tags */
  TString tag;
  bool stop = false;
  while (!tags.IsNull() && !stop) {
    /* read the next tag */
    tag.Clear();
    int nChars = 0;
    nChars += TQStringUtils::readUpTo(tags, tag, ",", "[]{}", "''\"\"");
    nChars += TQStringUtils::removeLeading(tags, ",", 1);

    /* stop if no valid tag string is left */
    stop = (nChars == 0);

    /* == test for prefix block == */
    TString probe = tag;
    TString newPrefix;
    TString block;

    /* read the prefix */
    TQStringUtils::readBlanksAndNewlines(probe);
    TQStringUtils::readToken(probe, newPrefix, getValidKeyCharacters());

    /* read the prefix block */
    TQStringUtils::readBlanksAndNewlines(probe);
    int nBlockChar = TQStringUtils::readBlock(probe, block, "[]{}", "''\"\"");
    TQStringUtils::readBlanksAndNewlines(probe);

    if (!newPrefix.IsNull() && probe.IsNull() && nBlockChar > 0)
      /* import prefix block */
      nTags += importTagsWithPrefix(block, prefix + newPrefix, overwrite, keepStringQuotes);
    else
      /* import the tag */
      nTags += importTagWithPrefix(tag, prefix, overwrite, fallbackKey, keepStringQuotes);
  }

  /* return the number of tags imported */
  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::importTags(TString tags, bool overwrite, bool keepStringQuotes) {

  return importTagsWithPrefix(tags, "", overwrite, keepStringQuotes);
}


//__________________________________________________________________________________|___________

int TQTaggable::importTagsWithPrefix(const TQTaggable * tags, const TString& prefix, bool overwrite, bool recursive, TString fallbackKey) {
  // import all tags from another TQTaggable object, appending a certain prefix
  if(!tags) return 0;
  return this->importTagsWithPrefix(*tags,prefix,overwrite,recursive, fallbackKey);
}

//__________________________________________________________________________________|___________

int TQTaggable::importTagsWithPrefix(const TQTaggable& tags, const TString& prefix, bool overwrite, bool recursive, TString fallbackKey) {
  // import all tags from another TQTaggable object, appending a certain prefix

  /* the number of imported tags */
  int nTags = 0;

  /* loop over tags to import */
  TQIterator itr(tags.fTags);
  while (itr.hasNext()){
    TQValue* val = dynamic_cast<TQValue*>(itr.readNext());
    if(!val) continue;
    if (overwrite || !hasTag(val->getNameConst())) {
      /* make a copy of the tag */
      TQValue * newTag = 0;
      if (prefix.IsNull())
        newTag = val->copy();
      else
        newTag = val->copy(prefix + val->getName());
      /* set the tag */
      int nSubTags = setTag(newTag);
      if (nSubTags > 0)
        nTags += nSubTags;
      else
        delete newTag;
    }
  }

  /* import tags recursively */
  if (recursive) {
    TQTaggable * base = tags.getBaseTaggable();
    nTags += importTagsWithPrefix(base, prefix, false, true, fallbackKey);
  }

  /* return the number of imported tags */
  return nTags;
}

////__________________________________________________________________________________|___________

int TQTaggable::importTagsWithoutPrefix(const TQTaggable& tags, const TString& prefix, bool overwrite, bool recursive) {
  // import all tags from another TQTaggable object, filtering and removing a certain prefix

  /* the number of imported tags */
  int nTags = 0;
  /* loop over tags to import */
  TQValueIterator itr(tags.fTags);
  while (itr.hasNext()){
    TQValue* val = itr.readNext();
    if(!val) continue;
    if (overwrite || !this->hasTag(val->getNameConst())) {
      /* make a copy of the tag */
      TQValue * newTag = 0;
      if (prefix.IsNull())
        newTag = val->copy();
      else {
        TString name(val->getNameConst());
        if(TQStringUtils::removeLeadingText(name,prefix)){
          newTag = val->copy(name);
        }
      }
      /* set the tag */
      int nSubTags = setTag(newTag);
      if (nSubTags > 0)
        nTags += nSubTags;
      else
        delete newTag;
    }
  }

  /* import tags recursively */
  if (recursive) {
    TQTaggable * base = tags.getBaseTaggable();
    nTags += importTagsWithoutPrefix(base, prefix, false, true);
  }

  return nTags;
}


////__________________________________________________________________________________|___________

int TQTaggable::importTagsWithoutPrefix(const TQTaggable* tags, const TString& prefix, bool overwrite, bool recursive) {
  // import all tags from another TQTaggable object, filtering and removing a certain prefix
  if(!tags) return 0;
  return this->importTagsWithoutPrefix(*tags,prefix,overwrite,recursive);

}


////__________________________________________________________________________________|___________

TList* TQTaggable::makeListOfTags(TList* unTags){
  // convert a list of objects into a list of TQValue objects -- legacy converter function
  TList* tags = new TList();

  if (!unTags)
    return NULL;

  /* loop over tags to import */
  TQIterator itr(unTags);
  while (itr.hasNext()){
    TObject * obj = itr.readNext();

    TQValue * newTag = NULL;
    TQValue* oldTag = dynamic_cast<TQValue*>(obj);
    if(oldTag)
      tags->Add(oldTag->copy());
    if (obj->InheritsFrom(TNamed::Class()))
      newTag = TQValue::newString(
                                  obj->GetName(), ((TNamed*)obj)->GetTitle());
    else if (obj->InheritsFrom(TParameter<double>::Class()))
      newTag = TQValue::newDouble(
                                  obj->GetName(), ((TParameter<double>*)obj)->GetVal());
    else if (obj->InheritsFrom(TParameter<int>::Class()))
      newTag = TQValue::newInteger(
                                   obj->GetName(), ((TParameter<int>*)obj)->GetVal());
    else if (obj->InheritsFrom(TParameter<float>::Class()))
      newTag = TQValue::newBool(
                                obj->GetName(), ((TParameter<float>*)obj)->GetVal() != 0.);

    if(newTag){
      tags->Add(newTag);
    }
    delete obj;
  }
  return tags;
}


//__________________________________________________________________________________|___________

int TQTaggable::importTags(const TQTaggable * tags, bool overwrite, bool recursive) {
  // import a list of tags
  return importTagsWithPrefix(tags, "", overwrite, recursive);
}

//__________________________________________________________________________________|___________

int TQTaggable::importTags(std::shared_ptr<TQTaggable> tags, bool overwrite, bool recursive) {
  // import a list of tags
  return importTagsWithPrefix(tags.get(), "", overwrite, recursive);
}

//__________________________________________________________________________________|___________

int TQTaggable::importTags(const TQTaggable& tags, bool overwrite, bool recursive) {
  // import a list of tags
  return importTagsWithPrefix(&tags, "", overwrite, recursive);
}


//__________________________________________________________________________________|___________

int TQTaggable::importTagWithPrefix(const TString& tagBackup, const TString& prefix,
                                    bool overwrite, TString fallbackKey, bool keepStringQuotes) {
  // import a tag with a prefix
  TString tag(tagBackup);

  /* read key */
  TString key = prefix;
  TQStringUtils::readBlanksAndNewlines(tag);
  int nKey = TQStringUtils::readToken(tag, key, getValidKeyCharacters());

  /* read assignment character "=" */
  TString assign;
  TQStringUtils::readBlanksAndNewlines(tag);
  TQStringUtils::readToken(tag, assign, "=");

  /* if there is no valid key name definition ... */
  bool usingFallbackKey = false;
  if (nKey == 0 || assign.CompareTo("=") != 0) {
    if (fallbackKey.IsNull()) {
      /* no key given */
      return 0;
    } else {
      /* use fallback key */
      key = fallbackKey;
      tag = tagBackup;
      usingFallbackKey = true;
    }
  }

  TQStringUtils::readBlanksAndNewlines(tag);

  if (usingFallbackKey && tag.IsNull()) {
    return 0;
  }

  /* stop if overwriting is disabled and the tag already exists */
  if (!overwrite && hasTag(key))
    return 0;

  TString val;
  // try to read string quoted either with '' or ""
  bool singleQuotes = (TQStringUtils::readBlock(tag, val, "''") > 0);
  bool doubleQuotes = false;
  if (!singleQuotes) {
    doubleQuotes = (TQStringUtils::readBlock(tag, val, "\"\"") > 0);
  }
  if (singleQuotes || doubleQuotes) {
    /* we only expect blanks beyond the end of the string */
    val = TQStringUtils::trim(val);
    if (keepStringQuotes) {
      if (singleQuotes) {
        val = TString("'") + val + "'";
      } else if (doubleQuotes) {
        val = TString("\"") + val + "\"";
      }
    }
    return setTagString(key, val);
  }

  // is the tag a list enclosed in "{}" ?
  if (TQStringUtils::readBlock(tag, val, "{}", "''\"\"") > 0) {
    return this->setTagList(key,val);
  }

  /* read value */
  val = TQStringUtils::trim(tag);
  if (TQStringUtils::isDouble(val)) {
    /* >> double tag */
    return setTagDouble(key, val.Atof());
  } else if (TQStringUtils::isInteger(val)) {
    /* >> integer tag */
    return setTagInteger(key, (int)val.Atof());
  } else if (TQStringUtils::isBool(val)) {
    /* >> bool tag */
    return setTagBool(key, TQStringUtils::getBoolFromString(val));
  } else if (val.CompareTo("!") == 0) {
    /* >> remove tag */
    if (removeTag(key)) {
      return 1;
    }
  } else {
    /* >> string tag */
    return setTagString(key, val);
  }
  return 0;
}


//__________________________________________________________________________________|___________

int TQTaggable::importTag(TString tag, bool overwrite, bool keepStringQuotes) {
  // import a tag
  return importTagWithPrefix(tag, "", overwrite, keepStringQuotes);
}

//__________________________________________________________________________________|___________


int TQTaggable::setTag(const TString& key, const TString& value, const TString& destination) {
  // set a single string tag
  return setTagString(key, value, destination);
}

//__________________________________________________________________________________|___________


int TQTaggable::setTag(const TString& key, const char* value, const TString& destination) {
  // set a single string tag
  TString s(value);
  return setTagString(key, s, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const TString& key, double value, const TString& destination) {
  // set a single double-precision floating point tag
  return setTagDouble(key, value, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const TString& key, int value, const TString& destination) {
  // set a single integer tag
  return setTagInteger(key, value, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const TString& key, bool value, const TString& destination) {
  // set a single bool tag
  return setTagBool(key, value, destination);
}

//__________________________________________________________________________________|___________


int TQTaggable::setTag(const char* key, const TString& value, const TString& destination) {
  // set a single string tag
  return setTagString(key, value, destination);
}

//__________________________________________________________________________________|___________


int TQTaggable::setTag(const char* key, const char* value, const TString& destination) {
  // set a single string tag
  TString s(value);
  return setTagString(key, s, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const char* key, double value, const TString& destination) {
  // set a single double-precision floating point tag
  return setTagDouble(key, value, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const char* key, int value, const TString& destination) {
  // set a single integer tag
  return setTagInteger(key, value, destination);
}


//__________________________________________________________________________________|___________

int TQTaggable::setTag(const char* key, bool value, const TString& destination) {
  // set a single bool tag
  return setTagBool(key, value, destination);
}


//__________________________________________________________________________________|___________

bool TQTaggable::hasTagWithIndex(const TString& key){
  // Takes a tag name and returns true if this key already exists with an index.
  // Example: argument is "keyName". If "keyName."<integer> exists, return true,
  // otherwise false.

  TQIterator itr(getListOfKeys(key + ".*"), true);
  while (itr.hasNext()){
    TString listKeyName = itr.readNext()->GetName();
    TQStringUtils::removeLeadingText(listKeyName, key + ".");
    std::vector<TString> splitKey = TQStringUtils::split(listKeyName, ".");
    if (splitKey.size() > 0 && TQStringUtils::isInteger(splitKey[0])){
      return true;
    }
  }
  return false;
}

//__________________________________________________________________________________|___________

bool TQTaggable::hasTagWithoutIndex(const TString& key){
  // Takes a tag name and returns true if this key already exists without an index.
  // Example: argument is "keyName.3". If "keyName" exists, return true, otherwise
  // false.

  std::vector<TString> splitKey = TQStringUtils::split(key, ".");
  if (splitKey.size() > 1 && TQStringUtils::isInteger(splitKey[splitKey.size()-1])){
    TString keyWithoutIndex = TQStringUtils::merge(splitKey, ".", 0, splitKey.size()-1);
    return claimTags(keyWithoutIndex);
  }
  return false;
}

//__________________________________________________________________________________|___________

bool TQTaggable::canSetThisTag(const TString& key, bool& treatAsList){
  // returns if the tag should be set (only relevant if globalOverwrite is false)
  // the input treatAsList is ignored. It returned as true if the tag already exists with an index

  treatAsList = false;

  bool alreadyDefined = claimTags(key);
  bool alreadyDefinedWithIndex = hasTagWithIndex(key);
  bool alreadyDefinedWithoutIndex = hasTagWithoutIndex(key);

  if (alreadyDefinedWithIndex)
    treatAsList = true;

  DEBUGclass("key: %s", key.Data());
  DEBUGclass("alreadyDefined: %s", alreadyDefined ? "true" : "false");
  DEBUGclass("alreadyDefinedWithIndex: %s", alreadyDefinedWithIndex ? "true" : "false");
  DEBUGclass("alreadyDefinedWithoutIndex: %s", alreadyDefinedWithoutIndex ? "true" : "false");
  DEBUGclass("treatAsList: %s", treatAsList ? "true" : "false");

  if (getGlobalOverwrite())
    return true;
  if (alreadyDefined || alreadyDefinedWithoutIndex)
    return false;
  return true;
}

//__________________________________________________________________________________|___________

int TQTaggable::setTagAuto(const TString& key, TString value, const TString& destination) {
  // set a tag, automatically picking the type
  TString val;
  int nTags = 0;
  // try to read string quoted either with '' or ""
  if ((TQStringUtils::readBlock(value, val, "''")) > 0 || (TQStringUtils::readBlock(value, val, "\"\"") > 0)) {
    /* we only expect blanks after the end of the string */
    val = TQStringUtils::trim(val);
    if (!val.IsNull()) {
      /* >> string tag */
      nTags = setTagString(key, val);
    }
    return nTags;
  }

  // is the tag a list enclosed in "{}" ?
  bool enclosedInBrackets = TQStringUtils::readBlock(value, val, "{}", "''\"\"");
  bool b = false;
  if (!enclosedInBrackets){
    val = TQStringUtils::trim(value);
    b = TQStringUtils::findFree(val,',',"()[]{}") <(size_t)val.Length();
  }
  bool isList = (enclosedInBrackets || b);

  bool treatAsList = false;
  if (!canSetThisTag(key, treatAsList))
    return nTags;

  if (isList or treatAsList) {
    nTags = this->setTagList(key,val);
    if (enclosedInBrackets or treatAsList)
      return nTags;
  }
  if(nTags > 0) return nTags;

  if (TQStringUtils::isDouble(val)) {
    /* >> double tag */
    nTags = setTagDouble(key, val.Atof(), destination);
  } else if (TQStringUtils::isInteger(val)) {
    /* >> integer tag */
    nTags = setTagInteger(key, (int)val.Atof(), destination);
  } else if (TQStringUtils::isBool(val)) {
    /* >> bool tag */
    nTags = setTagBool(key, TQStringUtils::getBoolFromString(val), destination);
  } else if (val.CompareTo("!") == 0) {
    /* >> remove tag */
    if (removeTag(key)) {
      nTags++;
    }
  } else {
    /* >> string tag */
    nTags = setTagString(key, val, destination);
  }
  return nTags;
}

//__________________________________________________________________________________|___________

int TQTaggable::setTagList(const TString& key, TString value, const TString& destination){
  // set a list of tags
  TQTaggable * list = TQTaggable::parseParameterList(value, ",", true, "{}()[]", "''\"\"");
  if (!list) return 0;
  int nTags = 0;
  TQValue * val = NULL;
  if(fGlobalOverwrite){
    int i = 0;
    while(removeTag(TString::Format("%s.%d",key.Data(),i))){
      ++i;
    }
  }
  TQIterator itr(list->getListOfKeys(), true);
  while (itr.hasNext()) {
    TString listKeyName = itr.readNext()->GetName();
    list->getTag(listKeyName, val);
    nTags += setTag(val->copy(key + "." + listKeyName), destination);
  }
  delete list;

  return nTags;
}

//__________________________________________________________________________________|___________

template<class T>
int TQTaggable::setTagList(const TString& key, const std::vector<T>& list, const TString& destination){
  // set a list of tags
  int nTags = 0;
  for(const auto& x:list){
    nTags += this->setTag(TString::Format("%s.%d",key.Data(),nTags), x, destination);
  }
  return nTags;
}

template int TQTaggable::setTagList<bool>(const TString& key, const std::vector<bool>& list, const TString& destination);
template int TQTaggable::setTagList<int>(const TString& key, const std::vector<int>& list, const TString& destination);
template int TQTaggable::setTagList<double>(const TString& key, const std::vector<double>& list, const TString& destination);
template int TQTaggable::setTagList<TString>(const TString& key, const std::vector<TString>& list, const TString& destination);
template int TQTaggable::setTagList<const char*>(const TString& key, const std::vector<const char*>& list, const TString& destination);

//__________________________________________________________________________________|___________

int TQTaggable::setTagDouble(TString key, double value, const TString& destination) {
  // set a single double-precision floating point number tag
  bool dontOverwrite = TQStringUtils::removeTrailing(key, "?", 1);

  /* create the tag */
  TQValue * tag = TQValue::newDouble(key, value);

  /* stop if we failed to create the tag */
  if (!tag)
    return 0;

  /* add/set the tag */
  int nTags = setTag(tag, destination, this->getGlobalOverwrite() && !dontOverwrite);

  /* delete the tag if it wasn't used */
  if (nTags == 0)
    delete tag;

  /* return the number of tags added */
  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::setTagInteger(TString key, int value, const TString& destination) {
  // set a single integer tag
  bool dontOverwrite = TQStringUtils::removeTrailing(key, "?", 1);

  /* create the tag */
  TQValue * tag = TQValue::newInteger(key, value);

  /* stop if we failed to create the tag */
  if (!tag)
    return 0;

  /* add/set the tag */
  int nTags = setTag(tag, destination, this->getGlobalOverwrite() && !dontOverwrite);

  /* delete the tag if it wasn't used */
  if (nTags == 0)
    delete tag;

  /* return the number of tags added */
  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::setTagBool(TString key, bool value, const TString& destination) {
  // set a single bool tag
  bool dontOverwrite = TQStringUtils::removeTrailing(key, "?", 1);

  /* create the tag */
  TQValue * tag = TQValue::newBool(key, value);

  /* stop if we failed to create the tag */
  if (!tag)
    return 0;

  /* add/set the tag */
  int nTags = setTag(tag, destination, this->getGlobalOverwrite() && !dontOverwrite);

  /* delete the tag if it wasn't used */
  if (nTags == 0)
    delete tag;

  /* return the number of tags added */
  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::setTagString(TString key, const TString& value, const TString& destination) {
  // set a single string tag
  bool dontOverwrite = TQStringUtils::removeTrailing(key, "?", 1);

  /* create the tag */
  TQValue * tag = TQValue::newString(key, value);

  /* stop if we failed to create the tag */
  if (!tag)
    return 0;

  /* add/set the tag */
  int nTags = setTag(tag, destination, this->getGlobalOverwrite() && !dontOverwrite);

  /* delete the tag if it wasn't used */
  if (nTags == 0)
    delete tag;

  /* return the number of tags added */
  return nTags;
}


//__________________________________________________________________________________|___________

int TQTaggable::exportTags(TQTaggable * dest, const TString& subDest, const TString& filter, bool recursive) {
  // export the tags to another taggable object
  if (!dest)
    return 0;

  /* the number of tags exported */
  int nTags = 0;

  /* loop over tags */
  TQIterator itr(fTags);
  while (itr.hasNext()){
    TQValue* val = dynamic_cast<TQValue*>(itr.readNext());
    if(!val) continue;
    /* apply name filter */
    if (!filter.IsNull() && !TQStringUtils::matchesFilter(val->GetName(), filter, ",", true)) {
      continue;
    }
    TQValue* newTag = val->copy();
    if (dest->setTag(newTag, subDest, dest->getGlobalOverwrite()))
      nTags++;
  }

  if(recursive && this->getBaseTaggable()){
    nTags += this->getBaseTaggable()->exportTags(dest,subDest,filter,recursive);
  }

  /* return the number of tags exported */
  return nTags;
}


//__________________________________________________________________________________|___________

TString TQTaggable::exportTagsAsString(const TString& filter, bool xmlStyle) {
  // export the tags as a string
  TString result;

  /* loop over tags */
  bool first = true;
  TQIterator itr(fTags);
  while(itr.hasNext()){
    TQValue* val = dynamic_cast<TQValue*>(itr.readNext());
    if(!val) continue;
    /* apply name filter */
    if (!filter.IsNull() && !TQStringUtils::matchesFilter(val->GetName(), filter, ",", true)) {
      continue;
    }
    /* comma separation */
    if (!first) {
      if (xmlStyle)
        result.Append(" ");
      else
        result.Append(", ");
    }
    first = false;
    /* append the tag */
    result.Append(val->getAsString(xmlStyle));
  }

  /* return the final string */
  return result;
}

//__________________________________________________________________________________|___________

TString TQTaggable::exportTagsAsConfigString(const TString& prefix, const TString& filter){
  // export the tags to a config string
  TString result;

  /* loop over tags */
  TQIterator itr(fTags);
  while(itr.hasNext()){
    TQValue* val = dynamic_cast<TQValue*>(itr.readNext());
    if(!val) continue;
    /* apply name filter */
    if (!filter.IsNull() && !TQStringUtils::matchesFilter(val->GetName(), filter, ",", true)) {
      continue;
    }
    /* append the tag */
    result.Append(prefix);
    result.Append(val->getName());
    result.Append(": ");
    result.Append(val->getValueAsString());
    result.Append("\n");
  }

  /* return the final string */
  return result;
}


//__________________________________________________________________________________|___________

TString TQTaggable::replaceInText(const TString& in, const TString& prefix, bool keepQuotes) {
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  int nReplaced = 0;
  int nFailed = 0;
  return replaceInText(in, nReplaced, nFailed, prefix, keepQuotes);
}

//__________________________________________________________________________________|___________

TString TQTaggable::replaceInTextRecursive(TString in, const TString& prefix, bool keepQuotes) {
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  // this version of the function recursively replaces the string until no resolvable tag is left
  int nReplaced = 0;
  int nFailed = 0;
  while(true){
    in = replaceInText(in, nReplaced, nFailed, prefix, keepQuotes);
    if(nReplaced == 0) return in;
  }
}

//__________________________________________________________________________________|___________

TString TQTaggable::replaceInText(const TString& in, const char* prefix, bool keepQuotes){
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  return this->replaceInText(in,(TString)prefix,keepQuotes);
}

//__________________________________________________________________________________|___________

TString TQTaggable::replaceInText(const TString& in, bool keepQuotes) {
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  return replaceInText(in, "", keepQuotes);
}

//__________________________________________________________________________________|___________

TString TQTaggable::replaceInText(const TString& in, int &nReplaced, int &nFailed, bool keepQuotes) {
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  return this->replaceInText(in, nReplaced, nFailed, "", keepQuotes);
}

//__________________________________________________________________________________|___________

TString TQTaggable::replaceInText(TString in, int &nReplaced, int &nFailed, const TString& prefix, bool keepQuotes) {
  // replace all placeholders $(xyz) by their respective tagged values "xyz = abc"
  TString out;
  nReplaced = 0;
  nFailed = 0;

  while (!in.IsNull()) {

    /* read text up to control character '$' */
    TQStringUtils::readUpTo(in, out, "$");
    if (in.IsNull())
      continue;

    /* read control character */
    TString field;
    int nMarker = TQStringUtils::readToken(in, field, "$");

    /* read replacement definition block */
    TString def;
    int nDef = 0;
    if (in.BeginsWith("(")) {
      nDef = TQStringUtils::readBlock(in, def, "()[]{}", "''\"\"");
      if (nDef > 0)
        field.Append(TString::Format("(%s)", def.Data()));
    } else {
      nDef = TQStringUtils::readToken(in, def, getValidKeyCharacters());
      if (nDef > 0)
        field.Append(def);
    }

    if (!def.IsNull()) {
      /* split definition: get key name */
      TString keyName = prefix;
      TQStringUtils::readUpTo(def, keyName, ",");
      /* read options */
      TQTaggable tmpTags;
      bool missingOptions = false;
      if (!def.IsNull()) {
        TQStringUtils::removeLeading(def, ",", 1);
        missingOptions = (tmpTags.importTagWithPrefix(
                                                      def, "", false, "default") == 0);
      }
      bool hasMatchingTag = hasTag(keyName);
      if (nMarker == 1 && !keyName.IsNull() && !missingOptions &&
          (hasMatchingTag || tmpTags.hasTag("default"))) {
        TString tag;
        if (hasMatchingTag) {
          if (keepQuotes && tagIsOfTypeString(keyName))
            getValueOfTagAsString(keyName, tag);
          else
            getTagString(keyName, tag);
        } else {
          if (keepQuotes && tmpTags.tagIsOfTypeString("default"))
            tmpTags.getValueOfTagAsString("default", tag);
          else
            //TODO write tag documentation for this magic tag!
            tmpTags.getTagString("default", tag);
        }
        out.Append(tag);
        nReplaced++;
      } else {
        nFailed++;
        out.Append(field);
      }
    } else {
      nFailed++;
      out.Append(field);
    }
  }

  return out;
}


//__________________________________________________________________________________|___________

TString TQTaggable::getValuesOfTags(const TString& keys, const TString& sep) {
  // replace keys by values in a comma-separated string list
  TString values;

  TQIterator itr(this->getListOfKeys(keys), true);
  while (itr.hasNext()) {
    TQStringUtils::append(values, this->getTagStringDefault(itr.readNext()->GetName()), sep);
  }

  return values;
}


//__________________________________________________________________________________|___________


std::vector<TString > TQTaggable::getTagVString(const TString& key){
  // retrieve a list of tags as a vector of strings
  std::vector<TString> vec;
  this->getTag(key,vec);
  return vec;
}

//__________________________________________________________________________________|___________


TList* TQTaggable::getTagList(const TString& key){
  // retrieve a list of tags
  TList* l = new TList();
  l->SetOwner(true);
  this->getTag(key,l);
  return l;
}

//__________________________________________________________________________________|___________


std::vector<int > TQTaggable::getTagVInt (const TString& key){
  // retrieve a list of tags as a vector of integers
  std::vector<int> vec;
  this->getTag(key,vec);
  return vec;
}

//__________________________________________________________________________________|___________


std::vector<int > TQTaggable::getTagVInteger(const TString& key){
  // retrieve a list of tags as a vector of integers
  std::vector<int> vec;
  this->getTag(key,vec);
  return vec;
}

//__________________________________________________________________________________|___________


std::vector<double> TQTaggable::getTagVDouble(const TString& key){
  // retrieve a list of tags as a vector of doubles
  std::vector<double> vec;
  this->getTag(key,vec);
  return vec;
}

//__________________________________________________________________________________|___________

std::vector<bool > TQTaggable::getTagVBool (const TString& key){
  // retrieve a list of tags as a vector of bool
  std::vector<bool> vec;
  this->getTag(key,vec);
  return vec;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTag(const TString& key, std::vector<TString>& vec){
  // get a list of tags
  int idx = 0;
  TString entry;
  while(this->getTag(TString::Format("%s.%d",key.Data(),idx),entry)){
    vec.push_back(entry);
    idx++;
  }
  if(idx==0 && this->hasTagString(key))
    vec.push_back(this->getTagStringDefault(key,""));
  return idx;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTag(const TString& key, TList* l){
  // get a list of tags
  if(!l) return -1;
  int idx = 0;
  TString entry;
  while(this->getTag(TString::Format("%s.%d",key.Data(),idx),entry)){
    l->Add(new TObjString(entry));
    idx++;
  }
  if(idx==0 && this->hasTagString(key))
    l->Add(new TObjString(this->getTagStringDefault(key,"")));
  return idx;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTagListLength(const TString& key){
  // get the length of a list of tags
  int idx = 0;
  while(this->hasTag(TString::Format("%s.%d",key.Data(),idx))){
    idx++;
  }
  if(idx==0 && this->hasTagString(key))
    idx = 1;
  return idx;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTag(const TString& key, std::vector<double>& vec){
  // get a list of double-precision floating point tags
  int idx = 0;
  double entry;
  while(this->getTag(TString::Format("%s.%d",key.Data(),idx),entry)){
    vec.push_back(entry);
    idx++;
  }
  if(idx==0 && this->hasTagDouble(key)){
    vec.push_back(this->getTagDoubleDefault(key,0));
    idx++;
  }
  return idx;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTag(const TString& key, std::vector<int>& vec){
  // get a list of integer tags
  int idx = 0;
  int entry;
  while(this->getTag(TString::Format("%s.%d",key.Data(),idx),entry)){
    vec.push_back(entry);
    idx++;
  }
  if(idx==0 && this->hasTagInteger(key)){
    vec.push_back(this->getTagIntegerDefault(key,0));
    idx++;
  }
  return idx;
}

//__________________________________________________________________________________|___________

int TQTaggable::getTag(const TString& key, std::vector<bool>& vec){
  // get a list of boolean tags
  int idx = 0;
  bool entry;
  while(this->getTag(TString::Format("%s.%d",key.Data(),idx),entry)){
    vec.push_back(entry);
    idx++;
  }
  if(idx==0 && this->hasTagBool(key)){
    vec.push_back(this->getTagBoolDefault(key,false));
    idx++;
  }
  return idx;
}

//__________________________________________________________________________________|___________

bool TQTaggable::getTag(const TString& key, double &value) {
  // get a single double-precision floating point tag
  return getTagDouble(key, value);
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTag(const TString& key, int &value) {
  // get a single integer tag
  return getTagInteger(key, value);
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTag(const TString& key, bool &value) {
  // get a single boolean tag
  return getTagBool(key, value);
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTag(const TString& key, TString &value) {
  // get a single string tag
  return getTagString(key, value);
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagDouble(const TString& key, double &value) {
  // get a single double-precision floating point tag
  TQValue * val = 0;

  if (getTag(key, val) && val->isValidDouble()) {
    value = val->getDouble();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagInteger(const TString& key, int &value) {
  // get a single integer tag
  TQValue * val = 0;

  if (getTag(key, val) && val->isValidInteger()) {
    value = val->getInteger();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagBool(const TString& key, bool &value) {
  // get single boolean tag
  TQValue * val = 0;

  if (getTag(key, val) && val->isValidBool()) {
    value = val->getBool();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagString(const TString& key, TString &value) {
  // get a single string tag
  TQValue * val = 0;

  if (getTag(key, val)) {
    value = val->getString();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

double TQTaggable::getTagDefault(const TString& key, double defaultVal) {
  // get a single double-precision floating point tag
  return getTagDoubleDefault(key, defaultVal);
}


//__________________________________________________________________________________|___________

int TQTaggable::getTagDefault(const TString& key, int defaultVal) {
  // get a single integer tag
  return getTagIntegerDefault(key, defaultVal);
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagDefault(const TString& key, bool defaultVal) {
  // get a single boolean tag
  return getTagBoolDefault(key, defaultVal);
}


//__________________________________________________________________________________|___________

TString TQTaggable::getTagDefault(const TString& key, const TString& defaultVal) {
  // get a single string tag
  return getTagStringDefault(key, defaultVal);
}

//__________________________________________________________________________________|___________

TString TQTaggable::getTagDefault(const TString& key, const char* defaultVal) {
  // get a single string tag
  return getTagStringDefault(key, defaultVal);
}


//__________________________________________________________________________________|___________

double TQTaggable::getTagDoubleDefault(const TString& key, double defaultVal) {
  // get a single double-precision floating point tag
  double value = defaultVal;
  getTagDouble(key, value);
  return value;
}


//__________________________________________________________________________________|___________

int TQTaggable::getTagIntegerDefault(const TString& key, int defaultVal) {
  // get a single integer tag
  int value = defaultVal;
  getTagInteger(key, value);
  return value;
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagBoolDefault(const TString& key, bool defaultVal) {
  // get a single boolean tag
  bool value = defaultVal;
  getTagBool(key, value);
  return value;
}


//__________________________________________________________________________________|___________

TString TQTaggable::getTagStringDefault(const TString& key, const TString& defaultVal) {
  // get a single string tag
  TString value = defaultVal;
  getTagString(key, value);
  return value;
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTagAsString(const TString& key, TString &tag) {
  // get single string tag
  TQValue * val = 0;

  if (getTag(key, val)) {
    tag = val->getAsString();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::getTypeOfTagAsString(const TString& key, TString &type) {
  // get the type of a tag as a string
  TQValue * val = 0;

  if (getTag(key, val)) {
    type = val->getTypeAsString();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQTaggable::getValueOfTagAsString(const TString& key, TString &value) {
  // get the value of a tag as a string
  TQValue * val = 0;

  if (getTag(key, val)) {
    value = val->getValueAsString();
    onRead(val);
    return true;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

TQTaggable::~TQTaggable() {
  // standard destructor
  clear();

  // delete flags
  if (fReadFlags) {
    delete fReadFlags;
  }
}


bool TQTaggable::getTag (const TString& key, double &value, bool recursive){
  // get a single double-precision floating point tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTag (const TString& key, int &value, bool recursive){
  // get a single integer tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTag (const TString& key, bool &value, bool recursive){
  // get a single boolean tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTag (const TString& key, TString &value, bool recursive){
  // get a single string tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}

bool TQTaggable::getTagDouble (const TString& key, double &value, bool recursive){
  // get a single double-precision floating point tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTagInteger (const TString& key, int &value, bool recursive){
  // get a single integer tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTagBool (const TString& key, bool &value, bool recursive){
  // get a single boolean tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}
bool TQTaggable::getTagString (const TString& key, TString &value, bool recursive){
  // get a single string tag
  if(recursive)
    return this->getTag(TString::Format("~%s",key.Data()),value);
  return this->getTag(key,value);
}

bool TQTaggable::exportConfigFile(const TString& filename, const TString& prefix, bool writeUnreadKeys){
  // export the tags to a config file
  TQUtils::ensureDirectoryForFile(filename);

  std::ofstream of(filename);
  if(!of.good()) return false;

  TQValueIterator itr(fTags);
  while (itr.hasNext()){
    TQValue* val = itr.readNext();
    TString key(val->GetName());
    if(TQStringUtils::removeLeading(key,".") == 1){
      TString value(val->getString());
      of << "# " << key << ": " << value << std::endl;
    }
  }

  itr.reset();
  while (itr.hasNext()){
    TQValue* val = itr.readNext();
    /* apply name filter */
    TString key(val->GetName());
    TString value(val->getString());
    if(key.BeginsWith(".")) continue;
    if(writeUnreadKeys || fReadFlags->FindObject(key)){
      of << prefix << "." << key << ":" << "\t" << value << std::endl;
    }
  }
  of.close();
  return true;
}

bool TQTaggable::exportConfigFile(const TString& filename, bool writeUnreadKeys){
  //@tag:[.configname] This object tag determines the prefix when exporting to a configuration file. Default: "Config"
  return this->exportConfigFile(filename, this->getTagStringDefault(".configname","Config"),writeUnreadKeys);
}
bool TQTaggable::exportConfigFile(bool writeUnreadKeys){
  //@tag:[.filename] This object tag determines the filename when exporting to a configuration file. Default: "config.cfg"
  TString fname(this->getTagStringDefault(".filename","config.cfg"));
  return this->exportConfigFile(TQFolder::getPathTail(fname), this->getTagStringDefault(".configname","Config"), writeUnreadKeys);
}

int TQTaggable::replaceInTags(TQTaggable& params, const TString& tagFilter) {
  // Replace tag placeholders in tags set on this instance of TQTaggable
  // according to the tags set on the TQTaggable object provided. A tag filter
  // can be specified to only perform the replacement where the key of a tag
  // matches the filter expression.
  TList* lTags = this->getListOfKeys(tagFilter);
  if (!lTags) return -1;
  TIterator* itr = lTags->MakeIterator();
  TObjString* ostr;
  while ((ostr = (dynamic_cast<TObjString*>(itr->Next())))) {
    if (!ostr) continue;
    if (!this->tagIsOfTypeString(ostr->GetString())) continue;
    this->setTagString(ostr->GetString(), this->replaceInText(params.replaceInText(this->getTagStringDefault(ostr->GetString(),""))));
  }
  delete lTags;
  delete itr;

  return 0;
}



// these are just wrappers for std::string
std::string TQTaggable::exportTagsAsStandardString(const TString& filter, bool xmlStyle){
  // wrapper for the TString variant of this function
  return this->exportTagsAsString(filter,xmlStyle).Data();
}
std::string TQTaggable::exportTagsAsStandardConfigString(const TString& prefix, const TString& filter){
  // wrapper for the TString variant of this function
  return this->exportTagsAsConfigString(prefix,filter).Data();
}
std::string TQTaggable::replaceInStandardStringRecursive(TString in, const TString& prefix, bool keepQuotes){
  // wrapper for the TString variant of this function
  return this->replaceInTextRecursive(in,prefix,keepQuotes).Data();
}
std::string TQTaggable::replaceInStandardString(const TString& in, const char* prefix, bool keepQuotes){
  // wrapper for the TString variant of this function
  return this->replaceInText(in,prefix,keepQuotes).Data();
}
std::string TQTaggable::replaceInStandardString(const TString& in, const TString& prefix, bool keepQuotes){
  // wrapper for the TString variant of this function
  return this->replaceInText(in,prefix,keepQuotes).Data();
}
std::string TQTaggable::replaceInStandardString(const TString& in, bool keepQuotes){
  // wrapper for the TString variant of this function
  return this->replaceInText(in,keepQuotes).Data();
}
std::string TQTaggable::getTagStandardStringDefault (const TString& key, const TString& defaultVal){
  // wrapper for the TString variant of this function
  return this->getTagStringDefault (key,defaultVal).Data();
}
std::vector<std::string > TQTaggable::getTagVStandardString (const TString& key){
  // wrapper for the TString variant of this function
  std::vector<std::string> retval;
  for(const auto& v:this->getTagVString (key)){
    retval.push_back(v.Data());
  }
  return retval;
}

// ###################################################
// ###########   Global Taggables   ##################
// ###################################################

std::map<TString,std::shared_ptr<TQTaggable>> TQTaggable::sGlobalTaggables;

std::shared_ptr<TQTaggable> TQTaggable::getGlobalTaggable(const char* name) {
  // wrapper around TString variant
  return TQTaggable::getGlobalTaggable(TString(name));
}

std::shared_ptr<TQTaggable> TQTaggable::getGlobalTaggable(const TString& name){
  if (sGlobalTaggables.count(name) < 1) {
    sGlobalTaggables[name] = std::make_shared<TQTaggable>();
  }
  return sGlobalTaggables[name];
}

bool TQTaggable::hasGlobalTaggable(const char* name) {
  // wrapper around TString variant
  return TQTaggable::hasGlobalTaggable(TString(name));
}

bool TQTaggable::hasGlobalTaggable(const TString& name){
  return sGlobalTaggables.count(name) > 0;
}

bool TQTaggable::removeGlobalTaggable(const char* name) {
  return TQTaggable::removeGlobalTaggable(TString(name));
}


bool TQTaggable::removeGlobalTaggable(const TString& name){
  return sGlobalTaggables.erase(name) > 0;
}
 TQTaggable.cxx:1
 TQTaggable.cxx:2
 TQTaggable.cxx:3
 TQTaggable.cxx:4
 TQTaggable.cxx:5
 TQTaggable.cxx:6
 TQTaggable.cxx:7
 TQTaggable.cxx:8
 TQTaggable.cxx:9
 TQTaggable.cxx:10
 TQTaggable.cxx:11
 TQTaggable.cxx:12
 TQTaggable.cxx:13
 TQTaggable.cxx:14
 TQTaggable.cxx:15
 TQTaggable.cxx:16
 TQTaggable.cxx:17
 TQTaggable.cxx:18
 TQTaggable.cxx:19
 TQTaggable.cxx:20
 TQTaggable.cxx:21
 TQTaggable.cxx:22
 TQTaggable.cxx:23
 TQTaggable.cxx:24
 TQTaggable.cxx:25
 TQTaggable.cxx:26
 TQTaggable.cxx:27
 TQTaggable.cxx:28
 TQTaggable.cxx:29
 TQTaggable.cxx:30
 TQTaggable.cxx:31
 TQTaggable.cxx:32
 TQTaggable.cxx:33
 TQTaggable.cxx:34
 TQTaggable.cxx:35
 TQTaggable.cxx:36
 TQTaggable.cxx:37
 TQTaggable.cxx:38
 TQTaggable.cxx:39
 TQTaggable.cxx:40
 TQTaggable.cxx:41
 TQTaggable.cxx:42
 TQTaggable.cxx:43
 TQTaggable.cxx:44
 TQTaggable.cxx:45
 TQTaggable.cxx:46
 TQTaggable.cxx:47
 TQTaggable.cxx:48
 TQTaggable.cxx:49
 TQTaggable.cxx:50
 TQTaggable.cxx:51
 TQTaggable.cxx:52
 TQTaggable.cxx:53
 TQTaggable.cxx:54
 TQTaggable.cxx:55
 TQTaggable.cxx:56
 TQTaggable.cxx:57
 TQTaggable.cxx:58
 TQTaggable.cxx:59
 TQTaggable.cxx:60
 TQTaggable.cxx:61
 TQTaggable.cxx:62
 TQTaggable.cxx:63
 TQTaggable.cxx:64
 TQTaggable.cxx:65
 TQTaggable.cxx:66
 TQTaggable.cxx:67
 TQTaggable.cxx:68
 TQTaggable.cxx:69
 TQTaggable.cxx:70
 TQTaggable.cxx:71
 TQTaggable.cxx:72
 TQTaggable.cxx:73
 TQTaggable.cxx:74
 TQTaggable.cxx:75
 TQTaggable.cxx:76
 TQTaggable.cxx:77
 TQTaggable.cxx:78
 TQTaggable.cxx:79
 TQTaggable.cxx:80
 TQTaggable.cxx:81
 TQTaggable.cxx:82
 TQTaggable.cxx:83
 TQTaggable.cxx:84
 TQTaggable.cxx:85
 TQTaggable.cxx:86
 TQTaggable.cxx:87
 TQTaggable.cxx:88
 TQTaggable.cxx:89
 TQTaggable.cxx:90
 TQTaggable.cxx:91
 TQTaggable.cxx:92
 TQTaggable.cxx:93
 TQTaggable.cxx:94
 TQTaggable.cxx:95
 TQTaggable.cxx:96
 TQTaggable.cxx:97
 TQTaggable.cxx:98
 TQTaggable.cxx:99
 TQTaggable.cxx:100
 TQTaggable.cxx:101
 TQTaggable.cxx:102
 TQTaggable.cxx:103
 TQTaggable.cxx:104
 TQTaggable.cxx:105
 TQTaggable.cxx:106
 TQTaggable.cxx:107
 TQTaggable.cxx:108
 TQTaggable.cxx:109
 TQTaggable.cxx:110
 TQTaggable.cxx:111
 TQTaggable.cxx:112
 TQTaggable.cxx:113
 TQTaggable.cxx:114
 TQTaggable.cxx:115
 TQTaggable.cxx:116
 TQTaggable.cxx:117
 TQTaggable.cxx:118
 TQTaggable.cxx:119
 TQTaggable.cxx:120
 TQTaggable.cxx:121
 TQTaggable.cxx:122
 TQTaggable.cxx:123
 TQTaggable.cxx:124
 TQTaggable.cxx:125
 TQTaggable.cxx:126
 TQTaggable.cxx:127
 TQTaggable.cxx:128
 TQTaggable.cxx:129
 TQTaggable.cxx:130
 TQTaggable.cxx:131
 TQTaggable.cxx:132
 TQTaggable.cxx:133
 TQTaggable.cxx:134
 TQTaggable.cxx:135
 TQTaggable.cxx:136
 TQTaggable.cxx:137
 TQTaggable.cxx:138
 TQTaggable.cxx:139
 TQTaggable.cxx:140
 TQTaggable.cxx:141
 TQTaggable.cxx:142
 TQTaggable.cxx:143
 TQTaggable.cxx:144
 TQTaggable.cxx:145
 TQTaggable.cxx:146
 TQTaggable.cxx:147
 TQTaggable.cxx:148
 TQTaggable.cxx:149
 TQTaggable.cxx:150
 TQTaggable.cxx:151
 TQTaggable.cxx:152
 TQTaggable.cxx:153
 TQTaggable.cxx:154
 TQTaggable.cxx:155
 TQTaggable.cxx:156
 TQTaggable.cxx:157
 TQTaggable.cxx:158
 TQTaggable.cxx:159
 TQTaggable.cxx:160
 TQTaggable.cxx:161
 TQTaggable.cxx:162
 TQTaggable.cxx:163
 TQTaggable.cxx:164
 TQTaggable.cxx:165
 TQTaggable.cxx:166
 TQTaggable.cxx:167
 TQTaggable.cxx:168
 TQTaggable.cxx:169
 TQTaggable.cxx:170
 TQTaggable.cxx:171
 TQTaggable.cxx:172
 TQTaggable.cxx:173
 TQTaggable.cxx:174
 TQTaggable.cxx:175
 TQTaggable.cxx:176
 TQTaggable.cxx:177
 TQTaggable.cxx:178
 TQTaggable.cxx:179
 TQTaggable.cxx:180
 TQTaggable.cxx:181
 TQTaggable.cxx:182
 TQTaggable.cxx:183
 TQTaggable.cxx:184
 TQTaggable.cxx:185
 TQTaggable.cxx:186
 TQTaggable.cxx:187
 TQTaggable.cxx:188
 TQTaggable.cxx:189
 TQTaggable.cxx:190
 TQTaggable.cxx:191
 TQTaggable.cxx:192
 TQTaggable.cxx:193
 TQTaggable.cxx:194
 TQTaggable.cxx:195
 TQTaggable.cxx:196
 TQTaggable.cxx:197
 TQTaggable.cxx:198
 TQTaggable.cxx:199
 TQTaggable.cxx:200
 TQTaggable.cxx:201
 TQTaggable.cxx:202
 TQTaggable.cxx:203
 TQTaggable.cxx:204
 TQTaggable.cxx:205
 TQTaggable.cxx:206
 TQTaggable.cxx:207
 TQTaggable.cxx:208
 TQTaggable.cxx:209
 TQTaggable.cxx:210
 TQTaggable.cxx:211
 TQTaggable.cxx:212
 TQTaggable.cxx:213
 TQTaggable.cxx:214
 TQTaggable.cxx:215
 TQTaggable.cxx:216
 TQTaggable.cxx:217
 TQTaggable.cxx:218
 TQTaggable.cxx:219
 TQTaggable.cxx:220
 TQTaggable.cxx:221
 TQTaggable.cxx:222
 TQTaggable.cxx:223
 TQTaggable.cxx:224
 TQTaggable.cxx:225
 TQTaggable.cxx:226
 TQTaggable.cxx:227
 TQTaggable.cxx:228
 TQTaggable.cxx:229
 TQTaggable.cxx:230
 TQTaggable.cxx:231
 TQTaggable.cxx:232
 TQTaggable.cxx:233
 TQTaggable.cxx:234
 TQTaggable.cxx:235
 TQTaggable.cxx:236
 TQTaggable.cxx:237
 TQTaggable.cxx:238
 TQTaggable.cxx:239
 TQTaggable.cxx:240
 TQTaggable.cxx:241
 TQTaggable.cxx:242
 TQTaggable.cxx:243
 TQTaggable.cxx:244
 TQTaggable.cxx:245
 TQTaggable.cxx:246
 TQTaggable.cxx:247
 TQTaggable.cxx:248
 TQTaggable.cxx:249
 TQTaggable.cxx:250
 TQTaggable.cxx:251
 TQTaggable.cxx:252
 TQTaggable.cxx:253
 TQTaggable.cxx:254
 TQTaggable.cxx:255
 TQTaggable.cxx:256
 TQTaggable.cxx:257
 TQTaggable.cxx:258
 TQTaggable.cxx:259
 TQTaggable.cxx:260
 TQTaggable.cxx:261
 TQTaggable.cxx:262
 TQTaggable.cxx:263
 TQTaggable.cxx:264
 TQTaggable.cxx:265
 TQTaggable.cxx:266
 TQTaggable.cxx:267
 TQTaggable.cxx:268
 TQTaggable.cxx:269
 TQTaggable.cxx:270
 TQTaggable.cxx:271
 TQTaggable.cxx:272
 TQTaggable.cxx:273
 TQTaggable.cxx:274
 TQTaggable.cxx:275
 TQTaggable.cxx:276
 TQTaggable.cxx:277
 TQTaggable.cxx:278
 TQTaggable.cxx:279
 TQTaggable.cxx:280
 TQTaggable.cxx:281
 TQTaggable.cxx:282
 TQTaggable.cxx:283
 TQTaggable.cxx:284
 TQTaggable.cxx:285
 TQTaggable.cxx:286
 TQTaggable.cxx:287
 TQTaggable.cxx:288
 TQTaggable.cxx:289
 TQTaggable.cxx:290
 TQTaggable.cxx:291
 TQTaggable.cxx:292
 TQTaggable.cxx:293
 TQTaggable.cxx:294
 TQTaggable.cxx:295
 TQTaggable.cxx:296
 TQTaggable.cxx:297
 TQTaggable.cxx:298
 TQTaggable.cxx:299
 TQTaggable.cxx:300
 TQTaggable.cxx:301
 TQTaggable.cxx:302
 TQTaggable.cxx:303
 TQTaggable.cxx:304
 TQTaggable.cxx:305
 TQTaggable.cxx:306
 TQTaggable.cxx:307
 TQTaggable.cxx:308
 TQTaggable.cxx:309
 TQTaggable.cxx:310
 TQTaggable.cxx:311
 TQTaggable.cxx:312
 TQTaggable.cxx:313
 TQTaggable.cxx:314
 TQTaggable.cxx:315
 TQTaggable.cxx:316
 TQTaggable.cxx:317
 TQTaggable.cxx:318
 TQTaggable.cxx:319
 TQTaggable.cxx:320
 TQTaggable.cxx:321
 TQTaggable.cxx:322
 TQTaggable.cxx:323
 TQTaggable.cxx:324
 TQTaggable.cxx:325
 TQTaggable.cxx:326
 TQTaggable.cxx:327
 TQTaggable.cxx:328
 TQTaggable.cxx:329
 TQTaggable.cxx:330
 TQTaggable.cxx:331
 TQTaggable.cxx:332
 TQTaggable.cxx:333
 TQTaggable.cxx:334
 TQTaggable.cxx:335
 TQTaggable.cxx:336
 TQTaggable.cxx:337
 TQTaggable.cxx:338
 TQTaggable.cxx:339
 TQTaggable.cxx:340
 TQTaggable.cxx:341
 TQTaggable.cxx:342
 TQTaggable.cxx:343
 TQTaggable.cxx:344
 TQTaggable.cxx:345
 TQTaggable.cxx:346
 TQTaggable.cxx:347
 TQTaggable.cxx:348
 TQTaggable.cxx:349
 TQTaggable.cxx:350
 TQTaggable.cxx:351
 TQTaggable.cxx:352
 TQTaggable.cxx:353
 TQTaggable.cxx:354
 TQTaggable.cxx:355
 TQTaggable.cxx:356
 TQTaggable.cxx:357
 TQTaggable.cxx:358
 TQTaggable.cxx:359
 TQTaggable.cxx:360
 TQTaggable.cxx:361
 TQTaggable.cxx:362
 TQTaggable.cxx:363
 TQTaggable.cxx:364
 TQTaggable.cxx:365
 TQTaggable.cxx:366
 TQTaggable.cxx:367
 TQTaggable.cxx:368
 TQTaggable.cxx:369
 TQTaggable.cxx:370
 TQTaggable.cxx:371
 TQTaggable.cxx:372
 TQTaggable.cxx:373
 TQTaggable.cxx:374
 TQTaggable.cxx:375
 TQTaggable.cxx:376
 TQTaggable.cxx:377
 TQTaggable.cxx:378
 TQTaggable.cxx:379
 TQTaggable.cxx:380
 TQTaggable.cxx:381
 TQTaggable.cxx:382
 TQTaggable.cxx:383
 TQTaggable.cxx:384
 TQTaggable.cxx:385
 TQTaggable.cxx:386
 TQTaggable.cxx:387
 TQTaggable.cxx:388
 TQTaggable.cxx:389
 TQTaggable.cxx:390
 TQTaggable.cxx:391
 TQTaggable.cxx:392
 TQTaggable.cxx:393
 TQTaggable.cxx:394
 TQTaggable.cxx:395
 TQTaggable.cxx:396
 TQTaggable.cxx:397
 TQTaggable.cxx:398
 TQTaggable.cxx:399
 TQTaggable.cxx:400
 TQTaggable.cxx:401
 TQTaggable.cxx:402
 TQTaggable.cxx:403
 TQTaggable.cxx:404
 TQTaggable.cxx:405
 TQTaggable.cxx:406
 TQTaggable.cxx:407
 TQTaggable.cxx:408
 TQTaggable.cxx:409
 TQTaggable.cxx:410
 TQTaggable.cxx:411
 TQTaggable.cxx:412
 TQTaggable.cxx:413
 TQTaggable.cxx:414
 TQTaggable.cxx:415
 TQTaggable.cxx:416
 TQTaggable.cxx:417
 TQTaggable.cxx:418
 TQTaggable.cxx:419
 TQTaggable.cxx:420
 TQTaggable.cxx:421
 TQTaggable.cxx:422
 TQTaggable.cxx:423
 TQTaggable.cxx:424
 TQTaggable.cxx:425
 TQTaggable.cxx:426
 TQTaggable.cxx:427
 TQTaggable.cxx:428
 TQTaggable.cxx:429
 TQTaggable.cxx:430
 TQTaggable.cxx:431
 TQTaggable.cxx:432
 TQTaggable.cxx:433
 TQTaggable.cxx:434
 TQTaggable.cxx:435
 TQTaggable.cxx:436
 TQTaggable.cxx:437
 TQTaggable.cxx:438
 TQTaggable.cxx:439
 TQTaggable.cxx:440
 TQTaggable.cxx:441
 TQTaggable.cxx:442
 TQTaggable.cxx:443
 TQTaggable.cxx:444
 TQTaggable.cxx:445
 TQTaggable.cxx:446
 TQTaggable.cxx:447
 TQTaggable.cxx:448
 TQTaggable.cxx:449
 TQTaggable.cxx:450
 TQTaggable.cxx:451
 TQTaggable.cxx:452
 TQTaggable.cxx:453
 TQTaggable.cxx:454
 TQTaggable.cxx:455
 TQTaggable.cxx:456
 TQTaggable.cxx:457
 TQTaggable.cxx:458
 TQTaggable.cxx:459
 TQTaggable.cxx:460
 TQTaggable.cxx:461
 TQTaggable.cxx:462
 TQTaggable.cxx:463
 TQTaggable.cxx:464
 TQTaggable.cxx:465
 TQTaggable.cxx:466
 TQTaggable.cxx:467
 TQTaggable.cxx:468
 TQTaggable.cxx:469
 TQTaggable.cxx:470
 TQTaggable.cxx:471
 TQTaggable.cxx:472
 TQTaggable.cxx:473
 TQTaggable.cxx:474
 TQTaggable.cxx:475
 TQTaggable.cxx:476
 TQTaggable.cxx:477
 TQTaggable.cxx:478
 TQTaggable.cxx:479
 TQTaggable.cxx:480
 TQTaggable.cxx:481
 TQTaggable.cxx:482
 TQTaggable.cxx:483
 TQTaggable.cxx:484
 TQTaggable.cxx:485
 TQTaggable.cxx:486
 TQTaggable.cxx:487
 TQTaggable.cxx:488
 TQTaggable.cxx:489
 TQTaggable.cxx:490
 TQTaggable.cxx:491
 TQTaggable.cxx:492
 TQTaggable.cxx:493
 TQTaggable.cxx:494
 TQTaggable.cxx:495
 TQTaggable.cxx:496
 TQTaggable.cxx:497
 TQTaggable.cxx:498
 TQTaggable.cxx:499
 TQTaggable.cxx:500
 TQTaggable.cxx:501
 TQTaggable.cxx:502
 TQTaggable.cxx:503
 TQTaggable.cxx:504
 TQTaggable.cxx:505
 TQTaggable.cxx:506
 TQTaggable.cxx:507
 TQTaggable.cxx:508
 TQTaggable.cxx:509
 TQTaggable.cxx:510
 TQTaggable.cxx:511
 TQTaggable.cxx:512
 TQTaggable.cxx:513
 TQTaggable.cxx:514
 TQTaggable.cxx:515
 TQTaggable.cxx:516
 TQTaggable.cxx:517
 TQTaggable.cxx:518
 TQTaggable.cxx:519
 TQTaggable.cxx:520
 TQTaggable.cxx:521
 TQTaggable.cxx:522
 TQTaggable.cxx:523
 TQTaggable.cxx:524
 TQTaggable.cxx:525
 TQTaggable.cxx:526
 TQTaggable.cxx:527
 TQTaggable.cxx:528
 TQTaggable.cxx:529
 TQTaggable.cxx:530
 TQTaggable.cxx:531
 TQTaggable.cxx:532
 TQTaggable.cxx:533
 TQTaggable.cxx:534
 TQTaggable.cxx:535
 TQTaggable.cxx:536
 TQTaggable.cxx:537
 TQTaggable.cxx:538
 TQTaggable.cxx:539
 TQTaggable.cxx:540
 TQTaggable.cxx:541
 TQTaggable.cxx:542
 TQTaggable.cxx:543
 TQTaggable.cxx:544
 TQTaggable.cxx:545
 TQTaggable.cxx:546
 TQTaggable.cxx:547
 TQTaggable.cxx:548
 TQTaggable.cxx:549
 TQTaggable.cxx:550
 TQTaggable.cxx:551
 TQTaggable.cxx:552
 TQTaggable.cxx:553
 TQTaggable.cxx:554
 TQTaggable.cxx:555
 TQTaggable.cxx:556
 TQTaggable.cxx:557
 TQTaggable.cxx:558
 TQTaggable.cxx:559
 TQTaggable.cxx:560
 TQTaggable.cxx:561
 TQTaggable.cxx:562
 TQTaggable.cxx:563
 TQTaggable.cxx:564
 TQTaggable.cxx:565
 TQTaggable.cxx:566
 TQTaggable.cxx:567
 TQTaggable.cxx:568
 TQTaggable.cxx:569
 TQTaggable.cxx:570
 TQTaggable.cxx:571
 TQTaggable.cxx:572
 TQTaggable.cxx:573
 TQTaggable.cxx:574
 TQTaggable.cxx:575
 TQTaggable.cxx:576
 TQTaggable.cxx:577
 TQTaggable.cxx:578
 TQTaggable.cxx:579
 TQTaggable.cxx:580
 TQTaggable.cxx:581
 TQTaggable.cxx:582
 TQTaggable.cxx:583
 TQTaggable.cxx:584
 TQTaggable.cxx:585
 TQTaggable.cxx:586
 TQTaggable.cxx:587
 TQTaggable.cxx:588
 TQTaggable.cxx:589
 TQTaggable.cxx:590
 TQTaggable.cxx:591
 TQTaggable.cxx:592
 TQTaggable.cxx:593
 TQTaggable.cxx:594
 TQTaggable.cxx:595
 TQTaggable.cxx:596
 TQTaggable.cxx:597
 TQTaggable.cxx:598
 TQTaggable.cxx:599
 TQTaggable.cxx:600
 TQTaggable.cxx:601
 TQTaggable.cxx:602
 TQTaggable.cxx:603
 TQTaggable.cxx:604
 TQTaggable.cxx:605
 TQTaggable.cxx:606
 TQTaggable.cxx:607
 TQTaggable.cxx:608
 TQTaggable.cxx:609
 TQTaggable.cxx:610
 TQTaggable.cxx:611
 TQTaggable.cxx:612
 TQTaggable.cxx:613
 TQTaggable.cxx:614
 TQTaggable.cxx:615
 TQTaggable.cxx:616
 TQTaggable.cxx:617
 TQTaggable.cxx:618
 TQTaggable.cxx:619
 TQTaggable.cxx:620
 TQTaggable.cxx:621
 TQTaggable.cxx:622
 TQTaggable.cxx:623
 TQTaggable.cxx:624
 TQTaggable.cxx:625
 TQTaggable.cxx:626
 TQTaggable.cxx:627
 TQTaggable.cxx:628
 TQTaggable.cxx:629
 TQTaggable.cxx:630
 TQTaggable.cxx:631
 TQTaggable.cxx:632
 TQTaggable.cxx:633
 TQTaggable.cxx:634
 TQTaggable.cxx:635
 TQTaggable.cxx:636
 TQTaggable.cxx:637
 TQTaggable.cxx:638
 TQTaggable.cxx:639
 TQTaggable.cxx:640
 TQTaggable.cxx:641
 TQTaggable.cxx:642
 TQTaggable.cxx:643
 TQTaggable.cxx:644
 TQTaggable.cxx:645
 TQTaggable.cxx:646
 TQTaggable.cxx:647
 TQTaggable.cxx:648
 TQTaggable.cxx:649
 TQTaggable.cxx:650
 TQTaggable.cxx:651
 TQTaggable.cxx:652
 TQTaggable.cxx:653
 TQTaggable.cxx:654
 TQTaggable.cxx:655
 TQTaggable.cxx:656
 TQTaggable.cxx:657
 TQTaggable.cxx:658
 TQTaggable.cxx:659
 TQTaggable.cxx:660
 TQTaggable.cxx:661
 TQTaggable.cxx:662
 TQTaggable.cxx:663
 TQTaggable.cxx:664
 TQTaggable.cxx:665
 TQTaggable.cxx:666
 TQTaggable.cxx:667
 TQTaggable.cxx:668
 TQTaggable.cxx:669
 TQTaggable.cxx:670
 TQTaggable.cxx:671
 TQTaggable.cxx:672
 TQTaggable.cxx:673
 TQTaggable.cxx:674
 TQTaggable.cxx:675
 TQTaggable.cxx:676
 TQTaggable.cxx:677
 TQTaggable.cxx:678
 TQTaggable.cxx:679
 TQTaggable.cxx:680
 TQTaggable.cxx:681
 TQTaggable.cxx:682
 TQTaggable.cxx:683
 TQTaggable.cxx:684
 TQTaggable.cxx:685
 TQTaggable.cxx:686
 TQTaggable.cxx:687
 TQTaggable.cxx:688
 TQTaggable.cxx:689
 TQTaggable.cxx:690
 TQTaggable.cxx:691
 TQTaggable.cxx:692
 TQTaggable.cxx:693
 TQTaggable.cxx:694
 TQTaggable.cxx:695
 TQTaggable.cxx:696
 TQTaggable.cxx:697
 TQTaggable.cxx:698
 TQTaggable.cxx:699
 TQTaggable.cxx:700
 TQTaggable.cxx:701
 TQTaggable.cxx:702
 TQTaggable.cxx:703
 TQTaggable.cxx:704
 TQTaggable.cxx:705
 TQTaggable.cxx:706
 TQTaggable.cxx:707
 TQTaggable.cxx:708
 TQTaggable.cxx:709
 TQTaggable.cxx:710
 TQTaggable.cxx:711
 TQTaggable.cxx:712
 TQTaggable.cxx:713
 TQTaggable.cxx:714
 TQTaggable.cxx:715
 TQTaggable.cxx:716
 TQTaggable.cxx:717
 TQTaggable.cxx:718
 TQTaggable.cxx:719
 TQTaggable.cxx:720
 TQTaggable.cxx:721
 TQTaggable.cxx:722
 TQTaggable.cxx:723
 TQTaggable.cxx:724
 TQTaggable.cxx:725
 TQTaggable.cxx:726
 TQTaggable.cxx:727
 TQTaggable.cxx:728
 TQTaggable.cxx:729
 TQTaggable.cxx:730
 TQTaggable.cxx:731
 TQTaggable.cxx:732
 TQTaggable.cxx:733
 TQTaggable.cxx:734
 TQTaggable.cxx:735
 TQTaggable.cxx:736
 TQTaggable.cxx:737
 TQTaggable.cxx:738
 TQTaggable.cxx:739
 TQTaggable.cxx:740
 TQTaggable.cxx:741
 TQTaggable.cxx:742
 TQTaggable.cxx:743
 TQTaggable.cxx:744
 TQTaggable.cxx:745
 TQTaggable.cxx:746
 TQTaggable.cxx:747
 TQTaggable.cxx:748
 TQTaggable.cxx:749
 TQTaggable.cxx:750
 TQTaggable.cxx:751
 TQTaggable.cxx:752
 TQTaggable.cxx:753
 TQTaggable.cxx:754
 TQTaggable.cxx:755
 TQTaggable.cxx:756
 TQTaggable.cxx:757
 TQTaggable.cxx:758
 TQTaggable.cxx:759
 TQTaggable.cxx:760
 TQTaggable.cxx:761
 TQTaggable.cxx:762
 TQTaggable.cxx:763
 TQTaggable.cxx:764
 TQTaggable.cxx:765
 TQTaggable.cxx:766
 TQTaggable.cxx:767
 TQTaggable.cxx:768
 TQTaggable.cxx:769
 TQTaggable.cxx:770
 TQTaggable.cxx:771
 TQTaggable.cxx:772
 TQTaggable.cxx:773
 TQTaggable.cxx:774
 TQTaggable.cxx:775
 TQTaggable.cxx:776
 TQTaggable.cxx:777
 TQTaggable.cxx:778
 TQTaggable.cxx:779
 TQTaggable.cxx:780
 TQTaggable.cxx:781
 TQTaggable.cxx:782
 TQTaggable.cxx:783
 TQTaggable.cxx:784
 TQTaggable.cxx:785
 TQTaggable.cxx:786
 TQTaggable.cxx:787
 TQTaggable.cxx:788
 TQTaggable.cxx:789
 TQTaggable.cxx:790
 TQTaggable.cxx:791
 TQTaggable.cxx:792
 TQTaggable.cxx:793
 TQTaggable.cxx:794
 TQTaggable.cxx:795
 TQTaggable.cxx:796
 TQTaggable.cxx:797
 TQTaggable.cxx:798
 TQTaggable.cxx:799
 TQTaggable.cxx:800
 TQTaggable.cxx:801
 TQTaggable.cxx:802
 TQTaggable.cxx:803
 TQTaggable.cxx:804
 TQTaggable.cxx:805
 TQTaggable.cxx:806
 TQTaggable.cxx:807
 TQTaggable.cxx:808
 TQTaggable.cxx:809
 TQTaggable.cxx:810
 TQTaggable.cxx:811
 TQTaggable.cxx:812
 TQTaggable.cxx:813
 TQTaggable.cxx:814
 TQTaggable.cxx:815
 TQTaggable.cxx:816
 TQTaggable.cxx:817
 TQTaggable.cxx:818
 TQTaggable.cxx:819
 TQTaggable.cxx:820
 TQTaggable.cxx:821
 TQTaggable.cxx:822
 TQTaggable.cxx:823
 TQTaggable.cxx:824
 TQTaggable.cxx:825
 TQTaggable.cxx:826
 TQTaggable.cxx:827
 TQTaggable.cxx:828
 TQTaggable.cxx:829
 TQTaggable.cxx:830
 TQTaggable.cxx:831
 TQTaggable.cxx:832
 TQTaggable.cxx:833
 TQTaggable.cxx:834
 TQTaggable.cxx:835
 TQTaggable.cxx:836
 TQTaggable.cxx:837
 TQTaggable.cxx:838
 TQTaggable.cxx:839
 TQTaggable.cxx:840
 TQTaggable.cxx:841
 TQTaggable.cxx:842
 TQTaggable.cxx:843
 TQTaggable.cxx:844
 TQTaggable.cxx:845
 TQTaggable.cxx:846
 TQTaggable.cxx:847
 TQTaggable.cxx:848
 TQTaggable.cxx:849
 TQTaggable.cxx:850
 TQTaggable.cxx:851
 TQTaggable.cxx:852
 TQTaggable.cxx:853
 TQTaggable.cxx:854
 TQTaggable.cxx:855
 TQTaggable.cxx:856
 TQTaggable.cxx:857
 TQTaggable.cxx:858
 TQTaggable.cxx:859
 TQTaggable.cxx:860
 TQTaggable.cxx:861
 TQTaggable.cxx:862
 TQTaggable.cxx:863
 TQTaggable.cxx:864
 TQTaggable.cxx:865
 TQTaggable.cxx:866
 TQTaggable.cxx:867
 TQTaggable.cxx:868
 TQTaggable.cxx:869
 TQTaggable.cxx:870
 TQTaggable.cxx:871
 TQTaggable.cxx:872
 TQTaggable.cxx:873
 TQTaggable.cxx:874
 TQTaggable.cxx:875
 TQTaggable.cxx:876
 TQTaggable.cxx:877
 TQTaggable.cxx:878
 TQTaggable.cxx:879
 TQTaggable.cxx:880
 TQTaggable.cxx:881
 TQTaggable.cxx:882
 TQTaggable.cxx:883
 TQTaggable.cxx:884
 TQTaggable.cxx:885
 TQTaggable.cxx:886
 TQTaggable.cxx:887
 TQTaggable.cxx:888
 TQTaggable.cxx:889
 TQTaggable.cxx:890
 TQTaggable.cxx:891
 TQTaggable.cxx:892
 TQTaggable.cxx:893
 TQTaggable.cxx:894
 TQTaggable.cxx:895
 TQTaggable.cxx:896
 TQTaggable.cxx:897
 TQTaggable.cxx:898
 TQTaggable.cxx:899
 TQTaggable.cxx:900
 TQTaggable.cxx:901
 TQTaggable.cxx:902
 TQTaggable.cxx:903
 TQTaggable.cxx:904
 TQTaggable.cxx:905
 TQTaggable.cxx:906
 TQTaggable.cxx:907
 TQTaggable.cxx:908
 TQTaggable.cxx:909
 TQTaggable.cxx:910
 TQTaggable.cxx:911
 TQTaggable.cxx:912
 TQTaggable.cxx:913
 TQTaggable.cxx:914
 TQTaggable.cxx:915
 TQTaggable.cxx:916
 TQTaggable.cxx:917
 TQTaggable.cxx:918
 TQTaggable.cxx:919
 TQTaggable.cxx:920
 TQTaggable.cxx:921
 TQTaggable.cxx:922
 TQTaggable.cxx:923
 TQTaggable.cxx:924
 TQTaggable.cxx:925
 TQTaggable.cxx:926
 TQTaggable.cxx:927
 TQTaggable.cxx:928
 TQTaggable.cxx:929
 TQTaggable.cxx:930
 TQTaggable.cxx:931
 TQTaggable.cxx:932
 TQTaggable.cxx:933
 TQTaggable.cxx:934
 TQTaggable.cxx:935
 TQTaggable.cxx:936
 TQTaggable.cxx:937
 TQTaggable.cxx:938
 TQTaggable.cxx:939
 TQTaggable.cxx:940
 TQTaggable.cxx:941
 TQTaggable.cxx:942
 TQTaggable.cxx:943
 TQTaggable.cxx:944
 TQTaggable.cxx:945
 TQTaggable.cxx:946
 TQTaggable.cxx:947
 TQTaggable.cxx:948
 TQTaggable.cxx:949
 TQTaggable.cxx:950
 TQTaggable.cxx:951
 TQTaggable.cxx:952
 TQTaggable.cxx:953
 TQTaggable.cxx:954
 TQTaggable.cxx:955
 TQTaggable.cxx:956
 TQTaggable.cxx:957
 TQTaggable.cxx:958
 TQTaggable.cxx:959
 TQTaggable.cxx:960
 TQTaggable.cxx:961
 TQTaggable.cxx:962
 TQTaggable.cxx:963
 TQTaggable.cxx:964
 TQTaggable.cxx:965
 TQTaggable.cxx:966
 TQTaggable.cxx:967
 TQTaggable.cxx:968
 TQTaggable.cxx:969
 TQTaggable.cxx:970
 TQTaggable.cxx:971
 TQTaggable.cxx:972
 TQTaggable.cxx:973
 TQTaggable.cxx:974
 TQTaggable.cxx:975
 TQTaggable.cxx:976
 TQTaggable.cxx:977
 TQTaggable.cxx:978
 TQTaggable.cxx:979
 TQTaggable.cxx:980
 TQTaggable.cxx:981
 TQTaggable.cxx:982
 TQTaggable.cxx:983
 TQTaggable.cxx:984
 TQTaggable.cxx:985
 TQTaggable.cxx:986
 TQTaggable.cxx:987
 TQTaggable.cxx:988
 TQTaggable.cxx:989
 TQTaggable.cxx:990
 TQTaggable.cxx:991
 TQTaggable.cxx:992
 TQTaggable.cxx:993
 TQTaggable.cxx:994
 TQTaggable.cxx:995
 TQTaggable.cxx:996
 TQTaggable.cxx:997
 TQTaggable.cxx:998
 TQTaggable.cxx:999
 TQTaggable.cxx:1000
 TQTaggable.cxx:1001
 TQTaggable.cxx:1002
 TQTaggable.cxx:1003
 TQTaggable.cxx:1004
 TQTaggable.cxx:1005
 TQTaggable.cxx:1006
 TQTaggable.cxx:1007
 TQTaggable.cxx:1008
 TQTaggable.cxx:1009
 TQTaggable.cxx:1010
 TQTaggable.cxx:1011
 TQTaggable.cxx:1012
 TQTaggable.cxx:1013
 TQTaggable.cxx:1014
 TQTaggable.cxx:1015
 TQTaggable.cxx:1016
 TQTaggable.cxx:1017
 TQTaggable.cxx:1018
 TQTaggable.cxx:1019
 TQTaggable.cxx:1020
 TQTaggable.cxx:1021
 TQTaggable.cxx:1022
 TQTaggable.cxx:1023
 TQTaggable.cxx:1024
 TQTaggable.cxx:1025
 TQTaggable.cxx:1026
 TQTaggable.cxx:1027
 TQTaggable.cxx:1028
 TQTaggable.cxx:1029
 TQTaggable.cxx:1030
 TQTaggable.cxx:1031
 TQTaggable.cxx:1032
 TQTaggable.cxx:1033
 TQTaggable.cxx:1034
 TQTaggable.cxx:1035
 TQTaggable.cxx:1036
 TQTaggable.cxx:1037
 TQTaggable.cxx:1038
 TQTaggable.cxx:1039
 TQTaggable.cxx:1040
 TQTaggable.cxx:1041
 TQTaggable.cxx:1042
 TQTaggable.cxx:1043
 TQTaggable.cxx:1044
 TQTaggable.cxx:1045
 TQTaggable.cxx:1046
 TQTaggable.cxx:1047
 TQTaggable.cxx:1048
 TQTaggable.cxx:1049
 TQTaggable.cxx:1050
 TQTaggable.cxx:1051
 TQTaggable.cxx:1052
 TQTaggable.cxx:1053
 TQTaggable.cxx:1054
 TQTaggable.cxx:1055
 TQTaggable.cxx:1056
 TQTaggable.cxx:1057
 TQTaggable.cxx:1058
 TQTaggable.cxx:1059
 TQTaggable.cxx:1060
 TQTaggable.cxx:1061
 TQTaggable.cxx:1062
 TQTaggable.cxx:1063
 TQTaggable.cxx:1064
 TQTaggable.cxx:1065
 TQTaggable.cxx:1066
 TQTaggable.cxx:1067
 TQTaggable.cxx:1068
 TQTaggable.cxx:1069
 TQTaggable.cxx:1070
 TQTaggable.cxx:1071
 TQTaggable.cxx:1072
 TQTaggable.cxx:1073
 TQTaggable.cxx:1074
 TQTaggable.cxx:1075
 TQTaggable.cxx:1076
 TQTaggable.cxx:1077
 TQTaggable.cxx:1078
 TQTaggable.cxx:1079
 TQTaggable.cxx:1080
 TQTaggable.cxx:1081
 TQTaggable.cxx:1082
 TQTaggable.cxx:1083
 TQTaggable.cxx:1084
 TQTaggable.cxx:1085
 TQTaggable.cxx:1086
 TQTaggable.cxx:1087
 TQTaggable.cxx:1088
 TQTaggable.cxx:1089
 TQTaggable.cxx:1090
 TQTaggable.cxx:1091
 TQTaggable.cxx:1092
 TQTaggable.cxx:1093
 TQTaggable.cxx:1094
 TQTaggable.cxx:1095
 TQTaggable.cxx:1096
 TQTaggable.cxx:1097
 TQTaggable.cxx:1098
 TQTaggable.cxx:1099
 TQTaggable.cxx:1100
 TQTaggable.cxx:1101
 TQTaggable.cxx:1102
 TQTaggable.cxx:1103
 TQTaggable.cxx:1104
 TQTaggable.cxx:1105
 TQTaggable.cxx:1106
 TQTaggable.cxx:1107
 TQTaggable.cxx:1108
 TQTaggable.cxx:1109
 TQTaggable.cxx:1110
 TQTaggable.cxx:1111
 TQTaggable.cxx:1112
 TQTaggable.cxx:1113
 TQTaggable.cxx:1114
 TQTaggable.cxx:1115
 TQTaggable.cxx:1116
 TQTaggable.cxx:1117
 TQTaggable.cxx:1118
 TQTaggable.cxx:1119
 TQTaggable.cxx:1120
 TQTaggable.cxx:1121
 TQTaggable.cxx:1122
 TQTaggable.cxx:1123
 TQTaggable.cxx:1124
 TQTaggable.cxx:1125
 TQTaggable.cxx:1126
 TQTaggable.cxx:1127
 TQTaggable.cxx:1128
 TQTaggable.cxx:1129
 TQTaggable.cxx:1130
 TQTaggable.cxx:1131
 TQTaggable.cxx:1132
 TQTaggable.cxx:1133
 TQTaggable.cxx:1134
 TQTaggable.cxx:1135
 TQTaggable.cxx:1136
 TQTaggable.cxx:1137
 TQTaggable.cxx:1138
 TQTaggable.cxx:1139
 TQTaggable.cxx:1140
 TQTaggable.cxx:1141
 TQTaggable.cxx:1142
 TQTaggable.cxx:1143
 TQTaggable.cxx:1144
 TQTaggable.cxx:1145
 TQTaggable.cxx:1146
 TQTaggable.cxx:1147
 TQTaggable.cxx:1148
 TQTaggable.cxx:1149
 TQTaggable.cxx:1150
 TQTaggable.cxx:1151
 TQTaggable.cxx:1152
 TQTaggable.cxx:1153
 TQTaggable.cxx:1154
 TQTaggable.cxx:1155
 TQTaggable.cxx:1156
 TQTaggable.cxx:1157
 TQTaggable.cxx:1158
 TQTaggable.cxx:1159
 TQTaggable.cxx:1160
 TQTaggable.cxx:1161
 TQTaggable.cxx:1162
 TQTaggable.cxx:1163
 TQTaggable.cxx:1164
 TQTaggable.cxx:1165
 TQTaggable.cxx:1166
 TQTaggable.cxx:1167
 TQTaggable.cxx:1168
 TQTaggable.cxx:1169
 TQTaggable.cxx:1170
 TQTaggable.cxx:1171
 TQTaggable.cxx:1172
 TQTaggable.cxx:1173
 TQTaggable.cxx:1174
 TQTaggable.cxx:1175
 TQTaggable.cxx:1176
 TQTaggable.cxx:1177
 TQTaggable.cxx:1178
 TQTaggable.cxx:1179
 TQTaggable.cxx:1180
 TQTaggable.cxx:1181
 TQTaggable.cxx:1182
 TQTaggable.cxx:1183
 TQTaggable.cxx:1184
 TQTaggable.cxx:1185
 TQTaggable.cxx:1186
 TQTaggable.cxx:1187
 TQTaggable.cxx:1188
 TQTaggable.cxx:1189
 TQTaggable.cxx:1190
 TQTaggable.cxx:1191
 TQTaggable.cxx:1192
 TQTaggable.cxx:1193
 TQTaggable.cxx:1194
 TQTaggable.cxx:1195
 TQTaggable.cxx:1196
 TQTaggable.cxx:1197
 TQTaggable.cxx:1198
 TQTaggable.cxx:1199
 TQTaggable.cxx:1200
 TQTaggable.cxx:1201
 TQTaggable.cxx:1202
 TQTaggable.cxx:1203
 TQTaggable.cxx:1204
 TQTaggable.cxx:1205
 TQTaggable.cxx:1206
 TQTaggable.cxx:1207
 TQTaggable.cxx:1208
 TQTaggable.cxx:1209
 TQTaggable.cxx:1210
 TQTaggable.cxx:1211
 TQTaggable.cxx:1212
 TQTaggable.cxx:1213
 TQTaggable.cxx:1214
 TQTaggable.cxx:1215
 TQTaggable.cxx:1216
 TQTaggable.cxx:1217
 TQTaggable.cxx:1218
 TQTaggable.cxx:1219
 TQTaggable.cxx:1220
 TQTaggable.cxx:1221
 TQTaggable.cxx:1222
 TQTaggable.cxx:1223
 TQTaggable.cxx:1224
 TQTaggable.cxx:1225
 TQTaggable.cxx:1226
 TQTaggable.cxx:1227
 TQTaggable.cxx:1228
 TQTaggable.cxx:1229
 TQTaggable.cxx:1230
 TQTaggable.cxx:1231
 TQTaggable.cxx:1232
 TQTaggable.cxx:1233
 TQTaggable.cxx:1234
 TQTaggable.cxx:1235
 TQTaggable.cxx:1236
 TQTaggable.cxx:1237
 TQTaggable.cxx:1238
 TQTaggable.cxx:1239
 TQTaggable.cxx:1240
 TQTaggable.cxx:1241
 TQTaggable.cxx:1242
 TQTaggable.cxx:1243
 TQTaggable.cxx:1244
 TQTaggable.cxx:1245
 TQTaggable.cxx:1246
 TQTaggable.cxx:1247
 TQTaggable.cxx:1248
 TQTaggable.cxx:1249
 TQTaggable.cxx:1250
 TQTaggable.cxx:1251
 TQTaggable.cxx:1252
 TQTaggable.cxx:1253
 TQTaggable.cxx:1254
 TQTaggable.cxx:1255
 TQTaggable.cxx:1256
 TQTaggable.cxx:1257
 TQTaggable.cxx:1258
 TQTaggable.cxx:1259
 TQTaggable.cxx:1260
 TQTaggable.cxx:1261
 TQTaggable.cxx:1262
 TQTaggable.cxx:1263
 TQTaggable.cxx:1264
 TQTaggable.cxx:1265
 TQTaggable.cxx:1266
 TQTaggable.cxx:1267
 TQTaggable.cxx:1268
 TQTaggable.cxx:1269
 TQTaggable.cxx:1270
 TQTaggable.cxx:1271
 TQTaggable.cxx:1272
 TQTaggable.cxx:1273
 TQTaggable.cxx:1274
 TQTaggable.cxx:1275
 TQTaggable.cxx:1276
 TQTaggable.cxx:1277
 TQTaggable.cxx:1278
 TQTaggable.cxx:1279
 TQTaggable.cxx:1280
 TQTaggable.cxx:1281
 TQTaggable.cxx:1282
 TQTaggable.cxx:1283
 TQTaggable.cxx:1284
 TQTaggable.cxx:1285
 TQTaggable.cxx:1286
 TQTaggable.cxx:1287
 TQTaggable.cxx:1288
 TQTaggable.cxx:1289
 TQTaggable.cxx:1290
 TQTaggable.cxx:1291
 TQTaggable.cxx:1292
 TQTaggable.cxx:1293
 TQTaggable.cxx:1294
 TQTaggable.cxx:1295
 TQTaggable.cxx:1296
 TQTaggable.cxx:1297
 TQTaggable.cxx:1298
 TQTaggable.cxx:1299
 TQTaggable.cxx:1300
 TQTaggable.cxx:1301
 TQTaggable.cxx:1302
 TQTaggable.cxx:1303
 TQTaggable.cxx:1304
 TQTaggable.cxx:1305
 TQTaggable.cxx:1306
 TQTaggable.cxx:1307
 TQTaggable.cxx:1308
 TQTaggable.cxx:1309
 TQTaggable.cxx:1310
 TQTaggable.cxx:1311
 TQTaggable.cxx:1312
 TQTaggable.cxx:1313
 TQTaggable.cxx:1314
 TQTaggable.cxx:1315
 TQTaggable.cxx:1316
 TQTaggable.cxx:1317
 TQTaggable.cxx:1318
 TQTaggable.cxx:1319
 TQTaggable.cxx:1320
 TQTaggable.cxx:1321
 TQTaggable.cxx:1322
 TQTaggable.cxx:1323
 TQTaggable.cxx:1324
 TQTaggable.cxx:1325
 TQTaggable.cxx:1326
 TQTaggable.cxx:1327
 TQTaggable.cxx:1328
 TQTaggable.cxx:1329
 TQTaggable.cxx:1330
 TQTaggable.cxx:1331
 TQTaggable.cxx:1332
 TQTaggable.cxx:1333
 TQTaggable.cxx:1334
 TQTaggable.cxx:1335
 TQTaggable.cxx:1336
 TQTaggable.cxx:1337
 TQTaggable.cxx:1338
 TQTaggable.cxx:1339
 TQTaggable.cxx:1340
 TQTaggable.cxx:1341
 TQTaggable.cxx:1342
 TQTaggable.cxx:1343
 TQTaggable.cxx:1344
 TQTaggable.cxx:1345
 TQTaggable.cxx:1346
 TQTaggable.cxx:1347
 TQTaggable.cxx:1348
 TQTaggable.cxx:1349
 TQTaggable.cxx:1350
 TQTaggable.cxx:1351
 TQTaggable.cxx:1352
 TQTaggable.cxx:1353
 TQTaggable.cxx:1354
 TQTaggable.cxx:1355
 TQTaggable.cxx:1356
 TQTaggable.cxx:1357
 TQTaggable.cxx:1358
 TQTaggable.cxx:1359
 TQTaggable.cxx:1360
 TQTaggable.cxx:1361
 TQTaggable.cxx:1362
 TQTaggable.cxx:1363
 TQTaggable.cxx:1364
 TQTaggable.cxx:1365
 TQTaggable.cxx:1366
 TQTaggable.cxx:1367
 TQTaggable.cxx:1368
 TQTaggable.cxx:1369
 TQTaggable.cxx:1370
 TQTaggable.cxx:1371
 TQTaggable.cxx:1372
 TQTaggable.cxx:1373
 TQTaggable.cxx:1374
 TQTaggable.cxx:1375
 TQTaggable.cxx:1376
 TQTaggable.cxx:1377
 TQTaggable.cxx:1378
 TQTaggable.cxx:1379
 TQTaggable.cxx:1380
 TQTaggable.cxx:1381
 TQTaggable.cxx:1382
 TQTaggable.cxx:1383
 TQTaggable.cxx:1384
 TQTaggable.cxx:1385
 TQTaggable.cxx:1386
 TQTaggable.cxx:1387
 TQTaggable.cxx:1388
 TQTaggable.cxx:1389
 TQTaggable.cxx:1390
 TQTaggable.cxx:1391
 TQTaggable.cxx:1392
 TQTaggable.cxx:1393
 TQTaggable.cxx:1394
 TQTaggable.cxx:1395
 TQTaggable.cxx:1396
 TQTaggable.cxx:1397
 TQTaggable.cxx:1398
 TQTaggable.cxx:1399
 TQTaggable.cxx:1400
 TQTaggable.cxx:1401
 TQTaggable.cxx:1402
 TQTaggable.cxx:1403
 TQTaggable.cxx:1404
 TQTaggable.cxx:1405
 TQTaggable.cxx:1406
 TQTaggable.cxx:1407
 TQTaggable.cxx:1408
 TQTaggable.cxx:1409
 TQTaggable.cxx:1410
 TQTaggable.cxx:1411
 TQTaggable.cxx:1412
 TQTaggable.cxx:1413
 TQTaggable.cxx:1414
 TQTaggable.cxx:1415
 TQTaggable.cxx:1416
 TQTaggable.cxx:1417
 TQTaggable.cxx:1418
 TQTaggable.cxx:1419
 TQTaggable.cxx:1420
 TQTaggable.cxx:1421
 TQTaggable.cxx:1422
 TQTaggable.cxx:1423
 TQTaggable.cxx:1424
 TQTaggable.cxx:1425
 TQTaggable.cxx:1426
 TQTaggable.cxx:1427
 TQTaggable.cxx:1428
 TQTaggable.cxx:1429
 TQTaggable.cxx:1430
 TQTaggable.cxx:1431
 TQTaggable.cxx:1432
 TQTaggable.cxx:1433
 TQTaggable.cxx:1434
 TQTaggable.cxx:1435
 TQTaggable.cxx:1436
 TQTaggable.cxx:1437
 TQTaggable.cxx:1438
 TQTaggable.cxx:1439
 TQTaggable.cxx:1440
 TQTaggable.cxx:1441
 TQTaggable.cxx:1442
 TQTaggable.cxx:1443
 TQTaggable.cxx:1444
 TQTaggable.cxx:1445
 TQTaggable.cxx:1446
 TQTaggable.cxx:1447
 TQTaggable.cxx:1448
 TQTaggable.cxx:1449
 TQTaggable.cxx:1450
 TQTaggable.cxx:1451
 TQTaggable.cxx:1452
 TQTaggable.cxx:1453
 TQTaggable.cxx:1454
 TQTaggable.cxx:1455
 TQTaggable.cxx:1456
 TQTaggable.cxx:1457
 TQTaggable.cxx:1458
 TQTaggable.cxx:1459
 TQTaggable.cxx:1460
 TQTaggable.cxx:1461
 TQTaggable.cxx:1462
 TQTaggable.cxx:1463
 TQTaggable.cxx:1464
 TQTaggable.cxx:1465
 TQTaggable.cxx:1466
 TQTaggable.cxx:1467
 TQTaggable.cxx:1468
 TQTaggable.cxx:1469
 TQTaggable.cxx:1470
 TQTaggable.cxx:1471
 TQTaggable.cxx:1472
 TQTaggable.cxx:1473
 TQTaggable.cxx:1474
 TQTaggable.cxx:1475
 TQTaggable.cxx:1476
 TQTaggable.cxx:1477
 TQTaggable.cxx:1478
 TQTaggable.cxx:1479
 TQTaggable.cxx:1480
 TQTaggable.cxx:1481
 TQTaggable.cxx:1482
 TQTaggable.cxx:1483
 TQTaggable.cxx:1484
 TQTaggable.cxx:1485
 TQTaggable.cxx:1486
 TQTaggable.cxx:1487
 TQTaggable.cxx:1488
 TQTaggable.cxx:1489
 TQTaggable.cxx:1490
 TQTaggable.cxx:1491
 TQTaggable.cxx:1492
 TQTaggable.cxx:1493
 TQTaggable.cxx:1494
 TQTaggable.cxx:1495
 TQTaggable.cxx:1496
 TQTaggable.cxx:1497
 TQTaggable.cxx:1498
 TQTaggable.cxx:1499
 TQTaggable.cxx:1500
 TQTaggable.cxx:1501
 TQTaggable.cxx:1502
 TQTaggable.cxx:1503
 TQTaggable.cxx:1504
 TQTaggable.cxx:1505
 TQTaggable.cxx:1506
 TQTaggable.cxx:1507
 TQTaggable.cxx:1508
 TQTaggable.cxx:1509
 TQTaggable.cxx:1510
 TQTaggable.cxx:1511
 TQTaggable.cxx:1512
 TQTaggable.cxx:1513
 TQTaggable.cxx:1514
 TQTaggable.cxx:1515
 TQTaggable.cxx:1516
 TQTaggable.cxx:1517
 TQTaggable.cxx:1518
 TQTaggable.cxx:1519
 TQTaggable.cxx:1520
 TQTaggable.cxx:1521
 TQTaggable.cxx:1522
 TQTaggable.cxx:1523
 TQTaggable.cxx:1524
 TQTaggable.cxx:1525
 TQTaggable.cxx:1526
 TQTaggable.cxx:1527
 TQTaggable.cxx:1528
 TQTaggable.cxx:1529
 TQTaggable.cxx:1530
 TQTaggable.cxx:1531
 TQTaggable.cxx:1532
 TQTaggable.cxx:1533
 TQTaggable.cxx:1534
 TQTaggable.cxx:1535
 TQTaggable.cxx:1536
 TQTaggable.cxx:1537
 TQTaggable.cxx:1538
 TQTaggable.cxx:1539
 TQTaggable.cxx:1540
 TQTaggable.cxx:1541
 TQTaggable.cxx:1542
 TQTaggable.cxx:1543
 TQTaggable.cxx:1544
 TQTaggable.cxx:1545
 TQTaggable.cxx:1546
 TQTaggable.cxx:1547
 TQTaggable.cxx:1548
 TQTaggable.cxx:1549
 TQTaggable.cxx:1550
 TQTaggable.cxx:1551
 TQTaggable.cxx:1552
 TQTaggable.cxx:1553
 TQTaggable.cxx:1554
 TQTaggable.cxx:1555
 TQTaggable.cxx:1556
 TQTaggable.cxx:1557
 TQTaggable.cxx:1558
 TQTaggable.cxx:1559
 TQTaggable.cxx:1560
 TQTaggable.cxx:1561
 TQTaggable.cxx:1562
 TQTaggable.cxx:1563
 TQTaggable.cxx:1564
 TQTaggable.cxx:1565
 TQTaggable.cxx:1566
 TQTaggable.cxx:1567
 TQTaggable.cxx:1568
 TQTaggable.cxx:1569
 TQTaggable.cxx:1570
 TQTaggable.cxx:1571
 TQTaggable.cxx:1572
 TQTaggable.cxx:1573
 TQTaggable.cxx:1574
 TQTaggable.cxx:1575
 TQTaggable.cxx:1576
 TQTaggable.cxx:1577
 TQTaggable.cxx:1578
 TQTaggable.cxx:1579
 TQTaggable.cxx:1580
 TQTaggable.cxx:1581
 TQTaggable.cxx:1582
 TQTaggable.cxx:1583
 TQTaggable.cxx:1584
 TQTaggable.cxx:1585
 TQTaggable.cxx:1586
 TQTaggable.cxx:1587
 TQTaggable.cxx:1588
 TQTaggable.cxx:1589
 TQTaggable.cxx:1590
 TQTaggable.cxx:1591
 TQTaggable.cxx:1592
 TQTaggable.cxx:1593
 TQTaggable.cxx:1594
 TQTaggable.cxx:1595
 TQTaggable.cxx:1596
 TQTaggable.cxx:1597
 TQTaggable.cxx:1598
 TQTaggable.cxx:1599
 TQTaggable.cxx:1600
 TQTaggable.cxx:1601
 TQTaggable.cxx:1602
 TQTaggable.cxx:1603
 TQTaggable.cxx:1604
 TQTaggable.cxx:1605
 TQTaggable.cxx:1606
 TQTaggable.cxx:1607
 TQTaggable.cxx:1608
 TQTaggable.cxx:1609
 TQTaggable.cxx:1610
 TQTaggable.cxx:1611
 TQTaggable.cxx:1612
 TQTaggable.cxx:1613
 TQTaggable.cxx:1614
 TQTaggable.cxx:1615
 TQTaggable.cxx:1616
 TQTaggable.cxx:1617
 TQTaggable.cxx:1618
 TQTaggable.cxx:1619
 TQTaggable.cxx:1620
 TQTaggable.cxx:1621
 TQTaggable.cxx:1622
 TQTaggable.cxx:1623
 TQTaggable.cxx:1624
 TQTaggable.cxx:1625
 TQTaggable.cxx:1626
 TQTaggable.cxx:1627
 TQTaggable.cxx:1628
 TQTaggable.cxx:1629
 TQTaggable.cxx:1630
 TQTaggable.cxx:1631
 TQTaggable.cxx:1632
 TQTaggable.cxx:1633
 TQTaggable.cxx:1634
 TQTaggable.cxx:1635
 TQTaggable.cxx:1636
 TQTaggable.cxx:1637
 TQTaggable.cxx:1638
 TQTaggable.cxx:1639
 TQTaggable.cxx:1640
 TQTaggable.cxx:1641
 TQTaggable.cxx:1642
 TQTaggable.cxx:1643
 TQTaggable.cxx:1644
 TQTaggable.cxx:1645
 TQTaggable.cxx:1646
 TQTaggable.cxx:1647
 TQTaggable.cxx:1648
 TQTaggable.cxx:1649
 TQTaggable.cxx:1650
 TQTaggable.cxx:1651
 TQTaggable.cxx:1652
 TQTaggable.cxx:1653
 TQTaggable.cxx:1654
 TQTaggable.cxx:1655
 TQTaggable.cxx:1656
 TQTaggable.cxx:1657
 TQTaggable.cxx:1658
 TQTaggable.cxx:1659
 TQTaggable.cxx:1660
 TQTaggable.cxx:1661
 TQTaggable.cxx:1662
 TQTaggable.cxx:1663
 TQTaggable.cxx:1664
 TQTaggable.cxx:1665
 TQTaggable.cxx:1666
 TQTaggable.cxx:1667
 TQTaggable.cxx:1668
 TQTaggable.cxx:1669
 TQTaggable.cxx:1670
 TQTaggable.cxx:1671
 TQTaggable.cxx:1672
 TQTaggable.cxx:1673
 TQTaggable.cxx:1674
 TQTaggable.cxx:1675
 TQTaggable.cxx:1676
 TQTaggable.cxx:1677
 TQTaggable.cxx:1678
 TQTaggable.cxx:1679
 TQTaggable.cxx:1680
 TQTaggable.cxx:1681
 TQTaggable.cxx:1682
 TQTaggable.cxx:1683
 TQTaggable.cxx:1684
 TQTaggable.cxx:1685
 TQTaggable.cxx:1686
 TQTaggable.cxx:1687
 TQTaggable.cxx:1688
 TQTaggable.cxx:1689
 TQTaggable.cxx:1690
 TQTaggable.cxx:1691
 TQTaggable.cxx:1692
 TQTaggable.cxx:1693
 TQTaggable.cxx:1694
 TQTaggable.cxx:1695
 TQTaggable.cxx:1696
 TQTaggable.cxx:1697
 TQTaggable.cxx:1698
 TQTaggable.cxx:1699
 TQTaggable.cxx:1700
 TQTaggable.cxx:1701
 TQTaggable.cxx:1702
 TQTaggable.cxx:1703
 TQTaggable.cxx:1704
 TQTaggable.cxx:1705
 TQTaggable.cxx:1706
 TQTaggable.cxx:1707
 TQTaggable.cxx:1708
 TQTaggable.cxx:1709
 TQTaggable.cxx:1710
 TQTaggable.cxx:1711
 TQTaggable.cxx:1712
 TQTaggable.cxx:1713
 TQTaggable.cxx:1714
 TQTaggable.cxx:1715
 TQTaggable.cxx:1716
 TQTaggable.cxx:1717
 TQTaggable.cxx:1718
 TQTaggable.cxx:1719
 TQTaggable.cxx:1720
 TQTaggable.cxx:1721
 TQTaggable.cxx:1722
 TQTaggable.cxx:1723
 TQTaggable.cxx:1724
 TQTaggable.cxx:1725
 TQTaggable.cxx:1726
 TQTaggable.cxx:1727
 TQTaggable.cxx:1728
 TQTaggable.cxx:1729
 TQTaggable.cxx:1730
 TQTaggable.cxx:1731
 TQTaggable.cxx:1732
 TQTaggable.cxx:1733
 TQTaggable.cxx:1734
 TQTaggable.cxx:1735
 TQTaggable.cxx:1736
 TQTaggable.cxx:1737
 TQTaggable.cxx:1738
 TQTaggable.cxx:1739
 TQTaggable.cxx:1740
 TQTaggable.cxx:1741
 TQTaggable.cxx:1742
 TQTaggable.cxx:1743
 TQTaggable.cxx:1744
 TQTaggable.cxx:1745
 TQTaggable.cxx:1746
 TQTaggable.cxx:1747
 TQTaggable.cxx:1748
 TQTaggable.cxx:1749
 TQTaggable.cxx:1750
 TQTaggable.cxx:1751
 TQTaggable.cxx:1752
 TQTaggable.cxx:1753
 TQTaggable.cxx:1754
 TQTaggable.cxx:1755
 TQTaggable.cxx:1756
 TQTaggable.cxx:1757
 TQTaggable.cxx:1758
 TQTaggable.cxx:1759
 TQTaggable.cxx:1760
 TQTaggable.cxx:1761
 TQTaggable.cxx:1762
 TQTaggable.cxx:1763
 TQTaggable.cxx:1764
 TQTaggable.cxx:1765
 TQTaggable.cxx:1766
 TQTaggable.cxx:1767
 TQTaggable.cxx:1768
 TQTaggable.cxx:1769
 TQTaggable.cxx:1770
 TQTaggable.cxx:1771
 TQTaggable.cxx:1772
 TQTaggable.cxx:1773
 TQTaggable.cxx:1774
 TQTaggable.cxx:1775
 TQTaggable.cxx:1776
 TQTaggable.cxx:1777
 TQTaggable.cxx:1778
 TQTaggable.cxx:1779
 TQTaggable.cxx:1780
 TQTaggable.cxx:1781
 TQTaggable.cxx:1782
 TQTaggable.cxx:1783
 TQTaggable.cxx:1784
 TQTaggable.cxx:1785
 TQTaggable.cxx:1786
 TQTaggable.cxx:1787
 TQTaggable.cxx:1788
 TQTaggable.cxx:1789
 TQTaggable.cxx:1790
 TQTaggable.cxx:1791
 TQTaggable.cxx:1792
 TQTaggable.cxx:1793
 TQTaggable.cxx:1794
 TQTaggable.cxx:1795
 TQTaggable.cxx:1796
 TQTaggable.cxx:1797
 TQTaggable.cxx:1798
 TQTaggable.cxx:1799
 TQTaggable.cxx:1800
 TQTaggable.cxx:1801
 TQTaggable.cxx:1802
 TQTaggable.cxx:1803
 TQTaggable.cxx:1804
 TQTaggable.cxx:1805
 TQTaggable.cxx:1806
 TQTaggable.cxx:1807
 TQTaggable.cxx:1808
 TQTaggable.cxx:1809
 TQTaggable.cxx:1810
 TQTaggable.cxx:1811
 TQTaggable.cxx:1812
 TQTaggable.cxx:1813
 TQTaggable.cxx:1814
 TQTaggable.cxx:1815
 TQTaggable.cxx:1816
 TQTaggable.cxx:1817
 TQTaggable.cxx:1818
 TQTaggable.cxx:1819
 TQTaggable.cxx:1820
 TQTaggable.cxx:1821
 TQTaggable.cxx:1822
 TQTaggable.cxx:1823
 TQTaggable.cxx:1824
 TQTaggable.cxx:1825
 TQTaggable.cxx:1826
 TQTaggable.cxx:1827
 TQTaggable.cxx:1828
 TQTaggable.cxx:1829
 TQTaggable.cxx:1830
 TQTaggable.cxx:1831
 TQTaggable.cxx:1832
 TQTaggable.cxx:1833
 TQTaggable.cxx:1834
 TQTaggable.cxx:1835
 TQTaggable.cxx:1836
 TQTaggable.cxx:1837
 TQTaggable.cxx:1838
 TQTaggable.cxx:1839
 TQTaggable.cxx:1840
 TQTaggable.cxx:1841
 TQTaggable.cxx:1842
 TQTaggable.cxx:1843
 TQTaggable.cxx:1844
 TQTaggable.cxx:1845
 TQTaggable.cxx:1846
 TQTaggable.cxx:1847
 TQTaggable.cxx:1848
 TQTaggable.cxx:1849
 TQTaggable.cxx:1850
 TQTaggable.cxx:1851
 TQTaggable.cxx:1852
 TQTaggable.cxx:1853
 TQTaggable.cxx:1854
 TQTaggable.cxx:1855
 TQTaggable.cxx:1856
 TQTaggable.cxx:1857
 TQTaggable.cxx:1858
 TQTaggable.cxx:1859
 TQTaggable.cxx:1860
 TQTaggable.cxx:1861
 TQTaggable.cxx:1862
 TQTaggable.cxx:1863
 TQTaggable.cxx:1864
 TQTaggable.cxx:1865
 TQTaggable.cxx:1866
 TQTaggable.cxx:1867
 TQTaggable.cxx:1868
 TQTaggable.cxx:1869
 TQTaggable.cxx:1870
 TQTaggable.cxx:1871
 TQTaggable.cxx:1872
 TQTaggable.cxx:1873
 TQTaggable.cxx:1874
 TQTaggable.cxx:1875
 TQTaggable.cxx:1876
 TQTaggable.cxx:1877
 TQTaggable.cxx:1878
 TQTaggable.cxx:1879
 TQTaggable.cxx:1880
 TQTaggable.cxx:1881
 TQTaggable.cxx:1882
 TQTaggable.cxx:1883
 TQTaggable.cxx:1884
 TQTaggable.cxx:1885
 TQTaggable.cxx:1886
 TQTaggable.cxx:1887
 TQTaggable.cxx:1888
 TQTaggable.cxx:1889
 TQTaggable.cxx:1890
 TQTaggable.cxx:1891
 TQTaggable.cxx:1892
 TQTaggable.cxx:1893
 TQTaggable.cxx:1894
 TQTaggable.cxx:1895
 TQTaggable.cxx:1896
 TQTaggable.cxx:1897
 TQTaggable.cxx:1898
 TQTaggable.cxx:1899
 TQTaggable.cxx:1900
 TQTaggable.cxx:1901
 TQTaggable.cxx:1902
 TQTaggable.cxx:1903
 TQTaggable.cxx:1904
 TQTaggable.cxx:1905
 TQTaggable.cxx:1906
 TQTaggable.cxx:1907
 TQTaggable.cxx:1908
 TQTaggable.cxx:1909
 TQTaggable.cxx:1910
 TQTaggable.cxx:1911
 TQTaggable.cxx:1912
 TQTaggable.cxx:1913
 TQTaggable.cxx:1914
 TQTaggable.cxx:1915
 TQTaggable.cxx:1916
 TQTaggable.cxx:1917
 TQTaggable.cxx:1918
 TQTaggable.cxx:1919
 TQTaggable.cxx:1920
 TQTaggable.cxx:1921
 TQTaggable.cxx:1922
 TQTaggable.cxx:1923
 TQTaggable.cxx:1924
 TQTaggable.cxx:1925
 TQTaggable.cxx:1926
 TQTaggable.cxx:1927
 TQTaggable.cxx:1928
 TQTaggable.cxx:1929
 TQTaggable.cxx:1930
 TQTaggable.cxx:1931
 TQTaggable.cxx:1932
 TQTaggable.cxx:1933
 TQTaggable.cxx:1934
 TQTaggable.cxx:1935
 TQTaggable.cxx:1936
 TQTaggable.cxx:1937
 TQTaggable.cxx:1938
 TQTaggable.cxx:1939
 TQTaggable.cxx:1940
 TQTaggable.cxx:1941
 TQTaggable.cxx:1942
 TQTaggable.cxx:1943
 TQTaggable.cxx:1944
 TQTaggable.cxx:1945
 TQTaggable.cxx:1946
 TQTaggable.cxx:1947
 TQTaggable.cxx:1948
 TQTaggable.cxx:1949
 TQTaggable.cxx:1950
 TQTaggable.cxx:1951
 TQTaggable.cxx:1952
 TQTaggable.cxx:1953
 TQTaggable.cxx:1954
 TQTaggable.cxx:1955
 TQTaggable.cxx:1956
 TQTaggable.cxx:1957
 TQTaggable.cxx:1958
 TQTaggable.cxx:1959
 TQTaggable.cxx:1960
 TQTaggable.cxx:1961
 TQTaggable.cxx:1962
 TQTaggable.cxx:1963
 TQTaggable.cxx:1964
 TQTaggable.cxx:1965
 TQTaggable.cxx:1966
 TQTaggable.cxx:1967
 TQTaggable.cxx:1968
 TQTaggable.cxx:1969
 TQTaggable.cxx:1970
 TQTaggable.cxx:1971
 TQTaggable.cxx:1972
 TQTaggable.cxx:1973
 TQTaggable.cxx:1974
 TQTaggable.cxx:1975
 TQTaggable.cxx:1976
 TQTaggable.cxx:1977
 TQTaggable.cxx:1978
 TQTaggable.cxx:1979
 TQTaggable.cxx:1980
 TQTaggable.cxx:1981
 TQTaggable.cxx:1982
 TQTaggable.cxx:1983
 TQTaggable.cxx:1984
 TQTaggable.cxx:1985
 TQTaggable.cxx:1986
 TQTaggable.cxx:1987
 TQTaggable.cxx:1988
 TQTaggable.cxx:1989
 TQTaggable.cxx:1990
 TQTaggable.cxx:1991
 TQTaggable.cxx:1992
 TQTaggable.cxx:1993
 TQTaggable.cxx:1994
 TQTaggable.cxx:1995
 TQTaggable.cxx:1996
 TQTaggable.cxx:1997
 TQTaggable.cxx:1998
 TQTaggable.cxx:1999
 TQTaggable.cxx:2000
 TQTaggable.cxx:2001
 TQTaggable.cxx:2002
 TQTaggable.cxx:2003
 TQTaggable.cxx:2004
 TQTaggable.cxx:2005
 TQTaggable.cxx:2006
 TQTaggable.cxx:2007
 TQTaggable.cxx:2008
 TQTaggable.cxx:2009
 TQTaggable.cxx:2010
 TQTaggable.cxx:2011
 TQTaggable.cxx:2012
 TQTaggable.cxx:2013
 TQTaggable.cxx:2014
 TQTaggable.cxx:2015
 TQTaggable.cxx:2016
 TQTaggable.cxx:2017
 TQTaggable.cxx:2018
 TQTaggable.cxx:2019
 TQTaggable.cxx:2020
 TQTaggable.cxx:2021
 TQTaggable.cxx:2022
 TQTaggable.cxx:2023
 TQTaggable.cxx:2024
 TQTaggable.cxx:2025
 TQTaggable.cxx:2026
 TQTaggable.cxx:2027
 TQTaggable.cxx:2028
 TQTaggable.cxx:2029
 TQTaggable.cxx:2030
 TQTaggable.cxx:2031
 TQTaggable.cxx:2032
 TQTaggable.cxx:2033
 TQTaggable.cxx:2034
 TQTaggable.cxx:2035
 TQTaggable.cxx:2036
 TQTaggable.cxx:2037
 TQTaggable.cxx:2038
 TQTaggable.cxx:2039
 TQTaggable.cxx:2040
 TQTaggable.cxx:2041
 TQTaggable.cxx:2042
 TQTaggable.cxx:2043
 TQTaggable.cxx:2044
 TQTaggable.cxx:2045
 TQTaggable.cxx:2046
 TQTaggable.cxx:2047
 TQTaggable.cxx:2048
 TQTaggable.cxx:2049
 TQTaggable.cxx:2050
 TQTaggable.cxx:2051
 TQTaggable.cxx:2052
 TQTaggable.cxx:2053
 TQTaggable.cxx:2054
 TQTaggable.cxx:2055
 TQTaggable.cxx:2056
 TQTaggable.cxx:2057
 TQTaggable.cxx:2058
 TQTaggable.cxx:2059
 TQTaggable.cxx:2060
 TQTaggable.cxx:2061
 TQTaggable.cxx:2062
 TQTaggable.cxx:2063
 TQTaggable.cxx:2064
 TQTaggable.cxx:2065
 TQTaggable.cxx:2066
 TQTaggable.cxx:2067
 TQTaggable.cxx:2068
 TQTaggable.cxx:2069
 TQTaggable.cxx:2070
 TQTaggable.cxx:2071
 TQTaggable.cxx:2072
 TQTaggable.cxx:2073
 TQTaggable.cxx:2074
 TQTaggable.cxx:2075
 TQTaggable.cxx:2076
 TQTaggable.cxx:2077
 TQTaggable.cxx:2078
 TQTaggable.cxx:2079
 TQTaggable.cxx:2080
 TQTaggable.cxx:2081
 TQTaggable.cxx:2082
 TQTaggable.cxx:2083
 TQTaggable.cxx:2084
 TQTaggable.cxx:2085
 TQTaggable.cxx:2086
 TQTaggable.cxx:2087
 TQTaggable.cxx:2088
 TQTaggable.cxx:2089
 TQTaggable.cxx:2090
 TQTaggable.cxx:2091
 TQTaggable.cxx:2092
 TQTaggable.cxx:2093
 TQTaggable.cxx:2094
 TQTaggable.cxx:2095
 TQTaggable.cxx:2096
 TQTaggable.cxx:2097
 TQTaggable.cxx:2098
 TQTaggable.cxx:2099
 TQTaggable.cxx:2100
 TQTaggable.cxx:2101
 TQTaggable.cxx:2102
 TQTaggable.cxx:2103
 TQTaggable.cxx:2104
 TQTaggable.cxx:2105
 TQTaggable.cxx:2106
 TQTaggable.cxx:2107
 TQTaggable.cxx:2108
 TQTaggable.cxx:2109
 TQTaggable.cxx:2110
 TQTaggable.cxx:2111
 TQTaggable.cxx:2112
 TQTaggable.cxx:2113
 TQTaggable.cxx:2114
 TQTaggable.cxx:2115
 TQTaggable.cxx:2116
 TQTaggable.cxx:2117
 TQTaggable.cxx:2118
 TQTaggable.cxx:2119
 TQTaggable.cxx:2120
 TQTaggable.cxx:2121
 TQTaggable.cxx:2122
 TQTaggable.cxx:2123
 TQTaggable.cxx:2124
 TQTaggable.cxx:2125
 TQTaggable.cxx:2126
 TQTaggable.cxx:2127
 TQTaggable.cxx:2128
 TQTaggable.cxx:2129
 TQTaggable.cxx:2130
 TQTaggable.cxx:2131
 TQTaggable.cxx:2132
 TQTaggable.cxx:2133
 TQTaggable.cxx:2134
 TQTaggable.cxx:2135
 TQTaggable.cxx:2136
 TQTaggable.cxx:2137
 TQTaggable.cxx:2138
 TQTaggable.cxx:2139
 TQTaggable.cxx:2140
 TQTaggable.cxx:2141
 TQTaggable.cxx:2142
 TQTaggable.cxx:2143
 TQTaggable.cxx:2144
 TQTaggable.cxx:2145
 TQTaggable.cxx:2146
 TQTaggable.cxx:2147
 TQTaggable.cxx:2148
 TQTaggable.cxx:2149
 TQTaggable.cxx:2150
 TQTaggable.cxx:2151
 TQTaggable.cxx:2152
 TQTaggable.cxx:2153
 TQTaggable.cxx:2154
 TQTaggable.cxx:2155
 TQTaggable.cxx:2156
 TQTaggable.cxx:2157
 TQTaggable.cxx:2158
 TQTaggable.cxx:2159
 TQTaggable.cxx:2160
 TQTaggable.cxx:2161
 TQTaggable.cxx:2162
 TQTaggable.cxx:2163
 TQTaggable.cxx:2164
 TQTaggable.cxx:2165
 TQTaggable.cxx:2166
 TQTaggable.cxx:2167
 TQTaggable.cxx:2168
 TQTaggable.cxx:2169
 TQTaggable.cxx:2170
 TQTaggable.cxx:2171
 TQTaggable.cxx:2172
 TQTaggable.cxx:2173
 TQTaggable.cxx:2174
 TQTaggable.cxx:2175
 TQTaggable.cxx:2176
 TQTaggable.cxx:2177
 TQTaggable.cxx:2178
 TQTaggable.cxx:2179
 TQTaggable.cxx:2180
 TQTaggable.cxx:2181
 TQTaggable.cxx:2182
 TQTaggable.cxx:2183
 TQTaggable.cxx:2184
 TQTaggable.cxx:2185
 TQTaggable.cxx:2186
 TQTaggable.cxx:2187
 TQTaggable.cxx:2188
 TQTaggable.cxx:2189
 TQTaggable.cxx:2190
 TQTaggable.cxx:2191
 TQTaggable.cxx:2192
 TQTaggable.cxx:2193
 TQTaggable.cxx:2194
 TQTaggable.cxx:2195
 TQTaggable.cxx:2196
 TQTaggable.cxx:2197
 TQTaggable.cxx:2198
 TQTaggable.cxx:2199
 TQTaggable.cxx:2200
 TQTaggable.cxx:2201
 TQTaggable.cxx:2202
 TQTaggable.cxx:2203
 TQTaggable.cxx:2204
 TQTaggable.cxx:2205
 TQTaggable.cxx:2206
 TQTaggable.cxx:2207
 TQTaggable.cxx:2208
 TQTaggable.cxx:2209
 TQTaggable.cxx:2210
 TQTaggable.cxx:2211
 TQTaggable.cxx:2212
 TQTaggable.cxx:2213
 TQTaggable.cxx:2214
 TQTaggable.cxx:2215
 TQTaggable.cxx:2216
 TQTaggable.cxx:2217
 TQTaggable.cxx:2218
 TQTaggable.cxx:2219
 TQTaggable.cxx:2220
 TQTaggable.cxx:2221
 TQTaggable.cxx:2222
 TQTaggable.cxx:2223
 TQTaggable.cxx:2224
 TQTaggable.cxx:2225
 TQTaggable.cxx:2226
 TQTaggable.cxx:2227
 TQTaggable.cxx:2228
 TQTaggable.cxx:2229
 TQTaggable.cxx:2230
 TQTaggable.cxx:2231
 TQTaggable.cxx:2232
 TQTaggable.cxx:2233
 TQTaggable.cxx:2234
 TQTaggable.cxx:2235
 TQTaggable.cxx:2236
 TQTaggable.cxx:2237
 TQTaggable.cxx:2238
 TQTaggable.cxx:2239
 TQTaggable.cxx:2240
 TQTaggable.cxx:2241
 TQTaggable.cxx:2242
 TQTaggable.cxx:2243
 TQTaggable.cxx:2244
 TQTaggable.cxx:2245
 TQTaggable.cxx:2246
 TQTaggable.cxx:2247
 TQTaggable.cxx:2248
 TQTaggable.cxx:2249
 TQTaggable.cxx:2250
 TQTaggable.cxx:2251
 TQTaggable.cxx:2252
 TQTaggable.cxx:2253
 TQTaggable.cxx:2254
 TQTaggable.cxx:2255
 TQTaggable.cxx:2256
 TQTaggable.cxx:2257
 TQTaggable.cxx:2258
 TQTaggable.cxx:2259
 TQTaggable.cxx:2260
 TQTaggable.cxx:2261
 TQTaggable.cxx:2262
 TQTaggable.cxx:2263
 TQTaggable.cxx:2264
 TQTaggable.cxx:2265
 TQTaggable.cxx:2266
 TQTaggable.cxx:2267
 TQTaggable.cxx:2268
 TQTaggable.cxx:2269
 TQTaggable.cxx:2270
 TQTaggable.cxx:2271
 TQTaggable.cxx:2272
 TQTaggable.cxx:2273
 TQTaggable.cxx:2274
 TQTaggable.cxx:2275
 TQTaggable.cxx:2276
 TQTaggable.cxx:2277
 TQTaggable.cxx:2278
 TQTaggable.cxx:2279
 TQTaggable.cxx:2280
 TQTaggable.cxx:2281
 TQTaggable.cxx:2282
 TQTaggable.cxx:2283
 TQTaggable.cxx:2284
 TQTaggable.cxx:2285
 TQTaggable.cxx:2286
 TQTaggable.cxx:2287
 TQTaggable.cxx:2288
 TQTaggable.cxx:2289
 TQTaggable.cxx:2290
 TQTaggable.cxx:2291
 TQTaggable.cxx:2292
 TQTaggable.cxx:2293
 TQTaggable.cxx:2294
 TQTaggable.cxx:2295
 TQTaggable.cxx:2296
 TQTaggable.cxx:2297
 TQTaggable.cxx:2298
 TQTaggable.cxx:2299
 TQTaggable.cxx:2300
 TQTaggable.cxx:2301
 TQTaggable.cxx:2302
 TQTaggable.cxx:2303
 TQTaggable.cxx:2304
 TQTaggable.cxx:2305
 TQTaggable.cxx:2306
 TQTaggable.cxx:2307
 TQTaggable.cxx:2308
 TQTaggable.cxx:2309
 TQTaggable.cxx:2310
 TQTaggable.cxx:2311
 TQTaggable.cxx:2312
 TQTaggable.cxx:2313
 TQTaggable.cxx:2314
 TQTaggable.cxx:2315
 TQTaggable.cxx:2316
 TQTaggable.cxx:2317
 TQTaggable.cxx:2318
 TQTaggable.cxx:2319
 TQTaggable.cxx:2320
 TQTaggable.cxx:2321
 TQTaggable.cxx:2322
 TQTaggable.cxx:2323
 TQTaggable.cxx:2324
 TQTaggable.cxx:2325
 TQTaggable.cxx:2326
 TQTaggable.cxx:2327
 TQTaggable.cxx:2328
 TQTaggable.cxx:2329
 TQTaggable.cxx:2330
 TQTaggable.cxx:2331
 TQTaggable.cxx:2332
 TQTaggable.cxx:2333
 TQTaggable.cxx:2334
 TQTaggable.cxx:2335
 TQTaggable.cxx:2336
 TQTaggable.cxx:2337
 TQTaggable.cxx:2338
 TQTaggable.cxx:2339
 TQTaggable.cxx:2340
 TQTaggable.cxx:2341
 TQTaggable.cxx:2342
 TQTaggable.cxx:2343
 TQTaggable.cxx:2344
 TQTaggable.cxx:2345
 TQTaggable.cxx:2346
 TQTaggable.cxx:2347
 TQTaggable.cxx:2348
 TQTaggable.cxx:2349
 TQTaggable.cxx:2350
 TQTaggable.cxx:2351
 TQTaggable.cxx:2352
 TQTaggable.cxx:2353
 TQTaggable.cxx:2354
 TQTaggable.cxx:2355
 TQTaggable.cxx:2356
 TQTaggable.cxx:2357
 TQTaggable.cxx:2358
 TQTaggable.cxx:2359
 TQTaggable.cxx:2360
 TQTaggable.cxx:2361
 TQTaggable.cxx:2362
 TQTaggable.cxx:2363
 TQTaggable.cxx:2364
 TQTaggable.cxx:2365
 TQTaggable.cxx:2366
 TQTaggable.cxx:2367
 TQTaggable.cxx:2368
 TQTaggable.cxx:2369
 TQTaggable.cxx:2370
 TQTaggable.cxx:2371
 TQTaggable.cxx:2372
 TQTaggable.cxx:2373
 TQTaggable.cxx:2374
 TQTaggable.cxx:2375
 TQTaggable.cxx:2376
 TQTaggable.cxx:2377
 TQTaggable.cxx:2378
 TQTaggable.cxx:2379
 TQTaggable.cxx:2380
 TQTaggable.cxx:2381
 TQTaggable.cxx:2382
 TQTaggable.cxx:2383
 TQTaggable.cxx:2384
 TQTaggable.cxx:2385
 TQTaggable.cxx:2386
 TQTaggable.cxx:2387
 TQTaggable.cxx:2388
 TQTaggable.cxx:2389
 TQTaggable.cxx:2390
 TQTaggable.cxx:2391
 TQTaggable.cxx:2392
 TQTaggable.cxx:2393
 TQTaggable.cxx:2394
 TQTaggable.cxx:2395
 TQTaggable.cxx:2396
 TQTaggable.cxx:2397
 TQTaggable.cxx:2398
 TQTaggable.cxx:2399
 TQTaggable.cxx:2400
 TQTaggable.cxx:2401
 TQTaggable.cxx:2402
 TQTaggable.cxx:2403
 TQTaggable.cxx:2404
 TQTaggable.cxx:2405
 TQTaggable.cxx:2406
 TQTaggable.cxx:2407
 TQTaggable.cxx:2408
 TQTaggable.cxx:2409
 TQTaggable.cxx:2410
 TQTaggable.cxx:2411
 TQTaggable.cxx:2412
 TQTaggable.cxx:2413
 TQTaggable.cxx:2414
 TQTaggable.cxx:2415
 TQTaggable.cxx:2416
 TQTaggable.cxx:2417
 TQTaggable.cxx:2418
 TQTaggable.cxx:2419
 TQTaggable.cxx:2420
 TQTaggable.cxx:2421
 TQTaggable.cxx:2422
 TQTaggable.cxx:2423
 TQTaggable.cxx:2424
 TQTaggable.cxx:2425
 TQTaggable.cxx:2426
 TQTaggable.cxx:2427
 TQTaggable.cxx:2428
 TQTaggable.cxx:2429
 TQTaggable.cxx:2430
 TQTaggable.cxx:2431
 TQTaggable.cxx:2432
 TQTaggable.cxx:2433
 TQTaggable.cxx:2434
 TQTaggable.cxx:2435
 TQTaggable.cxx:2436
 TQTaggable.cxx:2437
 TQTaggable.cxx:2438
 TQTaggable.cxx:2439
 TQTaggable.cxx:2440
 TQTaggable.cxx:2441
 TQTaggable.cxx:2442
 TQTaggable.cxx:2443
 TQTaggable.cxx:2444
 TQTaggable.cxx:2445
 TQTaggable.cxx:2446
 TQTaggable.cxx:2447
 TQTaggable.cxx:2448
 TQTaggable.cxx:2449
 TQTaggable.cxx:2450
 TQTaggable.cxx:2451
 TQTaggable.cxx:2452
 TQTaggable.cxx:2453
 TQTaggable.cxx:2454
 TQTaggable.cxx:2455
 TQTaggable.cxx:2456
 TQTaggable.cxx:2457
 TQTaggable.cxx:2458
 TQTaggable.cxx:2459
 TQTaggable.cxx:2460
 TQTaggable.cxx:2461
 TQTaggable.cxx:2462
 TQTaggable.cxx:2463
 TQTaggable.cxx:2464
 TQTaggable.cxx:2465
 TQTaggable.cxx:2466
 TQTaggable.cxx:2467
 TQTaggable.cxx:2468
 TQTaggable.cxx:2469
 TQTaggable.cxx:2470
 TQTaggable.cxx:2471
 TQTaggable.cxx:2472
 TQTaggable.cxx:2473
 TQTaggable.cxx:2474
 TQTaggable.cxx:2475
 TQTaggable.cxx:2476
 TQTaggable.cxx:2477
 TQTaggable.cxx:2478
 TQTaggable.cxx:2479
 TQTaggable.cxx:2480
 TQTaggable.cxx:2481
 TQTaggable.cxx:2482
 TQTaggable.cxx:2483
 TQTaggable.cxx:2484
 TQTaggable.cxx:2485
 TQTaggable.cxx:2486
 TQTaggable.cxx:2487
 TQTaggable.cxx:2488
 TQTaggable.cxx:2489
 TQTaggable.cxx:2490
 TQTaggable.cxx:2491
 TQTaggable.cxx:2492
 TQTaggable.cxx:2493
 TQTaggable.cxx:2494
 TQTaggable.cxx:2495
 TQTaggable.cxx:2496
 TQTaggable.cxx:2497
 TQTaggable.cxx:2498
 TQTaggable.cxx:2499
 TQTaggable.cxx:2500
 TQTaggable.cxx:2501
 TQTaggable.cxx:2502
 TQTaggable.cxx:2503
 TQTaggable.cxx:2504
 TQTaggable.cxx:2505
 TQTaggable.cxx:2506
 TQTaggable.cxx:2507
 TQTaggable.cxx:2508
 TQTaggable.cxx:2509
 TQTaggable.cxx:2510
 TQTaggable.cxx:2511
 TQTaggable.cxx:2512
 TQTaggable.cxx:2513
 TQTaggable.cxx:2514
 TQTaggable.cxx:2515
 TQTaggable.cxx:2516
 TQTaggable.cxx:2517
 TQTaggable.cxx:2518
 TQTaggable.cxx:2519
 TQTaggable.cxx:2520
 TQTaggable.cxx:2521
 TQTaggable.cxx:2522
 TQTaggable.cxx:2523
 TQTaggable.cxx:2524
 TQTaggable.cxx:2525
 TQTaggable.cxx:2526
 TQTaggable.cxx:2527
 TQTaggable.cxx:2528
 TQTaggable.cxx:2529
 TQTaggable.cxx:2530
 TQTaggable.cxx:2531
 TQTaggable.cxx:2532
 TQTaggable.cxx:2533
 TQTaggable.cxx:2534
 TQTaggable.cxx:2535
 TQTaggable.cxx:2536
 TQTaggable.cxx:2537
 TQTaggable.cxx:2538
 TQTaggable.cxx:2539
 TQTaggable.cxx:2540
 TQTaggable.cxx:2541
 TQTaggable.cxx:2542
 TQTaggable.cxx:2543
 TQTaggable.cxx:2544
 TQTaggable.cxx:2545
 TQTaggable.cxx:2546
 TQTaggable.cxx:2547
 TQTaggable.cxx:2548
 TQTaggable.cxx:2549
 TQTaggable.cxx:2550
 TQTaggable.cxx:2551
 TQTaggable.cxx:2552
 TQTaggable.cxx:2553
 TQTaggable.cxx:2554
 TQTaggable.cxx:2555
 TQTaggable.cxx:2556
 TQTaggable.cxx:2557
 TQTaggable.cxx:2558
 TQTaggable.cxx:2559
 TQTaggable.cxx:2560
 TQTaggable.cxx:2561
 TQTaggable.cxx:2562
 TQTaggable.cxx:2563
 TQTaggable.cxx:2564
 TQTaggable.cxx:2565
 TQTaggable.cxx:2566
 TQTaggable.cxx:2567
 TQTaggable.cxx:2568
 TQTaggable.cxx:2569
 TQTaggable.cxx:2570
 TQTaggable.cxx:2571
 TQTaggable.cxx:2572
 TQTaggable.cxx:2573
 TQTaggable.cxx:2574
 TQTaggable.cxx:2575
 TQTaggable.cxx:2576
 TQTaggable.cxx:2577
 TQTaggable.cxx:2578
 TQTaggable.cxx:2579
 TQTaggable.cxx:2580
 TQTaggable.cxx:2581
 TQTaggable.cxx:2582
 TQTaggable.cxx:2583
 TQTaggable.cxx:2584
 TQTaggable.cxx:2585
 TQTaggable.cxx:2586
 TQTaggable.cxx:2587
 TQTaggable.cxx:2588
 TQTaggable.cxx:2589
 TQTaggable.cxx:2590
 TQTaggable.cxx:2591
 TQTaggable.cxx:2592
 TQTaggable.cxx:2593
 TQTaggable.cxx:2594
 TQTaggable.cxx:2595
 TQTaggable.cxx:2596
 TQTaggable.cxx:2597
 TQTaggable.cxx:2598
 TQTaggable.cxx:2599
 TQTaggable.cxx:2600
 TQTaggable.cxx:2601
 TQTaggable.cxx:2602
 TQTaggable.cxx:2603
 TQTaggable.cxx:2604
 TQTaggable.cxx:2605
 TQTaggable.cxx:2606
 TQTaggable.cxx:2607
 TQTaggable.cxx:2608
 TQTaggable.cxx:2609
 TQTaggable.cxx:2610
 TQTaggable.cxx:2611
 TQTaggable.cxx:2612
 TQTaggable.cxx:2613
 TQTaggable.cxx:2614
 TQTaggable.cxx:2615
 TQTaggable.cxx:2616
 TQTaggable.cxx:2617
 TQTaggable.cxx:2618
 TQTaggable.cxx:2619
 TQTaggable.cxx:2620
 TQTaggable.cxx:2621
 TQTaggable.cxx:2622
 TQTaggable.cxx:2623
 TQTaggable.cxx:2624
 TQTaggable.cxx:2625
 TQTaggable.cxx:2626
 TQTaggable.cxx:2627
 TQTaggable.cxx:2628
 TQTaggable.cxx:2629
 TQTaggable.cxx:2630
 TQTaggable.cxx:2631
 TQTaggable.cxx:2632
 TQTaggable.cxx:2633
 TQTaggable.cxx:2634
 TQTaggable.cxx:2635
 TQTaggable.cxx:2636
 TQTaggable.cxx:2637
 TQTaggable.cxx:2638
 TQTaggable.cxx:2639
 TQTaggable.cxx:2640
 TQTaggable.cxx:2641
 TQTaggable.cxx:2642
 TQTaggable.cxx:2643
 TQTaggable.cxx:2644
 TQTaggable.cxx:2645
 TQTaggable.cxx:2646
 TQTaggable.cxx:2647
 TQTaggable.cxx:2648
 TQTaggable.cxx:2649
 TQTaggable.cxx:2650
 TQTaggable.cxx:2651
 TQTaggable.cxx:2652
 TQTaggable.cxx:2653
 TQTaggable.cxx:2654
 TQTaggable.cxx:2655
 TQTaggable.cxx:2656
 TQTaggable.cxx:2657
 TQTaggable.cxx:2658
 TQTaggable.cxx:2659
 TQTaggable.cxx:2660
 TQTaggable.cxx:2661
 TQTaggable.cxx:2662
 TQTaggable.cxx:2663
 TQTaggable.cxx:2664
 TQTaggable.cxx:2665
 TQTaggable.cxx:2666
 TQTaggable.cxx:2667
 TQTaggable.cxx:2668
 TQTaggable.cxx:2669
 TQTaggable.cxx:2670
 TQTaggable.cxx:2671
 TQTaggable.cxx:2672
 TQTaggable.cxx:2673
 TQTaggable.cxx:2674
 TQTaggable.cxx:2675
 TQTaggable.cxx:2676
 TQTaggable.cxx:2677
 TQTaggable.cxx:2678
 TQTaggable.cxx:2679
 TQTaggable.cxx:2680
 TQTaggable.cxx:2681
 TQTaggable.cxx:2682
 TQTaggable.cxx:2683
 TQTaggable.cxx:2684
 TQTaggable.cxx:2685
 TQTaggable.cxx:2686
 TQTaggable.cxx:2687
 TQTaggable.cxx:2688
 TQTaggable.cxx:2689
 TQTaggable.cxx:2690
 TQTaggable.cxx:2691
 TQTaggable.cxx:2692
 TQTaggable.cxx:2693
 TQTaggable.cxx:2694
 TQTaggable.cxx:2695
 TQTaggable.cxx:2696
 TQTaggable.cxx:2697
 TQTaggable.cxx:2698
 TQTaggable.cxx:2699
 TQTaggable.cxx:2700
 TQTaggable.cxx:2701
 TQTaggable.cxx:2702
 TQTaggable.cxx:2703
 TQTaggable.cxx:2704
 TQTaggable.cxx:2705
 TQTaggable.cxx:2706
 TQTaggable.cxx:2707
 TQTaggable.cxx:2708
 TQTaggable.cxx:2709
 TQTaggable.cxx:2710
 TQTaggable.cxx:2711
 TQTaggable.cxx:2712
 TQTaggable.cxx:2713
 TQTaggable.cxx:2714
 TQTaggable.cxx:2715
 TQTaggable.cxx:2716
 TQTaggable.cxx:2717
 TQTaggable.cxx:2718
 TQTaggable.cxx:2719
 TQTaggable.cxx:2720
 TQTaggable.cxx:2721
 TQTaggable.cxx:2722
 TQTaggable.cxx:2723
 TQTaggable.cxx:2724
 TQTaggable.cxx:2725
 TQTaggable.cxx:2726
 TQTaggable.cxx:2727
 TQTaggable.cxx:2728
 TQTaggable.cxx:2729
 TQTaggable.cxx:2730
 TQTaggable.cxx:2731
 TQTaggable.cxx:2732
 TQTaggable.cxx:2733
 TQTaggable.cxx:2734
 TQTaggable.cxx:2735
 TQTaggable.cxx:2736
 TQTaggable.cxx:2737
 TQTaggable.cxx:2738
 TQTaggable.cxx:2739
 TQTaggable.cxx:2740
 TQTaggable.cxx:2741
 TQTaggable.cxx:2742
 TQTaggable.cxx:2743
 TQTaggable.cxx:2744
 TQTaggable.cxx:2745
 TQTaggable.cxx:2746
 TQTaggable.cxx:2747
 TQTaggable.cxx:2748
 TQTaggable.cxx:2749
 TQTaggable.cxx:2750
 TQTaggable.cxx:2751
 TQTaggable.cxx:2752
 TQTaggable.cxx:2753
 TQTaggable.cxx:2754
 TQTaggable.cxx:2755
 TQTaggable.cxx:2756
 TQTaggable.cxx:2757
 TQTaggable.cxx:2758
 TQTaggable.cxx:2759
 TQTaggable.cxx:2760
 TQTaggable.cxx:2761
 TQTaggable.cxx:2762
 TQTaggable.cxx:2763
 TQTaggable.cxx:2764
 TQTaggable.cxx:2765
 TQTaggable.cxx:2766
 TQTaggable.cxx:2767
 TQTaggable.cxx:2768
 TQTaggable.cxx:2769
 TQTaggable.cxx:2770
 TQTaggable.cxx:2771
 TQTaggable.cxx:2772
 TQTaggable.cxx:2773
 TQTaggable.cxx:2774
 TQTaggable.cxx:2775
 TQTaggable.cxx:2776
 TQTaggable.cxx:2777
 TQTaggable.cxx:2778
 TQTaggable.cxx:2779
 TQTaggable.cxx:2780
 TQTaggable.cxx:2781
 TQTaggable.cxx:2782
 TQTaggable.cxx:2783
 TQTaggable.cxx:2784
 TQTaggable.cxx:2785
 TQTaggable.cxx:2786
 TQTaggable.cxx:2787
 TQTaggable.cxx:2788
 TQTaggable.cxx:2789
 TQTaggable.cxx:2790
 TQTaggable.cxx:2791
 TQTaggable.cxx:2792
 TQTaggable.cxx:2793
 TQTaggable.cxx:2794
 TQTaggable.cxx:2795
 TQTaggable.cxx:2796
 TQTaggable.cxx:2797
 TQTaggable.cxx:2798
 TQTaggable.cxx:2799
 TQTaggable.cxx:2800
 TQTaggable.cxx:2801
 TQTaggable.cxx:2802
 TQTaggable.cxx:2803
 TQTaggable.cxx:2804
 TQTaggable.cxx:2805
 TQTaggable.cxx:2806
 TQTaggable.cxx:2807
 TQTaggable.cxx:2808
 TQTaggable.cxx:2809
 TQTaggable.cxx:2810
 TQTaggable.cxx:2811
 TQTaggable.cxx:2812
 TQTaggable.cxx:2813
 TQTaggable.cxx:2814
 TQTaggable.cxx:2815
 TQTaggable.cxx:2816
 TQTaggable.cxx:2817
 TQTaggable.cxx:2818
 TQTaggable.cxx:2819
 TQTaggable.cxx:2820
 TQTaggable.cxx:2821
 TQTaggable.cxx:2822
 TQTaggable.cxx:2823
 TQTaggable.cxx:2824
 TQTaggable.cxx:2825
 TQTaggable.cxx:2826
 TQTaggable.cxx:2827
 TQTaggable.cxx:2828
 TQTaggable.cxx:2829
 TQTaggable.cxx:2830
 TQTaggable.cxx:2831
 TQTaggable.cxx:2832
 TQTaggable.cxx:2833
 TQTaggable.cxx:2834
 TQTaggable.cxx:2835
 TQTaggable.cxx:2836
 TQTaggable.cxx:2837
 TQTaggable.cxx:2838
 TQTaggable.cxx:2839
 TQTaggable.cxx:2840
 TQTaggable.cxx:2841
 TQTaggable.cxx:2842
 TQTaggable.cxx:2843
 TQTaggable.cxx:2844
 TQTaggable.cxx:2845
 TQTaggable.cxx:2846
 TQTaggable.cxx:2847
 TQTaggable.cxx:2848
 TQTaggable.cxx:2849
 TQTaggable.cxx:2850
 TQTaggable.cxx:2851
 TQTaggable.cxx:2852
 TQTaggable.cxx:2853
 TQTaggable.cxx:2854
 TQTaggable.cxx:2855
 TQTaggable.cxx:2856
 TQTaggable.cxx:2857
 TQTaggable.cxx:2858
 TQTaggable.cxx:2859
 TQTaggable.cxx:2860
 TQTaggable.cxx:2861
 TQTaggable.cxx:2862
 TQTaggable.cxx:2863
 TQTaggable.cxx:2864
 TQTaggable.cxx:2865
 TQTaggable.cxx:2866
 TQTaggable.cxx:2867
 TQTaggable.cxx:2868
 TQTaggable.cxx:2869
 TQTaggable.cxx:2870
 TQTaggable.cxx:2871
 TQTaggable.cxx:2872
 TQTaggable.cxx:2873
 TQTaggable.cxx:2874
 TQTaggable.cxx:2875
 TQTaggable.cxx:2876
 TQTaggable.cxx:2877
 TQTaggable.cxx:2878
 TQTaggable.cxx:2879
 TQTaggable.cxx:2880
 TQTaggable.cxx:2881
 TQTaggable.cxx:2882
 TQTaggable.cxx:2883
 TQTaggable.cxx:2884
 TQTaggable.cxx:2885
 TQTaggable.cxx:2886
 TQTaggable.cxx:2887
 TQTaggable.cxx:2888
 TQTaggable.cxx:2889
 TQTaggable.cxx:2890
 TQTaggable.cxx:2891
 TQTaggable.cxx:2892
 TQTaggable.cxx:2893
 TQTaggable.cxx:2894
 TQTaggable.cxx:2895
 TQTaggable.cxx:2896
 TQTaggable.cxx:2897
 TQTaggable.cxx:2898
 TQTaggable.cxx:2899
 TQTaggable.cxx:2900
 TQTaggable.cxx:2901
 TQTaggable.cxx:2902
 TQTaggable.cxx:2903
 TQTaggable.cxx:2904
 TQTaggable.cxx:2905
 TQTaggable.cxx:2906
 TQTaggable.cxx:2907
 TQTaggable.cxx:2908
 TQTaggable.cxx:2909
 TQTaggable.cxx:2910
 TQTaggable.cxx:2911
 TQTaggable.cxx:2912
 TQTaggable.cxx:2913
 TQTaggable.cxx:2914
 TQTaggable.cxx:2915
 TQTaggable.cxx:2916
 TQTaggable.cxx:2917
 TQTaggable.cxx:2918
 TQTaggable.cxx:2919
 TQTaggable.cxx:2920
 TQTaggable.cxx:2921
 TQTaggable.cxx:2922
 TQTaggable.cxx:2923
 TQTaggable.cxx:2924
 TQTaggable.cxx:2925
 TQTaggable.cxx:2926
 TQTaggable.cxx:2927
 TQTaggable.cxx:2928
 TQTaggable.cxx:2929
 TQTaggable.cxx:2930
 TQTaggable.cxx:2931
 TQTaggable.cxx:2932
 TQTaggable.cxx:2933
 TQTaggable.cxx:2934
 TQTaggable.cxx:2935
 TQTaggable.cxx:2936
 TQTaggable.cxx:2937
 TQTaggable.cxx:2938
 TQTaggable.cxx:2939
 TQTaggable.cxx:2940
 TQTaggable.cxx:2941
 TQTaggable.cxx:2942
 TQTaggable.cxx:2943
 TQTaggable.cxx:2944
 TQTaggable.cxx:2945
 TQTaggable.cxx:2946
 TQTaggable.cxx:2947
 TQTaggable.cxx:2948
 TQTaggable.cxx:2949
 TQTaggable.cxx:2950
 TQTaggable.cxx:2951
 TQTaggable.cxx:2952
 TQTaggable.cxx:2953
 TQTaggable.cxx:2954
 TQTaggable.cxx:2955
 TQTaggable.cxx:2956
 TQTaggable.cxx:2957
 TQTaggable.cxx:2958
 TQTaggable.cxx:2959
 TQTaggable.cxx:2960
 TQTaggable.cxx:2961
 TQTaggable.cxx:2962
 TQTaggable.cxx:2963
 TQTaggable.cxx:2964
 TQTaggable.cxx:2965
 TQTaggable.cxx:2966
 TQTaggable.cxx:2967
 TQTaggable.cxx:2968
 TQTaggable.cxx:2969
 TQTaggable.cxx:2970
 TQTaggable.cxx:2971
 TQTaggable.cxx:2972
 TQTaggable.cxx:2973
 TQTaggable.cxx:2974
 TQTaggable.cxx:2975
 TQTaggable.cxx:2976
 TQTaggable.cxx:2977
 TQTaggable.cxx:2978
 TQTaggable.cxx:2979
 TQTaggable.cxx:2980
 TQTaggable.cxx:2981
 TQTaggable.cxx:2982
 TQTaggable.cxx:2983
 TQTaggable.cxx:2984
 TQTaggable.cxx:2985
 TQTaggable.cxx:2986
 TQTaggable.cxx:2987
 TQTaggable.cxx:2988
 TQTaggable.cxx:2989
 TQTaggable.cxx:2990
 TQTaggable.cxx:2991
 TQTaggable.cxx:2992
 TQTaggable.cxx:2993
 TQTaggable.cxx:2994
 TQTaggable.cxx:2995
 TQTaggable.cxx:2996
 TQTaggable.cxx:2997
 TQTaggable.cxx:2998
 TQTaggable.cxx:2999
 TQTaggable.cxx:3000
 TQTaggable.cxx:3001
 TQTaggable.cxx:3002
 TQTaggable.cxx:3003
 TQTaggable.cxx:3004
 TQTaggable.cxx:3005
 TQTaggable.cxx:3006
 TQTaggable.cxx:3007
 TQTaggable.cxx:3008
 TQTaggable.cxx:3009
 TQTaggable.cxx:3010
 TQTaggable.cxx:3011
 TQTaggable.cxx:3012
 TQTaggable.cxx:3013
 TQTaggable.cxx:3014
 TQTaggable.cxx:3015
 TQTaggable.cxx:3016
 TQTaggable.cxx:3017
 TQTaggable.cxx:3018
 TQTaggable.cxx:3019
 TQTaggable.cxx:3020
 TQTaggable.cxx:3021
 TQTaggable.cxx:3022
 TQTaggable.cxx:3023
 TQTaggable.cxx:3024
 TQTaggable.cxx:3025
 TQTaggable.cxx:3026
 TQTaggable.cxx:3027
 TQTaggable.cxx:3028
 TQTaggable.cxx:3029
 TQTaggable.cxx:3030
 TQTaggable.cxx:3031
 TQTaggable.cxx:3032
 TQTaggable.cxx:3033
 TQTaggable.cxx:3034
 TQTaggable.cxx:3035
 TQTaggable.cxx:3036
 TQTaggable.cxx:3037
 TQTaggable.cxx:3038
 TQTaggable.cxx:3039
 TQTaggable.cxx:3040
 TQTaggable.cxx:3041
 TQTaggable.cxx:3042
 TQTaggable.cxx:3043
 TQTaggable.cxx:3044
 TQTaggable.cxx:3045
 TQTaggable.cxx:3046
 TQTaggable.cxx:3047
 TQTaggable.cxx:3048
 TQTaggable.cxx:3049
 TQTaggable.cxx:3050
 TQTaggable.cxx:3051
 TQTaggable.cxx:3052
 TQTaggable.cxx:3053
 TQTaggable.cxx:3054
 TQTaggable.cxx:3055
 TQTaggable.cxx:3056
 TQTaggable.cxx:3057
 TQTaggable.cxx:3058
 TQTaggable.cxx:3059
 TQTaggable.cxx:3060
 TQTaggable.cxx:3061
 TQTaggable.cxx:3062
 TQTaggable.cxx:3063
 TQTaggable.cxx:3064
 TQTaggable.cxx:3065
 TQTaggable.cxx:3066
 TQTaggable.cxx:3067
 TQTaggable.cxx:3068
 TQTaggable.cxx:3069
 TQTaggable.cxx:3070
 TQTaggable.cxx:3071
 TQTaggable.cxx:3072
 TQTaggable.cxx:3073
 TQTaggable.cxx:3074
 TQTaggable.cxx:3075
 TQTaggable.cxx:3076
 TQTaggable.cxx:3077
 TQTaggable.cxx:3078
 TQTaggable.cxx:3079
 TQTaggable.cxx:3080
 TQTaggable.cxx:3081
 TQTaggable.cxx:3082
 TQTaggable.cxx:3083
 TQTaggable.cxx:3084
 TQTaggable.cxx:3085
 TQTaggable.cxx:3086
 TQTaggable.cxx:3087
 TQTaggable.cxx:3088
 TQTaggable.cxx:3089
 TQTaggable.cxx:3090
 TQTaggable.cxx:3091
 TQTaggable.cxx:3092
 TQTaggable.cxx:3093
 TQTaggable.cxx:3094
 TQTaggable.cxx:3095
 TQTaggable.cxx:3096
 TQTaggable.cxx:3097
 TQTaggable.cxx:3098
 TQTaggable.cxx:3099
 TQTaggable.cxx:3100
 TQTaggable.cxx:3101
 TQTaggable.cxx:3102
 TQTaggable.cxx:3103
 TQTaggable.cxx:3104
 TQTaggable.cxx:3105
 TQTaggable.cxx:3106
 TQTaggable.cxx:3107
 TQTaggable.cxx:3108
 TQTaggable.cxx:3109
 TQTaggable.cxx:3110
 TQTaggable.cxx:3111
 TQTaggable.cxx:3112
 TQTaggable.cxx:3113
 TQTaggable.cxx:3114
 TQTaggable.cxx:3115
 TQTaggable.cxx:3116
 TQTaggable.cxx:3117
 TQTaggable.cxx:3118
 TQTaggable.cxx:3119
 TQTaggable.cxx:3120
 TQTaggable.cxx:3121
 TQTaggable.cxx:3122
 TQTaggable.cxx:3123
 TQTaggable.cxx:3124
 TQTaggable.cxx:3125
 TQTaggable.cxx:3126
 TQTaggable.cxx:3127
 TQTaggable.cxx:3128
 TQTaggable.cxx:3129
 TQTaggable.cxx:3130
 TQTaggable.cxx:3131
 TQTaggable.cxx:3132
 TQTaggable.cxx:3133
 TQTaggable.cxx:3134
 TQTaggable.cxx:3135
 TQTaggable.cxx:3136
 TQTaggable.cxx:3137
 TQTaggable.cxx:3138
 TQTaggable.cxx:3139
 TQTaggable.cxx:3140
 TQTaggable.cxx:3141
 TQTaggable.cxx:3142
 TQTaggable.cxx:3143
 TQTaggable.cxx:3144
 TQTaggable.cxx:3145
 TQTaggable.cxx:3146
 TQTaggable.cxx:3147
 TQTaggable.cxx:3148
 TQTaggable.cxx:3149
 TQTaggable.cxx:3150
 TQTaggable.cxx:3151
 TQTaggable.cxx:3152
 TQTaggable.cxx:3153
 TQTaggable.cxx:3154
 TQTaggable.cxx:3155
 TQTaggable.cxx:3156
 TQTaggable.cxx:3157
 TQTaggable.cxx:3158
 TQTaggable.cxx:3159
 TQTaggable.cxx:3160
 TQTaggable.cxx:3161
 TQTaggable.cxx:3162
 TQTaggable.cxx:3163
 TQTaggable.cxx:3164
 TQTaggable.cxx:3165
 TQTaggable.cxx:3166
 TQTaggable.cxx:3167
 TQTaggable.cxx:3168
 TQTaggable.cxx:3169
 TQTaggable.cxx:3170
 TQTaggable.cxx:3171
 TQTaggable.cxx:3172
 TQTaggable.cxx:3173
 TQTaggable.cxx:3174
 TQTaggable.cxx:3175
 TQTaggable.cxx:3176
 TQTaggable.cxx:3177
 TQTaggable.cxx:3178
 TQTaggable.cxx:3179
 TQTaggable.cxx:3180
 TQTaggable.cxx:3181
 TQTaggable.cxx:3182
 TQTaggable.cxx:3183
 TQTaggable.cxx:3184
 TQTaggable.cxx:3185
 TQTaggable.cxx:3186
 TQTaggable.cxx:3187
 TQTaggable.cxx:3188
 TQTaggable.cxx:3189
 TQTaggable.cxx:3190
 TQTaggable.cxx:3191
 TQTaggable.cxx:3192
 TQTaggable.cxx:3193
 TQTaggable.cxx:3194
 TQTaggable.cxx:3195
 TQTaggable.cxx:3196
 TQTaggable.cxx:3197
 TQTaggable.cxx:3198
 TQTaggable.cxx:3199
 TQTaggable.cxx:3200
 TQTaggable.cxx:3201
 TQTaggable.cxx:3202
 TQTaggable.cxx:3203
 TQTaggable.cxx:3204
 TQTaggable.cxx:3205
 TQTaggable.cxx:3206
 TQTaggable.cxx:3207
 TQTaggable.cxx:3208
 TQTaggable.cxx:3209
 TQTaggable.cxx:3210
 TQTaggable.cxx:3211
 TQTaggable.cxx:3212
 TQTaggable.cxx:3213
 TQTaggable.cxx:3214
 TQTaggable.cxx:3215
 TQTaggable.cxx:3216
 TQTaggable.cxx:3217
 TQTaggable.cxx:3218
 TQTaggable.cxx:3219
 TQTaggable.cxx:3220
 TQTaggable.cxx:3221
 TQTaggable.cxx:3222
 TQTaggable.cxx:3223
 TQTaggable.cxx:3224
 TQTaggable.cxx:3225
 TQTaggable.cxx:3226
 TQTaggable.cxx:3227
 TQTaggable.cxx:3228
 TQTaggable.cxx:3229
 TQTaggable.cxx:3230
 TQTaggable.cxx:3231
 TQTaggable.cxx:3232
 TQTaggable.cxx:3233
 TQTaggable.cxx:3234
 TQTaggable.cxx:3235
 TQTaggable.cxx:3236
 TQTaggable.cxx:3237
 TQTaggable.cxx:3238
 TQTaggable.cxx:3239
 TQTaggable.cxx:3240
 TQTaggable.cxx:3241
 TQTaggable.cxx:3242
 TQTaggable.cxx:3243
 TQTaggable.cxx:3244
 TQTaggable.cxx:3245
 TQTaggable.cxx:3246
 TQTaggable.cxx:3247
 TQTaggable.cxx:3248
 TQTaggable.cxx:3249
 TQTaggable.cxx:3250
 TQTaggable.cxx:3251
 TQTaggable.cxx:3252
 TQTaggable.cxx:3253
 TQTaggable.cxx:3254
 TQTaggable.cxx:3255
 TQTaggable.cxx:3256
 TQTaggable.cxx:3257
 TQTaggable.cxx:3258
 TQTaggable.cxx:3259
 TQTaggable.cxx:3260
 TQTaggable.cxx:3261
 TQTaggable.cxx:3262
 TQTaggable.cxx:3263
 TQTaggable.cxx:3264
 TQTaggable.cxx:3265
 TQTaggable.cxx:3266
 TQTaggable.cxx:3267
 TQTaggable.cxx:3268
 TQTaggable.cxx:3269
 TQTaggable.cxx:3270
 TQTaggable.cxx:3271
 TQTaggable.cxx:3272
 TQTaggable.cxx:3273
 TQTaggable.cxx:3274
 TQTaggable.cxx:3275
 TQTaggable.cxx:3276
 TQTaggable.cxx:3277
 TQTaggable.cxx:3278
 TQTaggable.cxx:3279
 TQTaggable.cxx:3280
 TQTaggable.cxx:3281
 TQTaggable.cxx:3282
 TQTaggable.cxx:3283
 TQTaggable.cxx:3284
 TQTaggable.cxx:3285
 TQTaggable.cxx:3286
 TQTaggable.cxx:3287
 TQTaggable.cxx:3288
 TQTaggable.cxx:3289
 TQTaggable.cxx:3290
 TQTaggable.cxx:3291
 TQTaggable.cxx:3292
 TQTaggable.cxx:3293
 TQTaggable.cxx:3294
 TQTaggable.cxx:3295
 TQTaggable.cxx:3296
 TQTaggable.cxx:3297
 TQTaggable.cxx:3298
 TQTaggable.cxx:3299
 TQTaggable.cxx:3300
 TQTaggable.cxx:3301
 TQTaggable.cxx:3302
 TQTaggable.cxx:3303
 TQTaggable.cxx:3304
 TQTaggable.cxx:3305
 TQTaggable.cxx:3306
 TQTaggable.cxx:3307
 TQTaggable.cxx:3308
 TQTaggable.cxx:3309
 TQTaggable.cxx:3310
 TQTaggable.cxx:3311
 TQTaggable.cxx:3312
 TQTaggable.cxx:3313
 TQTaggable.cxx:3314
 TQTaggable.cxx:3315
 TQTaggable.cxx:3316
 TQTaggable.cxx:3317
 TQTaggable.cxx:3318
 TQTaggable.cxx:3319
 TQTaggable.cxx:3320
 TQTaggable.cxx:3321
 TQTaggable.cxx:3322
 TQTaggable.cxx:3323
 TQTaggable.cxx:3324
 TQTaggable.cxx:3325
 TQTaggable.cxx:3326
 TQTaggable.cxx:3327
 TQTaggable.cxx:3328
 TQTaggable.cxx:3329
 TQTaggable.cxx:3330
 TQTaggable.cxx:3331
 TQTaggable.cxx:3332
 TQTaggable.cxx:3333
 TQTaggable.cxx:3334
 TQTaggable.cxx:3335
 TQTaggable.cxx:3336