#include "TObject.h"
#include "TFile.h"
#include "TKey.h"
#include "QFramework/TQFolder.h"
#include "QFramework/TQTaggable.h"
#include "QFramework/TQUtils.h"
#include "TClass.h"
#include "QFramework/TQCounter.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQValue.h"
#include "TParameter.h"
#include "TCollection.h"
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "THnBase.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQTHnBaseUtils.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQListUtils.h"
#include "THashList.h"
#include "QFramework/TQLink.h"
#include "QFramework/TQImportLink.h"
#include "QFramework/TQTable.h"
#include "QFramework/TQXSecParser.h"
#include "QFramework/TQPathManager.h"

// #define _DEBUG_

#include "QFramework/TQLibrary.h"

#include <iostream>
#include <algorithm>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <map>
#include "dirent.h"

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQFolder:
//
// The TQFolder class is the basic building block for data modeling within the analysis code.
// It is a subclass of ROOT's TFolder class and thereby serves as a container for any object
// based on the TObject class. Objects are identified by their name (the name returned by
// obj->GetName()). The TQFolder class allows to recursively build up a tree-like folder
// hierarchy by adding instances of TQFolder (simply referred to as 'folder') to existing
// folders. These nested folders can be accessed via a Unix-like path scheme. Instances of
// TQFolder can be browsed using the TBrowser.
//
// Please note: the TQFolder class imposes quite strict requirements on names used to identify
// folders or objects within folders (only small and capital letters, numerals, underscore, and
// dot are valid characters to compose a valid name).
//
// Additionally, the TQFolder class inherits from the TQTaggable class which provides features
// to assign tags (key-value-pairs).
//
// A new instance of TQFolder can be created using the static method TQFolder::newFolder(...):
//
// TQFolder * f = TQFolder::newFolder("f");
//
// Objects are added to the folder using TQFolder::addObject(...):
//
// TH1F * h = new TH1F("h", "h", 10, 0., 1.);
// f->addObject(h);
//
// [Please note: histograms are special in the sense that they are by default associated to a
// directory (instance of TDirectory). This is no problem unless you want to stream (using
// TObject::Write()) a folder containing histograms to a file. You should remove histograms
// before adding them to a folder from their directory using TH1::SetDirectory(NULL).]
//
// [Please note: the user is still able to use TFolder::Add(...) to add objects to a folder,
// however, one should never use this method because it might not treat TQFolder specific
// aspects correctly and result in inconsistencies of the data structure.]
//
// The contents of a folder can be printed using TQFolder::print(...):
//
// f->print("trd");
//
// Objects are retrieved from a folder using TQFolder::getObject(...):
//
// TH1F * h = (TH1F*)f->getObject("h");
//
// Existing subfolders are retrieved using TQFolder::getFolder(...):
//
// TQFolder * subf = f->getFolder("subf");
//
// New subfolders can also be created using TQFolder::getFolder(...):
//
// TQFolder * subf = f->getFolder("subf+");
//
// Tags (see also TQTaggable class) are set using e.g. TQFolder::setTagInteger(...)
//
// f->setTagInteger("number", 6);
//
// and retrieved using e.g. TQFolder::getTagInteger(...)
//
// int number = 0;
// f->getTagInteger("number", number);
//
// Folders can be moved and copied using e.g. TQFolder::moveTo(...) and TQFolder::copyTo(...).
// Folders can be streamed (using TObject::Write()) to ROOT files and retrieved from ROOT files
// using e.g.
//
// TQFolder * f = TQFolder::loadFolder("filename.root:f");
//
// The contents (folder hiearchy + tags) of a folder can be exported to human-readable text or
// written directly into a text file:
//
// TString text = f->exportToText();
//
// f->exportToTextFile("text.txt");
//
// The corresponding syntax also allows to import subfolders and tags from a text or a text
// file:
//
// f->importFromText(text);
//
// f->importFromTextFile("text.txt");
//
// The equivalence of two instances of the TQFolder class (including tags) can be assessed:
//
// f->isEquivalentTo(f2);
//
// Two instances of the TQFolder class can be compared by identifying and printing non-
// equivalent elements:
//
// f->printDiff(f2);
//
// f->printDiff("f1", "f2");
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQFolder)


//__________________________________________________________________________________|___________

TQFolder::TQFolder() :
TFolder("unknown", ""),
  TQTaggable(),
  fMyDir(gDirectory),
  fOwnMyDir(false),
  fBase(NULL),
  isFullyResolved(false){
  // Default constructor of TQFolder class: a new and empty instance of TQFolder is
  // created and initialized. Its name will be set to "unkown". Please note: users
  // should not use this constructor but the static factory method
  // TQFolder::newFolder(...). This default constructor has to be present to allow
  // ROOT's CINT to stream instances of TQFolder.
}


//__________________________________________________________________________________|___________

TQFolder::TQFolder(const TString& name) :
  TFolder(TQFolder::isValidName(name) ? name : "invalid_name", ""),
  TQTaggable(),
  fMyDir(gDirectory),
  fOwnMyDir(false),
  fBase(NULL),
  isFullyResolved(false){
  // Constructor of TQFolder class: a new and empty instance of TQFolder is created
  // and initialized. Its name will be set to the value of the parameter "name_" if
  // it is a valid name and "invalid_name" otherwise. Please refer to the
  // documentation of the static method TQFolder::isValidName(...) for details on
  // valid folder names. Please note: users should not use this constructor but the
  // static factory method TQFolder::newFolder(...).
}


//__________________________________________________________________________________|___________

bool TQFolder::IsSortable() const {
  // This method is a reimplementation of ROOT's TObject::IsSortable() and will
  // return true indicating that instances of the TQFolder class can be sorted
  // reasonably.

  // instances of TQFolder are sortable
  return true;
}


//__________________________________________________________________________________|___________

int TQFolder::Compare(const TObject * obj) const {
  // This method is a reimplementation of ROOT's TObject::Compare(...) and allows
  // to compare an instance of TObject to this instance of TQFolder. It will
  // return 0 if an instance of TQFolder with the same name as this instance is
  // passed as an argument and +1 (-1) if the name of this instance is
  // alphabetically classified after (before) the name of the instance passed as an
  // argument. In case of passing an instance that is not a valid sub-class of
  // TQFolder -1 is returned.

  if (obj && obj->InheritsFrom(TQFolder::Class())) {
    TString thisName = GetName();
    TString thatName = obj->GetName();
    return thisName.CompareTo(thatName);
  } else {
    return -1;
  }
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::newFolder(TString name) {
  // Returns a new and empty instance of the TQFolder class with name <name> 
  
  // create and return a new instance of TQFolder with name <name>
  return new TQFolder(name);
}


//__________________________________________________________________________________|___________

bool TQFolder::isLazy(){
  // return true if this folder is 'lazy'.
  // lazy folders are not fully resolved, i.e. components of the folder
  // structure still reside on disk and have not been loaded into memory.
  return !(this->isFullyResolved);
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::newInstance(const TString& name) {
  // Returns a new and empty instance of the TQFolder class with name <name> if
  // <name> is a valid name and a null pointer otherwise. Please note: this method
  // does exactly the same as TQFolder::newFolder(...) but may be overwritten by
  // sub-classes of TQFolder.

  // create and return new instance of TQFolder with name <name>
  return TQFolder::newFolder(name.IsNull() ? this->GetName() : name.Data());
}

//__________________________________________________________________________________|___________

bool TQFolder::parseDestination(TString dest, TString &path, TString &newName) {
  // parse a destination string, i.e. 'path::newname'
  // if the pattern was recognized, path and newName will be set accordingly.
  // else, the entire intput will be used as path and newName will be empty
  // this function will return true in either case and only return false if
  // something about the input string was horribly wrong, e.g. if the newName
  // component has length zero
  int colonpos = TQStringUtils::find(dest,"::");
  if((colonpos >= 0) && (colonpos < dest.Length())){
    path = dest(0,colonpos);
    if(colonpos+2 < dest.Length()){
      newName = dest(colonpos+2, dest.Length()-(colonpos+2));
      return true;
    } else {
      return false;
    }
  } else {
    path = dest;
    newName.Clear();
    return true;
  }
  return false;
}

//__________________________________________________________________________________|___________

bool TQFolder::parseLocation(TString importPath, TString& filename, TString& objname){
  // parse a "location string", i.e. 'filename:objname'
  // if the pattern was recognized, filename and objname will be set accordingly.
  // else, the entire input will be used as filename, and objname will be empty.
  // this function shoudl return true in any case.
  filename.Clear();
  objname.Clear();
  size_t pipepos = TQStringUtils::rfind(importPath,">>");
  size_t pos = TQStringUtils::rfind(importPath,":",(pipepos < (size_t)importPath.Length()) ? pipepos : (size_t)importPath.Length());
  while(pos > 2 && importPath[pos-1] == ':')
    pos = TQStringUtils::rfind(importPath,":",pos-2);
  if(pos < (size_t)importPath.Length() && importPath[pos+1] != '/'){
    filename = TQStringUtils::trim(importPath(0,pos));
    objname = importPath(pos+1,importPath.Length()-pos);
    DEBUGclass("filename='%s', objname='%s'",filename.Data(),objname.Data());
    return true;
  } else {
    DEBUGclass("unable to parse location '%s', >>@%d, :@%d",importPath.Data(),pipepos,pos);
    filename = importPath;
    objname = "";
    return true;
  }
  return false;
}

//__________________________________________________________________________________|___________

TFile* TQFolder::openFile(TString& importPath,const TString& opt){
  // open a file for retrieval of a TQFolder instance. the importPath can be
  // given as 'filename:objname' for details on the parsing, see
  // TQFolder::parseLocation. the opt string can be used to specify the opening
  // mode (like in TFile::Open). the importPath argument will be stripped of
  // the filename component and the separating colon by this function. this
  // function will not take ownage of the file pointer, and it's the users
  // responsibility to close and delete it.
  TString filename,objname;
  DEBUGclass("function called on path '%s'",importPath.Data());
  if(!parseLocation(importPath,filename,objname)) return NULL;
  DEBUGclass("parsed location: filename='%s', objname='%s'",filename.Data(),objname.Data());
  importPath = objname;
  // check the file's existence and stop if it doesn't exist
  TFile* file = NULL;
  if(!filename.IsNull() && TQUtils::fileExists(filename)){
    // try to open the file
    file = TFile::Open(filename.Data(), opt);
    if (file && !file->IsOpen()) {
      delete file;
      file=NULL;
    }
  }
  if(!file){
    ERRORclass("unable to open file '%s'",filename.Data());
  }
  return file;
}

//__________________________________________________________________________________|___________

TObject * TQFolder::importObject(TString importPath,bool recurse) {
  // import an object from the given path, to be given in the typical
  // 'filename:objname' notation. if the filename component is left empty, the
  // current gDirectory will be used.
  TDirectory* dir = this->fMyDir;
  importPath = TQStringUtils::trim(importPath);
  bool local = false;
  if (TQStringUtils::countLeading(importPath,":")>0) local = true;
  DEBUGclass("function called on path '%s'",importPath.Data());
  TFile* file = this->openFile(importPath,"READ");
  if(file)
    dir = file;
  else if (!local) {
    ERRORclass("Failed to retrieve object: File not found!");
    return NULL;
  } else if(!dir)
    dir = gDirectory;


  TObject * imported = NULL;

  if(importPath.IsNull()){
    ERRORclass("cannot import object without name or path - did you forget the ':[name]'?");
  } else {
    DEBUGclass("importing object to path '%s'",importPath.Data());
    imported = importObjectFromDirectory(dir, importPath,recurse);
  }

  // close file and delete file pointer
  if(file){
    file->Close();
    delete file;
  }

  return imported;
}

//__________________________________________________________________________________|___________

const TString& TQFolder::getValidNameCharacters() {
  // Returns a string containing all valid characters that can be used to build
  // valid names of instances of TQFolder or TObjects stored inside an instance of
  // TQFolder.

  // Valid characters are the ones defined as 'default
  // ID characters' in the TQStringUtils class.
  return TQStringUtils::getDefaultIDCharacters();
}


//__________________________________________________________________________________|___________

bool TQFolder::isValidName(const TString& name) {
  // Checks whether the name <name> passed as an argument is a valid name for an
  // instance of TQFolder and return true if <name> is valid and false otherwise.
  // Valid names may consist of letters a..z, A..Z, numerals 0..9, underscores "_"
  // and dots ".". Please note: names only consisting of dots (e.g. "." or "..")
  // are not considered as valid names as these have special meanings.

  // don't allow names like ".." or "."
  if (name.CountChar('.') == name.Length()) {
    return false;
  } else {
    return TQStringUtils::isValidIdentifier(name, getValidNameCharacters(), 1, -1);
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::isValidPath(TString path, bool allowRelativePaths, bool allowWildcards, bool allowArithmeticStringExpressions) {
  // Checks whether <path> is a valid path name. A path is considered as valid if
  // all its path tokens (components between slashes "/") are valid names for
  // instances of TQFolder or TObjects stored inside an instance of TQFolder (please
  // refer to the documentation of the static method TQFolder::isValidName(...)
  // for details on valid folder names). If <allowRelativePaths> is true (true by
  // default) relative references like "." or ".." are also considered as valid path
  // tokens. If <allowWildcards> is true (true by default) wildcards like "?" or "*"
  // are also considered as valid path tokens.


  // a valid path has to consist of at least one character
  bool isValid = !path.IsNull();

  // loop over path tokens and test their validity
  while (isValid && !path.IsNull()) {
    // read one path token
    TString pathToken = getPathHead(path);
    // check the token's validity: it has to be a valid name or ...
    isValid &= isValidName(pathToken)
      // a relative reference in case <allowRelativePaths> is true or ...
      || (allowRelativePaths &&
          (pathToken.CompareTo(".") == 0 || pathToken.CompareTo("..") == 0))
      // a wildcard in case <allowWildcards> is true
      || (allowWildcards &&
          (pathToken.CompareTo("*") == 0 || pathToken.CompareTo("?") == 0))
      // some arithmetic string expression in case <allowArithmeticStringExpressions> is true
      || (allowArithmeticStringExpressions &&
          TQStringUtils::matches(pathToken,"[*]"));
  }

  // return true if the path is valid
  return isValid;
}


//__________________________________________________________________________________|___________

TString TQFolder::makeValidIdentifier(TString identifier, TString replacement) {
  // Makes the name <identifier> a valid name of instances of TQFolder or TObjects
  // stored inside an instance of TQFolder (please refer to the documentation of the
  // static method TQFolder::isValidName(...) for details on valid folder names).
  // Invalid name characters in <identifier> are replaced by <replacement> (default
  // is an empty string effectively removing such characters). If <replacement>
  // itself does not contain invalid name characters the string returned is guaranteed
  // to be a valid name of instances of TQFolder or TObjects stored inside an instance
  // of TQFolder.

  return TQStringUtils::makeValidIdentifier(identifier, getValidNameCharacters(), replacement);
}


//__________________________________________________________________________________|___________

TString TQFolder::makeValidPath(TString path, TString replacement,
                                bool allowRelativePaths, bool allowWildcards) {
  // Make the path <path> a valid path (please refer to the static method
  // TQFolder::isValidPath(...) for details on valid paths). Invalid name characters
  // in <path> are replaced by <replacement> (default is an empty string effectively
  // removing such characters). If <replacement> itself does not contain invalid name
  // characters the string returned is guaranteed to be a valid path.
  // If <allowRelativePaths> is true (true by default) relative references like "."
  // or ".." are kept and if <allowWildcards> is true (true by default) wildcards like
  // "?" or "*" are also kept.

  // keep track of leading and trailing slahes "/" since these will undesirably be
  // removed by TQFolder::getPathHead(...) in the following and thus need to be added
  // later again
  bool leadingSlash = TQStringUtils::removeLeading(path, "/", 1);
  bool trailingSlash = TQStringUtils::removeTrailing(path, "/", 1);

  TString result;
  while (!path.IsNull()) {
    TString subPath = TQFolder::getPathHead(path);
    if ((allowRelativePaths &&
         (subPath.CompareTo(".") == 0 || subPath.CompareTo("..") == 0))
        || (allowWildcards &&
            (subPath.CompareTo("*") == 0 || subPath.CompareTo("?") == 0))) {
      result = TQFolder::concatPaths(result, subPath);
    } else {
      result = TQFolder::concatPaths(result,
                                     TQFolder::makeValidIdentifier(subPath, replacement));
    }
  }

  // add leading and trailing slashes again
  // if these were present at the beginning
  if (leadingSlash) {
    result.Prepend("/");
  }
  if (trailingSlash) {
    result.Append("/");
  }

  // return the cleaned path
  return result;
}


//__________________________________________________________________________________|___________

TString TQFolder::getPathHead(TString &path) {
  // Removes the first path token (head) of <path> and returns it. (content of <path>
  // will be changed). Examples:
  //
  // - TString path = "hello";
  // getPathTail(path) returns "hello" and <path> becomes an empty string.
  // - TString path = "hello/world";
  // getPathTail(path) returns "hello" and <path> becomes "world".
  // - TString path = "hello/world/test";
  // getPathTail(path) returns "hello" and <path> becomes "world/test".

  // find the first occurence of a slash "/" in <path>
  // but excluding the very first character (index = 0)
  int pos = 1;
  while (pos < path.Length() && path[pos] != '/') {
    pos++;
  }

  int start = path.BeginsWith("/") ? 1 : 0;
  TString result = path(start, pos - start);
  path.Remove(0, pos + 1);
  return result;
}


//__________________________________________________________________________________|___________

TString TQFolder::getPathTail(TString &path) {
  // Removes the last path token (tail) of <path> and returns it (content of <path>
  // will be changed). Examples:
  //
  // - TString path = "hello";
  // getPathTail(path) returns "hello" and <path> becomes an empty string.
  // - TString path = "hello/world";
  // getPathTail(path) returns "world" and <path> becomes "hello".
  // - TString path = "hello/world/test";
  // getPathTail(path) returns "test" and <path> becomes "hello/world".

  // find the last occurence of a slash "/" in <path>
  // but excluding the very last character (index = length - 1)
  int pos = path.Length() - 2;
  while (pos >= 0 && path[pos] != '/') {
    pos--;
  }

  if (pos >= 0) {
    TString result = path(pos + 1,
                          path.Length() - pos - 1 - (path.EndsWith("/") ? 1 : 0));
    path.Remove(std::max(pos,1));
    return result;
  } else {
    TString result = path;
    path.Clear();
    return result;
  }
}


//__________________________________________________________________________________|___________

TString TQFolder::getPathWithoutHead(TString path) {
  // Returns <path> without the first path token (head). Examples:
  //
  // getPathWithoutHead("hello") returns an empty string
  // getPathWithoutHead("hello/world") returns "world"
  // getPathWithoutHead("hello/world/test") returns "world/test"

  // remove the head
  getPathHead(path);
  // return what's left
  return path;
}


//__________________________________________________________________________________|___________

TString TQFolder::getPathWithoutTail(TString path) {
  // Returns <path> without the last path token (tail). Examples:
  //
  // getPathWithoutTail("hello") returns an empty string
  // getPathWithoutTail("hello/world") returns "hello"
  // getPathWithoutTail("hello/world/test") returns "hello/world"

  // remove the tail
  getPathTail(path);
  // return what's left
  return path;
}

//__________________________________________________________________________________|___________

TString TQFolder::concatPaths(TString path1, TString path2) {
  // Concatenates the two paths <path1> and <path2> ensuring exactly one intermediate
  // slash "/" between the two in the resulting path. In case one path is an empty
  // string the respective other one is returned. Examples:
  //
  // - concatPaths("a", "b") returns "a/b".
  // - concatPaths("a/", "/b") returns "a/b".
  // - concatPaths("a/", "b") returns "a/b".
  // - concatPaths("a/b", "c") returns "a/b/c".

  // remove trailing (leading) slahes of the first (second) path
  TQStringUtils::removeTrailingText(path2,"/.");
  TQStringUtils::removeTrailingText(path1,"/.");
  TQStringUtils::removeLeadingText(path2,"./");
  TQStringUtils::removeTrailing(path1, "/",1); //don't remove more than one each, this would mess up typical remote locations like 
  if (!path1.IsNull()) TQStringUtils::removeLeading(path2, "/",1); // root://eosuser.cern.ch//eos/user/... (we'd turn the '//' after the server address into a single one!)

  // concatenate the two paths ...
  if (!path1.IsNull() && !path2.IsNull()) {
    // ... adding one intermediate "/" in case neither of them is empty
    return path1 + "/" + path2;
  } else {
    return path1 + path2;
  }
}


//__________________________________________________________________________________|___________

TString TQFolder::concatPaths(const TString& path1, const TString& path2, const TString& path3) {
  // Concatenates the three paths <path1>, <path2>, and <path3> ensuring exactly one
  // intermediate slash "/" between each of them in the resulting path. In case one
  // path is an empty string it is ignored. Examples:
  //
  // - concatPaths("a", "b", "c") returns "a/b/c".
  // - concatPaths("a/", "b", "/c") returns "a/b/c".
  // - concatPaths("a/", "", "/c") returns "a/c".

  // nest fundamental version of TQFolder::concatPaths(...) to obtain the result
  return concatPaths(concatPaths(path1, path2), path3);
}


//__________________________________________________________________________________|___________

TString TQFolder::concatPaths(const TString& path1, const TString& path2, const TString& path3, const TString& path4) {
  // Concatenates the four paths <path1>, <path2>, <path3>, and <path4> ensuring
  // exactly one intermediate slash "/" between each of them in the resulting path.
  // In case one path is an empty string it is ignored. Examples:
  //
  // - concatPaths("a", "b", "c", "d") returns "a/b/c/d".

  // nest fundamental version of TQFolder::concatPaths(...) to obtain the result
  return concatPaths(concatPaths(path1, path2), concatPaths(path3, path4));
}


//__________________________________________________________________________________|___________

TString TQFolder::concatPaths(const TString& path1, const TString& path2, const TString& path3, const TString& path4, const TString& path5) {
  // Concatenates the four paths <path1>, <path2>, <path3>, <path4>, and <path5> ensuring
  // exactly one intermediate slash "/" between each of them in the resulting path.
  // In case one path is an empty string it is ignored. Examples:
  //
  // - concatPaths("a", "b", "c", "d", "e") returns "a/b/c/d/e".

  // nest fundamental version of TQFolder::concatPaths(...) to obtain the result
  return concatPaths(concatPaths(path1, path2), concatPaths(path3, path4), path5);
}


//__________________________________________________________________________________|___________

int TQFolder::countPathLevels(TString path, bool checkPathTokens) {
  // Counts the number of path levels (valid names for instances of TQFolder separated
  // by slashes "/") in input path <path>. If <path> is not a valid path -1 is returned
  // (relative paths, e.g. "..", and wildcards, e.g. "?", are not considered as valid
  // and will result in -1 as return value). Examples:
  //
  // - countPathLevels("") returns 0.
  // - countPathLevels("hello") returns 1.
  // - countPathLevels("hello/world") returns 2.
  // - countPathLevels("hello/?") returns -1.

  // the number of path levels
  int levels = 0;

  // count path levels by looping and removing heads one by one
  while (!path.IsNull()) {
    // extract next level
    TString subPath = getPathHead(path);
    // check if the path token is a valid name ...
    if (isValidName(subPath) || !checkPathTokens) {
      // ... increase number if yes
      levels++;
    } else {
      // ... return -1 if path token is not a valid name
      return -1;
    }
  }

  // return the number of path levels
  return levels;
}

//__________________________________________________________________________________|___________

bool TQFolder::isEquivalentTo(TQFolder * f, const TString& options) {
  // returns true if the folder is equivalent to another one, e.g. if all
  // elements present in one have a corresponding element of the same name
  // present in the other as well.

  TQTaggable * opts = TQTaggable::parseFlags(options);

  if (!opts) {
    ERRORclass("Failed to parse options '%s'", options.Data());
    return false;
  }

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


//__________________________________________________________________________________|___________

bool TQFolder::isEquivalentTo(TQFolder * f, TQTaggable& options) {
  // returns true if the folder is equivalent to another one, e.g. if all
  // elements present in one have a corresponding element of the same name
  // present in the other as well.
  if (!f) {
    return false;
  }

  bool equivalent = true;

  if (!this->tagsAreEquivalentTo(f)) {
    equivalent = false;
  }

  // get sorted list of object names
  TList * objects = TQListUtils::getMergedListOfNames(
                                                      this->GetListOfFolders(), f->GetListOfFolders(), false);

  // iterate over all elements present in at least one of the two instances of TQFolder
  // (in order to set fIsEquivalentToSnapshot (see below) properly on the whole TQFolder
  // tree the iteration does not stop even if an inequivalence has been found)
  TQIterator itrObjects(objects, true);
  while (itrObjects.hasNext()) {
    TString name = itrObjects.readNext()->GetName();

    // try to get elements from both instances
    TObject * obj1 = this->FindObject(name);
    TObject * obj2 = f->FindObject(name);

    if (!obj1 || !obj2) {
      // element is not present in both instances => not equivalent
      equivalent = false;
      continue;
    }

    if (obj1->InheritsFrom(TQFolder::Class()) && obj2->InheritsFrom(TQFolder::Class())) {
      // comparing two instances of the TQFolder class
      if (!((TQFolder*)obj1)->isEquivalentTo((TQFolder*)obj2, options)) {
        equivalent = false;
      }
    } else if (!TQUtils::areEquivalent(obj1, obj2)) {
      equivalent = false;
    }
  }

  // fIsEquivalentToSnapshot is an internal boolean representing the result of the
  // last TQFolder::isEquivalentTo(...) call. It is read by TQFolder::printDiff(...)
  // to avoid a qudratically scaling number of calls to TQFolder::isEquivalentTo(...).
  fIsEquivalentToSnapshot = equivalent;

  return equivalent;
}


//__________________________________________________________________________________|___________

bool TQFolder::printDiff(const TString& path1, const TString& path2, const TString& options) {
  // print the difference between two folders, comparing them recursively
  TQFolder * f1 = this->getFolder(path1);
  TQFolder * f2 = this->getFolder(path2);

  if (f1 && f2) {
    return f1->printDiff(f2, options);
  } else {
    ERRORclass("Failed to find folder '%s'", f1 ? path2.Data() : path1.Data());
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::printDiff(TQFolder * f, const TString& options) {
  // print the difference between two folders, comparing them recursively
  TQTaggable * opts = TQTaggable::parseFlags(options);

  if (!opts) {
    ERRORclass("Failed to parse options '%s'", options.Data());
    return false;
  }

  bool result = false;
  result = this->printDiff(f, *opts, 0);
  delete opts;
  return result;
}


//__________________________________________________________________________________|___________

bool TQFolder::printDiff(TQFolder * f, TQTaggable& options, int indent) {
  // print the difference between two folders, comparing them recursively
  const int cColWidth_Total = TQLibrary::getConsoleWidth();

  const int cColWidth_Name = 0.5*cColWidth_Total;
  const int cColWidth_Comp = 0.2*cColWidth_Total;
  const int cColWidth_Details = cColWidth_Total - cColWidth_Name - cColWidth_Comp;

  if (!f) {
    return false;
  }

  if (indent == 0) {
    // if this is the root of printDiff(...) scan folders and fill fIsEquivalentToSnapshot
    this->isEquivalentTo(f, options);
  }
  if (fIsEquivalentToSnapshot) {
    // stop here if everything downstream is equivalent
    return true;
  }

  // print details of individual elements?
  //@tag: [d] If this argument tag is set to true, details on individual elements are printed. Default: false.
  bool printDetails = options.getTagBoolDefault("d", false);

  // get sorted list of object names: this is a list of all names
  // of objects appearing in any of the two folders but sorted and
  // without duplicates
  TList * objects = TQListUtils::getMergedListOfNames(
                                                      this->GetListOfFolders(), f->GetListOfFolders(), false);

  TString line;
  TString comp;

  if (indent == 0) {
    // print headline
    line = TQStringUtils::fixedWidth("Name", 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;
  } else {
    // list my name
    line = TQStringUtils::fixedWidth(TQStringUtils::repeatSpaces((indent - 1) * 2) + TQStringUtils::makeBoldBlue(this->GetName()) + "/", cColWidth_Name, "l");
    std::cout << line << std::endl;
  }

  // print diff of tags associated to these folders
  // (prints nothing in case tags are equivalent)
  TQTaggable tagDiffOpts;
  tagDiffOpts.setTagBool("z", true);
  tagDiffOpts.setTagBool("m", true);
  tagDiffOpts.setTagInteger("i", indent);
  tagDiffOpts.setTagBool("d", printDetails);
  this->printDiffOfTags(f, tagDiffOpts);

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

    // grab object from both folders
    TObject * obj1 = this->FindObject(name);
    TObject * obj2 = f->FindObject(name);

    if (obj1 && obj2) {
      if (obj1->InheritsFrom(TQFolder::Class()) && obj2->InheritsFrom(TQFolder::Class())) {
        // print diff of matching subfolders
        ((TQFolder*)obj1)->printDiff((TQFolder*)obj2, options, indent + 1);
        continue;
      }
      if (TQUtils::areEquivalent(obj1, obj2)) {
        continue;
      }
      if (obj1->IsA() == obj2->IsA()) {
        // objects are of same class type but cannot be compared
        comp = TQStringUtils::makeBoldYellow("(1) =? (2)");
      } else if (obj1->InheritsFrom(obj2->IsA())) {
        comp = TQStringUtils::makeBoldYellow("(1) -> (2)");
      } else if (obj2->InheritsFrom(obj1->IsA())) {
        comp = TQStringUtils::makeBoldYellow("(1) <- (2)");
      } else {
        comp = TQStringUtils::makeBoldRed("(1) != (2)");
      }
    } else if (!obj2) {
      if (obj1->InheritsFrom(TQFolder::Class())) {
        name = TQStringUtils::makeBoldBlue(name) + "/";
      }
      comp = TQStringUtils::makeBoldRed("(1) - ");
    } else if (!obj1) {
      if (obj2->InheritsFrom(TQFolder::Class())) {
        name = TQStringUtils::makeBoldBlue(name) + "/";
      }
      comp = TQStringUtils::makeBoldRed(" - (2)");
    }

    line = TQStringUtils::fixedWidth(TQStringUtils::repeatSpaces(indent * 2) + name, cColWidth_Name, "l");
    line.Append(TQStringUtils::fixedWidth(comp, cColWidth_Comp, "l"));
    std::cout << line.Data() << std::endl;
  }

  return false;
}

//__________________________________________________________________________________|___________

void TQFolder::printContents(const TString& options) {
  // this is an alias for the 'print' function
  this->printInternal(options,0,true);
}

//__________________________________________________________________________________|___________

void TQFolder::print(const TString& options) {
  // Prints the contents of this instance of TQFolder via std::cout. The following options
  // may be specified:
  //
  // - "r" recursively print contents of subfolders
  // - "r<N>" (<N> replaced by a positive integer number) like "r" but
  // does not go deeper than <N> levels
  // - "d" prints an additional column summarizing details of the
  // corresponding objects
  // - "h" do not print contents of folders starting with a dot (".")
  // recursively (if used with option "r")
  // - "H" like "h" but do not even list folders starting with a dot (".")
  // - "c" count and display the number of elements in each sub-folder
  // - "C" like "c" but count the number of elements recursively
  // - "l" additionally shows indentation lines
  // - "f[<filter>]" only shows elements whose names match <filter> (allows use
  // of wildcards "*" and "?" in the usual "ls-like" way)
  // - "t" additionally prints tags associated to instances of TQFolder
  // - "t[<filter>]" like "t" but only prints tags whose keys match <filter>
  //
  // The print command can be redirected to another folder by prepending the
  // corresponding path followed by a colon to the list of options, e.g.
  // "hello/world:trd". If wildcards are used in this path the print command will
  // be redirected to the first match only.
  this->printInternal(options,0,true);
}

//__________________________________________________________________________________|___________

void TQFolder::printInternal(TString options, int indent,bool resolve) {
  // internal pretty-print function
  // for documentation, please refer to the public variant

  // define the width of table columns as constants
  // TODO: make these parameters changeable options
  const int cColWidth_Total = TQLibrary::getConsoleWidth();
  const int cColWidth_Name = std::min((int)(0.5*cColWidth_Total),60);
  const int cColWidth_Class = std::min((int)(0.2*cColWidth_Total),30);
  const int cColWidth_Details = cColWidth_Total - cColWidth_Name - cColWidth_Class;

  /* parse the options string
   * =================================================== */

  // ===== redirection =====

  // read the path to print
  TString path = TQStringUtils::readPrefix(options, ":");

  // redirect print
  if (!path.IsNull()) {

    // get the folder to print
    TQFolder * folderToPrint = this->getFolder(path);

    // print if folder exists or throw an error message if not
    if (folderToPrint) {
      folderToPrint->printInternal(options,indent,resolve);
    } else {
      WARNclass("unknown path '%s'",path.Data());
    }

    // we are done here
    return;
  }


  TString flags;
  TString objectFilter;
  TString tagFilter;
  TString localOptions = options;

  int maxDepth = 0;
  bool hasMaxDepth = false;
  bool hasTagFlag = false;
  bool makeTeX = false;

  // read flags and filter definition
  bool stop = false;
  while (!stop) {

    // read flags without parameter
    if (TQStringUtils::readToken(localOptions, flags, "dhHcCl") > 0)
      continue;

    if (TQStringUtils::removeLeadingText(localOptions, "TeX")){
      makeTeX = true;
    }

    // read object filter flag "f" and filter definition
    if (TQStringUtils::readToken(localOptions, flags, "f", 1) > 0) {

      // don't allow multiple filters
      if (objectFilter.Length() > 0) {
        ERRORclass("cannot define more than one object filter using 'f'");
        return;
      }

      // expect filter definition after 'f' option
      if (!(TQStringUtils::readBlock(localOptions, objectFilter, "[]") > 0
            && objectFilter.Length() > 0)) {
        ERRORclass("filter definition expected after option 'f'");
        return;
      }

      continue;
    }

    // read recursion flag "r" and max depth
    if (TQStringUtils::readToken(localOptions, flags, "r", 1) > 0) {

      // read max depth definition after 'r' option
      TString maxDepthStr;
      if (TQStringUtils::readToken(localOptions, maxDepthStr,
                                   TQStringUtils::getNumerals()) > 0) {
        // don't allow multiple maximum recursion depths
        if (hasMaxDepth) {
          ERRORclass("cannot define more than one maximum recursion depth using 'r'");
          return;
        } else {
          maxDepth = maxDepthStr.Atoi();
          if(maxDepth == 0) resolve = false;
          hasMaxDepth = true;
        }
      } else {
        maxDepth = -1;
        hasMaxDepth = true;
      }

      continue;
    }

    // read tag flag "t" and filter definition
    if (TQStringUtils::readToken(localOptions, flags, "t", 1) > 0) {

      // don't allow multiple filters
      if (hasTagFlag) {
        ERRORclass("cannot define more than one tag filter using 't'");
        return;
      } else {
        hasTagFlag = true;
      }

      // read filter definition after 't' option
      TQStringUtils::readBlock(localOptions, tagFilter, "[]");

      continue;
    }

    // no valid tokens left to parse
    stop = true;
  }

  // unexpected options left?
  if (localOptions.Length() > 0) {
    ERRORclass("unknown option '%c'", localOptions[0]);
    return;
  }

  // take care of import links
  if(resolve){
    DEBUGclass("resolving import links from print funtion");
    this->resolveImportLinks(false);
  }

  // parse the flags
  bool flagDetails = flags.Contains("d");
  bool flagRecursive = flags.Contains("r");
  bool hideElements = flags.Contains("h");
  bool hideAll = flags.Contains("H");
  bool countElements = flags.Contains("c");
  bool countElementsRec = flags.Contains("C");
  bool flagIndentLines = flags.Contains("l");

  /* print the headline if level of indentation is zero
   * =================================================== */

  if (indent == 0) {
    if(!makeTeX){
      TString headline;
      headline.Append(TQStringUtils::fixedWidth("Name", cColWidth_Name, "l"));
      headline.Append(TQStringUtils::fixedWidth("Class", cColWidth_Class, "l"));
      if (flagDetails)
        headline.Append(TQStringUtils::fixedWidth("Details", cColWidth_Details, "l"));
      std::cout << TQStringUtils::makeBoldWhite(headline) << std::endl;
      std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", TQStringUtils::getWidth(headline))) << std::endl;
    } else {
      std::cout << "\\documentclass{standalone}\n";
      std::cout << "\\usepackage[T1]{fontenc}\n";
      std::cout << "\\usepackage{pxfonts}\n";
      std::cout << "\\usepackage[html]{xcolor}\n";

      std::cout << "\\definecolor{folder} {HTML}{5555FF}\n";
      std::cout << "\\definecolor{samplefolder}{HTML}{55FF55}\n";
      std::cout << "\\definecolor{hidden} {HTML}{FF55FF}\n";
      std::cout << "\\definecolor{tag} {HTML}{00AAAA}\n";
      std::cout << "\\providecommand{\\tabularnewline}{\\\\}\n";
      std::cout << "\\newcommand\\hindent{\\hspace{2em}}\n";
      std::cout << "\\newcommand\\stylefolder[1]{{\\bfseries\\color{folder}#1}}\n";
      std::cout << "\\newcommand\\stylesamplefolder[1]{{\\bfseries\\color{samplefolder}#1}}\n";
      std::cout << "\\newcommand\\styletag[1]{{\\color{tag}#1}}\n";
      std::cout << "\\newcommand\\stylehidden[1]{{\\bfseries\\color{hidden}#1}}\n";

      std::cout << "\\begin{document}\\ttfamily\n";
      std::cout << "\\begin{tabular}{l l";
      if(flagDetails) std::cout << " l";
      std::cout << "}\n";
      std::cout << "\\bfseries Name & \\bfseries Class";
      if(flagDetails) std::cout << " & \\bfseries Details";
      std::cout << "\\tabularnewline\\hline\\hline\n";
    }
  }


  TString indentStr;
  if (flagIndentLines)
    indentStr = TQStringUtils::getIndentationLines(indent);
  else if(makeTeX){
    indentStr = TQStringUtils::repeat("\\hindent{}",indent);
  } else {
    indentStr = TQStringUtils::repeatSpaces(indent * 2);
  }


  if (hasTagFlag && getNTags() > 0) {
    // import tags
    TList * tagKeys = this->getListOfKeys(tagFilter);
    if (tagKeys) {
      TQIterator itr(tagKeys,true);
      while(itr.hasNext()){
        TObject* obj = itr.readNext();

        TString key = obj->GetName();
        TString type;
        this->getTypeOfTagAsString(key, type);
        TString details;
        if (flagDetails) {
          this->getValueOfTagAsString(key, details);
        }

        if(makeTeX){
          std::cout << indentStr;
          key.ReplaceAll("_","\\_");
          std::cout << "\\styletag{<" << key << ">}";
          std::cout << " & ";
          std::cout << "<Tag:" << type << ">";
          if(flagDetails){
            std::cout << " & ";
            details.ReplaceAll("$","\\$");
            details.ReplaceAll("_","\\_");
            std::cout << details;
          }
          std::cout << "\\tabularnewline";
          std::cout << std::endl;
        } else {
          std::cout << indentStr;
          std::cout << TQStringUtils::fixedWidth(TQStringUtils::makeTurquoise((TString)"<"+key+">"), cColWidth_Name - 2*indent, "l");
          std::cout << TQStringUtils::fixedWidth(TString::Format("<Tag:%s>",type.Data()), cColWidth_Class, "l");
          if(flagDetails)
            std::cout << TQStringUtils::fixedWidth(details, cColWidth_Details, "l");
          std::cout << std::endl;
        }
      }
    }
  }


  // iterate over every element in the folder
  TQIterator itr(this->GetListOfFolders());
  while(itr.hasNext()){
    TObject* obj = itr.readNext();

    // get object and class name
    TString objName = obj->GetName();
    TString className = obj->IsA()->GetName();

    // skip elements starting with "." if "H" options was specified
    if (hideAll && objName.BeginsWith("."))
      continue;

    TString bareName = objName;
    TString nameAppendix;

    if (obj->InheritsFrom(TQFolder::Class())) {

      // skip folder if a filter is specified which the folder doesn't pass
      if (!objectFilter.IsNull()
          && (!flagRecursive || ((TQFolder*)obj)->getNObjects(objectFilter, true) == 0)
          && !TQStringUtils::matchesFilter(objName, objectFilter, ",", true))
        continue;

      nameAppendix.Append("/");

      // append the number of elements in the folder (if requested)
      if (countElements || countElementsRec) {
        // count the elements
        int nElements = -1;
        int nElementsRec = -1;
        if (countElements)
          nElements = ((TQFolder*)obj)->getNElements(false);
        if (countElementsRec)
          nElementsRec = ((TQFolder*)obj)->getNElements(true);
        // append the number of elements as string
        if (countElements && countElementsRec && (nElements != nElementsRec))
          nameAppendix = TString::Format(" [c:%d,C:%d]", nElements, nElementsRec);
        else if (countElements)
          nameAppendix = TString::Format(" [%d]", nElements);
        else if (countElementsRec)
          nameAppendix = TString::Format(" [%d]", nElementsRec);
      }
    } else {
      // skip element if a filter is specified which the element doesn't pass
      if (objectFilter.Length() > 0 && !TQStringUtils::matches(objName, objectFilter))
        continue;
    }

    TString details;
    if (flagDetails) {
      details = TQStringUtils::getDetails(obj);
    }

    std::cout << indentStr;

    if(makeTeX){
      bareName.ReplaceAll("_","\\_");
      if (obj->InheritsFrom(TQFolder::Class())) {
        if (obj->InheritsFrom(TQSampleFolder::Class())) {
          std::cout << "\\stylesamplefolder{" << bareName << "}";
        } else if (objName.BeginsWith(".")) {
          std::cout << "\\stylehidden{" << bareName << "}";
        } else {
          std::cout << "\\stylefolder{" << bareName << "}";
        }
      } else {
        std::cout << bareName;
      }
      std::cout << nameAppendix;
      std::cout << " & " << className;
      if (flagDetails)
        std::cout << " & " << details;
      std::cout << "\\tabularnewline";
      std::cout << std::endl;
    } else {
      if (obj->InheritsFrom(TQFolder::Class())) {
        if (obj->InheritsFrom(TQSampleFolder::Class())) {
          bareName = TQStringUtils::makeBoldGreen(bareName);
        } else if (objName.BeginsWith(".")) {
          bareName = TQStringUtils::makeBoldPink(bareName);
        } else {
          bareName = TQStringUtils::makeBoldBlue(bareName);
        }
      }
      std::cout << TQStringUtils::fixedWidth(bareName+nameAppendix, cColWidth_Name-2*indent, "l.");
      std::cout << TQStringUtils::fixedWidth(className, cColWidth_Class, "l");
      if (flagDetails)
        std::cout << TQStringUtils::fixedWidth(details, cColWidth_Details, "l");
      std::cout << std::endl;
    }

    // print the contents of subfolders recursively
    if ((maxDepth == -1 || maxDepth > indent) && obj->InheritsFrom(TQFolder::Class())
        && !(hideElements && objName.BeginsWith(".")))
      ((TQFolder*)obj)->printInternal(options, indent + 1,true);

  }
  if(indent == 0 && makeTeX){
    std::cout << "\\end{tabular}\n\\end{document}" << std::endl;
  }

}


//__________________________________________________________________________________|___________

bool TQFolder::checkConsistency(bool verbose) {
  // Checks the consistency of system of bidirectional pointers between instances of
  // TQFolder and their base folders and returns true if all references are consistent
  // and false otherwise. It prints an error message in case <verbose> is true and
  // an inconsistency is found.

  bool failed = false;

  // loop over all subfolders in this folder
  TQIterator itr(this->getListOfFolders(), true);
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();
    if (!obj->InheritsFrom(TQFolder::Class())) {
      // ignore objects not an instance of TQFolder
      continue;
    }
    TQFolder * folder = (TQFolder*)obj;
    // check if base folder of subfolder is this folder
    if (folder->getBase() != this) {
      if (verbose) {
        ERRORclass("Folder '%s' in folder '%s' has pointer to wrong base folder", folder->GetName(),this->getPath().Data());
      }
      failed = true;
      // check consistency recursively
    } else if (!folder->checkConsistency(verbose)) {
      failed = true;
    }
  }

  return !failed;
}


//__________________________________________________________________________________|___________

bool TQFolder::isBaseOf(TQFolder * folder) {
  // Returns true if this instance of TQFolder is a (not necessarily direct) base
  // folder of <folder> and false otherwise.

  // stop if invalid folder given: no is-base-of relation
  if (!folder) {
    return false;
  }

  // get base folder of <folder> and stop if
  // it has no base folder (returning false)
  TQFolder * base = folder->getBase();
  if (!base) {
    return false;
  }

  // Check if direct base of <folder> is this folder and ...
  if (this == base) {
    // ... return true if yes and ...
    return true;
  } else {
    // ... recursively check isBaseOf(...) otherwise
    return isBaseOf(base);
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::removeObject(const TString& name) {
  // Removes the reference of the object referred to by <path> from the corresponding
  // instance of TQFolder and returns true if has been removed successfully. The
  // object itself is not affected. [Please note: this method is a wrapper to
  // TQFolder::deleteObject(name, true).]

  return (deleteObject(name, true) > 0);
}


//__________________________________________________________________________________|___________

int TQFolder::deleteObject(TString path, bool removeOnly, TClass *tclass) {
  // Deletes/removes the object referred to by <path> from the corresponding
  // instance of TQFolder and return the number of deleted/removed objects. If
  // <removeOnly> is false (this is the default) the corresponding objected is deleted
  // and its memory is freed. If <removeOnly> is true only the object's reference is
  // removed. If a dash "-" is appended to the object's reference the containing
  // instances of TQFolder are deleted/removed recursively as well if and only if by
  // the operation an instance of TQFolder has become empty. [Please note: if
  // <removeOnly> is true the corresponding instances of TQFolder won't be deleted but
  // only detached from its base folders. One should take care in this case to not
  // loose the pointers to these folders since the inter-reference between them is
  // lost.] If an exclamation mark "!" is appended to the object's reference this
  // method can be used to delete non-empty instances of TQFolder including its
  // content. Please note: if "-" and "!" are combined one needs to append "!-"
  // (and NOT "-!").
  //

  // search for the local object to delete (or to contain the object to delete)

  const bool collapse = (TQStringUtils::removeTrailing(path,"-")>0);
  const bool force = (TQStringUtils::removeTrailing(path,"!")>0);

  TQIterator itr(this->getListOfObjectPaths(path, tclass),true);
  // the number of objects deleted/removed
  int nDel = 0;
  while(itr.hasNext()){
    TObject* name = itr.readNext();
    TString objpath(name->GetName());
    TString objname = TQFolder::getPathTail(objpath);

    TQFolder* f = objpath.IsNull() ? this : this->getFolder(objpath);
    if(!f) continue;

    TObject* obj = f->getObject(objname);
    TQFolder* objf = dynamic_cast<TQFolder*>(obj);

    if(objf){
      if(objf->isEmpty() || force){
        DEBUGclass("deleting folder '%s' in '%s' %s",objf->GetName(),objf->getPath().Data(),(objf->isEmpty() ? "(empty)" : "(forced)"));
        objf->detachFromBase();
        nDel++;
        if(!removeOnly) delete objf;
      }
    } else {
      DEBUGclass("deleting object '%s' (class: %s)",obj->GetName(),obj->Class()->GetName());
      f->Remove(obj);
      nDel++;
      if(!removeOnly) delete obj;
    }
    while(collapse && f->isEmpty()){
      TQFolder* tmpf = f->getBase();
      f->detachFromBase();
      delete f;
      f = tmpf;
    }
  }

  // return the total number of objects deleted
  return nDel;
}


//__________________________________________________________________________________|___________

int TQFolder::deleteAll() {
  // Deletes all elements of this folder. This will also delete subfolders including
  // their elements recursively. Returns the total number of deleted objects.
  // Remark: If the folder contains TQImportLinks, only the links will be deleted.
  // The corresponding content that still resides on disk will not be touched
  // and can still be accessed via TQFolder::loadFolder()

  // the number of objects that have been deleted
  int nDel = 0;

  // loop over elements in the folder and delete them
  TQIterator itr(GetListOfFolders());
  while (itr.hasNext()) {
    // the object
    TObject * obj = itr.readNext();

    // remove the element from this folder
    Remove(obj);

    // delete contents of local object if it is a folder
    // (only needed to get the correct number of objects deleted)
    if (obj->InheritsFrom(TQFolder::Class())) {
      nDel += ((TQFolder*)obj)->deleteAll();
    }

    // delete the object itself
    delete obj;
    nDel++;
  }

  // return the number of objects that have been deleted
  return nDel;
}


//__________________________________________________________________________________|___________

void TQFolder::sortByNameRecursive() {
  // Sorts the elements of this folder and all its subfolders by
  // ascending alphabetical order. This does not affect the objects
  // itself but only the order of references (pointers to these
  // objects) kept by this instance of TQFolder.
  TQFolderIterator itr(this->getListOfFolders("*"),true);
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    if(!f) continue;
    if(f->isEmpty()) continue;
    f->sortByName();
  }
}

//__________________________________________________________________________________|___________

int TQFolder::sortByName() {
  // Sorts the elements of this folder by ascending alphabetical order and returns
  // the number of elements processed. This does not affect the objects itself but
  // only the order of references (pointers to these objects) kept by this instance
  // of TQFolder.

  // create a list (TList) of names of elements in
  // this folder (stored as instances of TObjString)
  std::vector<TString> names;
  TQIterator itr1(this->GetListOfFolders());
  while (itr1.hasNext()) {
    names.push_back(itr1.readNext()->GetName());
  }

  // sort the list of names
  std::sort(names.begin(),names.end());

  // iterate over the (sorted) list of names and remove the corresponding
  // object from the list of elements and add it back again (this effectively
  // results in sorting the elements by name since these references are
  // ordered according to the order of insertion)
  for(auto name:names){
    TObject * obj = this->getObject(name);
    this->Remove(obj);
    this->Add(obj);
  }

  // return the number of elements processed
  return names.size();
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::detachFromBase() {
  // Detaches this instance of TQFolder from its base folder and returns a pointer
  // to this folder (which became the root of this tree of folders by this operation).
  // This method ensures that the bidirectional reference between base folder and
  // this folder are updated properly.

  // if this instance of TQFolder has a base folder ...
  if (fBase) {
    // ... remove this folder from the list of folders of the base folder and ...
    fBase->Remove(this);
    // ... remove the reference to the base folder
    fBase = 0;
  }

  // return a pointer to this instance of TQFolder
  return this;
}


//__________________________________________________________________________________|___________

bool TQFolder::moveTo(TQFolder * dest, const TString& newName) {
  // Moves this instance of TQFolder to the folder <dest> and returns true in case
  // of success and false otherwise. The operation is not performed in case this
  // instance of TQFolder is a base folder of the destination folder. Optionally, a
  // new name <newName> of this instance of TQFolder can be specified to be applied
  // upon successfully having moved it to the destination folder. This method ensures
  // that the bidirectional reference between base folder and this folder are updated
  // properly.



  // need a valid destionation folder
  if (!dest) {
    DEBUGclass("Null pointer TQFolder destination in moveTo");
    return false;
  }
  DEBUGclass(TString::Format("Will now try to move this folder to destination folder %s", dest->getPath().Data()));

  // cannot move folder to itself
  if (dest == this) {
    DEBUGclass("Cannot move folder to itself");
    return false;
  }

  // in case the destination folder is the same as the current base folder ...
  if (dest == fBase) {
    // ... just perform the renaming
    if (!newName.IsNull() && isValidName(newName)) {
      this->SetName(newName.Data());
      return true;
    } else {
      DEBUGclass("newName is null or is not valid");
      return false;
    }
  }

  // this instance of TQFolder must not be a base folder of the destination folder
  if (this->isBaseOf(dest)) {
    DEBUGclass("this instance of TQFolder is a base folder of the destination folder!");
    return false;
  }

  // try to move this instance of TQFolder by temporarily removing its
  // reference to its base folder and adding it to the destination folder
  TQFolder * tmpBase = fBase;
  fBase = NULL;
  TObject * add;
  if (newName.IsNull()) {
    add = dest->addObject(this);
  } else {
    // additionally set a new name
    add = dest->addObject(this, newName + "::");
  }

  if (add) {
    // successfully moved this instance of TQFolder to destination folder
    // => remove reference of former base folder to this instance of TQFolder
    if (tmpBase) {
      tmpBase->Remove(this);
    }
    return true;
  } else {
    // failed to move this instance of TQFolder
    // => restore reference to base folder
    fBase = tmpBase;
    DEBUGclass("Failed to move instance of TQFolder");
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::moveTo(const TString& dest) {
  // Moves this instance of TQFolder to the one referred to by <dest> and returns
  // true in case of success and false otherwise. The operation is not performed in
  // case this instance of TQFolder is a base folder of the destination folder.
  // Optionally, the folder can be renamed upon successfully moving it to its new
  // location by appending "::" followed by the new name to <dest>. This method
  // ensures that the bidirectional reference between base folder and this folder
  // are updated properly. Examples:
  //
  // - moveTo("/hello") moves this folder to "/hello"
  // - moveTo("/hello :: myNewName") moves this folder to "/hello" and renames it
  // to "myNewName".
  //
  // [Please note: this is a wrapper to TQFolder::moveTo(TQFolder * dest, ...).]

  // split up the destination path into <path> and <newName> (separated by "::")
  DEBUGclass(TString::Format("moveTo called with argument %s", dest.Data()));
  TString path;
  TString newName;
  if (!parseDestination(dest, path, newName)) {
    DEBUGclass("Failed to parse destination in moveTo(dest)");
    return false;
  }

  // now get the destination folder and move this instance to it and rename it
  DEBUGclass(TString::Format("Will now try to move this folder to path %s and with new name %s", path.Data(), newName.Data()));
  return moveTo(this->getFolder(path), newName);
}


//__________________________________________________________________________________|___________

bool TQFolder::moveFolder(const TString& source, const TString& dest) {
  // Moves the instance of TQFolder referred to by <source> to the one referred to
  // by <dest> and returns true in case of success and false otherwise. The operation
  // is not performed in case the source instance of TQFolder is a base folder of
  // the destination folder. Optionally, the folder can be renamed upon successfully
  // moving it to its new location by appending "::" followed by the new name to <dest>.
  // This method ensures that the bidirectional reference between base folder and this
  // folder are updated properly. Please note that this method does NOT behave
  // exactly as the shell command "mv" does. Examples:
  //
  // - moveFolder("/hello", "/world") moves the folder "/hello" to "/world" (resulting
  // in its new path "/world/hello")
  // - moveFolder("/hello", "/world ::myNewName") moves the folder "/hello" to "/world"
  // and renames it to "myNewName" (resulting in its new path "/world/myNewName")
  //
  // [Please note: this is a wrapper to TQFolder::moveTo(TQFolder * dest, ...).]

  // get the source folder
  TQFolder * src = this->getFolder(source);
  if (!src) {
    return false;
  }

  // split up the destination path into <path> and <newName> (separated by "::")
  TString path;
  TString newName;
  if (!parseDestination(dest, path, newName)) {
    return false;
  }

  // now get the destination folder and move the source folder to it and rename it
  return src->moveTo(this->getFolder(path), newName);
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::copy(const TString& newName) {
  // Creates an independent copy of this instance of TQFolder including all its
  // sub-elements and return a pointer to it. Optionally, a new name <newName> can
  // be assigned to the copy.
  
  TString name(newName.IsNull() ? this->GetName() : newName.Data());
  
  // clone this folder
  TQFolder* copy = this->newInstance(name);
  if(!copy){
    ERRORclass("unable to copy object '%s'",name.Data());
    return NULL;
  }
  copy->importTags(this);

  DEBUGclass("resolving import links for copy funtion");  
  this->resolveImportLinks(true);
  
  // loop over every element in the folder
  TQIterator itr(GetListOfFolders());
  while(itr.hasNext()){
    TObject*obj = itr.readNext();
    // count this element
    if (obj->InheritsFrom(TQFolder::Class())){
      TQFolder* f = dynamic_cast<TQFolder*>(obj);
      if(f->getTagBoolDefault(".allowCopy",true)){
        TQFolder* fcopy = f->copy();
        if(fcopy){
          copy->addFolder(fcopy);
        }
      }
    } else {
      TObject* clone = obj->Clone();
      copy->addObject(clone);
    }
  }

  // return the copy with new name
  return copy;
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::copyTo(TQFolder * dest) {
  // Creates an independet copy of this instance of TQFolder (including all its
  // sub-elements), adds it to <dest>, and returns a pointer to the copy in case of
  // success and a NULL pointer otherwise.

  // need a valid instance of TQFolder to copy this folder to
  if (!dest) {
    return NULL;
  }

  // make a copy of this instance of TQFolder ...
  TQFolder * copy = this->copy();

  // ... and try to add it to the destination folder
  if (dest->addObject(copy)) {
    // return a pointer to the copy in case of success
    return copy;
  } else {
    // delete the copy again and return a NULL pointer in case of failure
    delete copy;
    return NULL;
  }
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::copyTo(const TString& dest) {
  // Creates an independet copy of this instance of TQFolder (including all its
  // sub-elements), adds it to the instance of TQFolder referred to by <dest>, and
  // returns a pointer to the copy in case of success and a NULL pointer otherwise.
  //
  // [Please note: this is a wrapper to TQFolder::copyTo(TQFolder * dest).]

  // make copy
  return this->copyTo(this->getFolder(dest));
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::copyFolder(const TString& source, const TString& dest) {
  // Creates an independet copy of this instance of the TQFolder at the path
  // <source> (including all its sub-elements), adds it to the instance of
  // TQFolder referred to by <dest>, and returns a pointer to the copy in case
  // of success and a NULL pointer otherwise.
  //
  // [Please note: this is a wrapper to TQFolder::copyTo(TQFolder * dest).]

  TQFolder * src = this->getFolder(source);
  if (!src) {
    return NULL;
  }

  return src->copyTo(this->getFolder(dest));
}


//__________________________________________________________________________________|___________

int TQFolder::getNElements(bool recursive, TClass * tclass) {
  // Returns the number of elements (objects and subfolders) in this folder. If
  // recursive = true, the number of elements in subfolders is added recursively.
  // If a class is specified, elements are only counted if they inherit from that
  // class

  if(recursive){
    DEBUGclass("resolving import links to count elements");      
    this->resolveImportLinks(recursive);
  }

  // the number of elements to be returned
  int nElements = 0;

  // loop over every element in the folder
  TQIterator itr(this->GetListOfFolders());
  while (itr.hasNext()){
    TObject * obj = itr.readNext();
    // count this element
    if (!tclass || obj->InheritsFrom(tclass))
      nElements++;

    // count the subelements recursively
    if (recursive && obj->InheritsFrom(TQFolder::Class()))
      nElements += ((TQFolder*)obj)->getNElements(true, tclass);

  }

  return nElements;

}

//__________________________________________________________________________________|___________

int TQFolder::getNObjects(const TString& nameFilter) const {
  int nObjects = 0;
  // loop over every element in the folder
  TQIterator itr(GetListOfFolders());
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    if (nameFilter.IsNull() || TQStringUtils::matches(TString(obj->GetName()), nameFilter))
      nObjects++;
  }
  return nObjects;
}

//__________________________________________________________________________________|___________

int TQFolder::getNObjects(const TString& nameFilter, bool recursive) {
  // return the number of objects matching the given name filter
  if(recursive) this->resolveImportLinks(true);
  // the number of objects
  int nObjects = 0;
  // loop over every element in the folder
  TQIterator itr(GetListOfFolders());
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    if (nameFilter.IsNull() || TQStringUtils::matches(TString(obj->GetName()), nameFilter))
      nObjects++;
    if (recursive && obj->InheritsFrom(TQFolder::Class()))
      nObjects += ((TQFolder*)obj)->getNObjects(nameFilter, recursive);
  }
  return nObjects;
}


//__________________________________________________________________________________|___________

bool TQFolder::isEmpty() const {
  // Returns true if this instance of TQFolder does not contain any element and
  // false otherwise.
  TCollection* c = this->GetListOfFolders();
  if(!c) return true;
  return (c->GetEntries() == 0);
}


//__________________________________________________________________________________|___________

int TQFolder::getOwnSize() const {
  return sizeof(*this);
}

//__________________________________________________________________________________|___________  

int TQFolder::getSize(bool memoryOnly) {
  // Returns an estimated size (in bytes) of this instance of TQFolder including
  // its sub-elemets in memory. The number returned is mainly calculated from the
  // estimated size of histograms stored within the folder hierarchy (using the
  // method TQHistogramUtils::estimateSize(...)) and a contribution for any other
  // type of object obtained from the C++ function sizeof(...). Please note that
  // this does determine the size of the pointer rather than the size of the object
  // itself. Thus, TQFolder::getSize() does only provide reasonable results if most
  // elements within the folder hierarchy are histograms (instances of TH1).

  if(!memoryOnly){
    DEBUGclass("resolving import links to estimate size");          
    this->resolveImportLinks(true);
  }

  // the size of this folder
  int size = this->getOwnSize() + sizeof(*this->fFolders) + this->getTagsSize() + this->getFlagsSize();

  // loop over every element in the folder
  TQIterator itr(GetListOfFolders());
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    // add the size of every element
    if (obj->InheritsFrom(TQFolder::Class()))
      size += ((TQFolder*)obj)->getSize();
    else if (obj->InheritsFrom(TH1::Class()))
      size += TQHistogramUtils::estimateSize((TH1*)obj);
    else
      size += sizeof(*obj);
  }
  // return the size of this hierachy in bytes

  return size;
}


//__________________________________________________________________________________|___________

TString TQFolder::getSizeAsString(bool memoryOnly) {
  // TODO: move this to TQStringUtils

  // the size
  double size = (double)getSize(memoryOnly);

  // make the size a readable number
  int power = 0;
  while ((size >= 1000.)) {
    power++;
    size /= 1000.;
  }

  TString unit = "B";
  if (power == 1)
    unit.Prepend("k");
  else if (power == 2)
    unit.Prepend("M");
  else if (power == 3)
    unit.Prepend("G");
  else if (power == 4)
    unit.Prepend("T");
  else
    unit.Prepend("?");

  return TString::Format("%.1f %s", size, unit.Data());
}


//__________________________________________________________________________________|___________

void TQFolder::setBase(TQFolder * base_) {
  // set the base folder
  fBase = base_;
}


//__________________________________________________________________________________|___________

TQTaggable * TQFolder::getBaseTaggable() const {
  // retrieve the base folder as TQTaggable
  return fBase;
}


//__________________________________________________________________________________|___________

TList * TQFolder::getDescendantTaggables() {
  return this->getListOfFolders("?");
}


//__________________________________________________________________________________|___________

TList * TQFolder::getListOfTaggables(const TString& taggables) {
  // retrieve list of subfolders
  return getListOfFolders(taggables);
}

//__________________________________________________________________________________|___________

TList * TQFolder::getTaggablesByName(const TString& taggables) {
  // retrieve list of subfolders
  return getListOfFolders(taggables);
}


//__________________________________________________________________________________|___________

TList * TQFolder::getListOfFolders(const TString& path_, TClass * tClass, bool toplevelOnly, bool firstMatchOnly) {
  // retrieve a list of folders under the given path matching the class
  // TODO: handle tag requirements
  DEBUGfunc(TString::Format("called with '%s', topLevelOnly=%d, firstMatchOnly=%d",path_.Data(),(int)toplevelOnly,(int)firstMatchOnly));

  // check for comma-separated lists
  if(path_.Contains(",")){
    TList* retval = new TList();
    std::vector<TString> paths = TQStringUtils::split(path_,",");
    for(size_t i=0; i<paths.size(); i++){
      TList* sublist = this->getListOfFolders(paths[i], tClass, toplevelOnly, firstMatchOnly);
      if(sublist){
        retval->AddAll(sublist);
        delete sublist;
      }
    }
    if(retval->GetEntries() < 1){
      delete retval;
      return NULL;
    }
    return retval;
  }

  // remove leading and trailing spaces and tabs
  TString path = TQStringUtils::trim(path_);

  // start at root folder if path starts with "/"
  if (TQStringUtils::removeLeading(path,"/") > 0) {
    // get the root folder
    TQFolder * root = getRoot();
    // return folders relative to root folder
    return root->getListOfFolders(path, tClass, toplevelOnly, firstMatchOnly);
  }

  // stop if path is empty
  if (path.IsNull()) return 0;

  TString find(path);
  TString findNext;

  // split path in this level and next level
  Ssiz_t splitPos = find.First('/');
  if (splitPos != kNPOS) {
    // split in <find>/<findNext>
    findNext = find(splitPos + 1, find.Length());
    find.Remove(splitPos);
    TQStringUtils::removeLeading(findNext,"/"); //remove all leading slashes. Multiple consecutive slashes are interpreted as one
    //[disabled, multiple slashes should now be treated as one] stop if there is another slash ("//" before)
    //if (findNext.BeginsWith("/")) return 0;
  }

  // resulting list of folders
  TList * list = NULL;

  // handle wildcards
  if (find.EqualTo("?") || find.EqualTo("*")) {
    bool stop = false;
    // in case of a "*" wildcard: consider also this folder
    if (find.EqualTo("*")) {
      if(!firstMatchOnly){
        DEBUGclass("resolving import links because '*' was found in path");
        this->resolveImportLinks(true);
      }

      if (!findNext.IsNull()) {
        // get the list of folders recursively
        list = getListOfFolders(findNext, tClass, toplevelOnly, firstMatchOnly);
        //if we only want the topmost folders we might have to skipp some of the lines below
        if((firstMatchOnly || toplevelOnly) && list && (list->GetEntries() > 0)) stop=true;
      } else if (!tClass || this->InheritsFrom(tClass)){
        /* add this folder to the list if its a valid element*/
        list = new TList();
        list->Add(this);
        if(toplevelOnly || firstMatchOnly) stop = true; //if we added this folder to the list and toplevelOnly is true, we should not iterate over subfolders anymore, e.g., to avoid multiple counting
      }

      findNext = path;
    } else {
      if(!firstMatchOnly){
        DEBUGclass("resolving import links because '?' was found in path");
        this->resolveImportLinks(false);
      }
    }

    // loop over all sub folders
    if (!stop) {
      TQFolderIterator itr(GetListOfFolders());
      while (itr.hasNext()){
        /* consider only valid element: valid pointer to
         * subclass of the template_ (default is TQFolder) */
        TQFolder* obj = itr.readNext();
        if(!obj) continue;
        if (!findNext.IsNull()){
          // get the list of folders recursively
          TList * sublist = obj->getListOfFolders(findNext, tClass, toplevelOnly, firstMatchOnly);
          if (sublist) {
            if (list) {
              list->AddAll(sublist);
              delete sublist;
            } else {
              list = sublist;
              if(firstMatchOnly) stop = true;
            }
          }
        } else {
          if(!tClass || obj->InheritsFrom(tClass)){
            // add this folder to the list
            if (!list) list = new TList();
            list->Add(obj);
            if(firstMatchOnly) stop = true;
          }
        }
      }
    }
  } else if(find.Contains("*")){
    DEBUGclass(TString::Format("resolving import links because '*' was found in path '%s'",find.Data()));                    
    this->resolveImportLinks(false);

    TQFolderIterator itr(GetListOfFolders());
    while (itr.hasNext()){
      bool stop = false;
      TQFolder* obj = itr.readNext();
      if(!obj) continue;
      if(!TQStringUtils::matches(obj->GetName(),find)) continue; //TODO: maybe this check can somehow be moved beyond the check for the class type? Could save some performance....
      if (!findNext.IsNull()){
        // get the list of folders recursively
        TList * sublist = obj->getListOfFolders(findNext, tClass, toplevelOnly, firstMatchOnly);
        if (sublist) {
          if (list) {
            list->AddAll(sublist);
            delete sublist;
          } else {
            if(firstMatchOnly) stop=true;
            list = sublist;
          }
        }
      } else {
        if(!tClass || obj->InheritsFrom(tClass)){
          // add this folder to the list
          if (!list) list = new TList();
          if(firstMatchOnly) stop=true;          
          list->Add(obj);
        }
      }
      if(stop) break;
    }
  } else {
    TQFolder * element = 0;

    if (find.EqualTo("..")) {
      // requested element is the base folder
      element = getBase();
    } else if (find.EqualTo(".")) {
      // requested element is this folder
      element = this;
    } else {
      // requested element is called <find>
      DEBUGclass("resolving import link for '%s' in '%s'",find.Data(),this->getPath().Data());
      this->resolveImportLink(find,false);
      
      element = dynamic_cast<TQFolder*>(FindObject(find.Data()));
    }

    /* consider only valid elements: valid pointer to
     * subclass of the template_ (default is TQFolder) */
    if (element){
      if (!findNext.IsNull()) {
        // get the list of folders recursively
        list = element->getListOfFolders(findNext, tClass, toplevelOnly, firstMatchOnly);
      } else {
        // add this folder to the list
        if(tClass ? element->InheritsFrom(tClass) : element->InheritsFrom(TQFolder::Class())){
          list = new TList();

          list->Add(element);
        }
      }

    }

  }
  return list;
}

//__________________________________________________________________________________|___________

//protected (internal function)
void TQFolder::getFoldersWithTagEquivalentToInternal(const TQValue* tag, std::vector<TQFolder*>& matches) {
  
  if (this->hasEquivalentTag(tag,true) && !this->isTagOverwrittenByDescendants(tag->GetName()) ) {
  //if this folder fulfills the requirements simply add it
    //std::cout<<"Adding Folder to results: "<<this->getPath().Data()<<std::endl;
    //this->printTags();
    //matches.insert(this);
    matches.push_back(this);
    return;
  }
  
  //if this folder does not match, recurse into subfolders
  TQFolderIterator itr(this->getListOfFolders("?"),true);
  while (itr.hasNext()) {
    TQFolder* f = itr.readNext();
    f->getFoldersWithTagEquivalentToInternal(tag, matches);
  }
  return;
}

//public interface
std::vector<TQFolder*> TQFolder::getFoldersWithTagEquivalentTo(const TQValue* tag) {
  // determines a set of (sub) folders which have a tag equivalent to the one 
  // provided. Tags on containing folders are 
  // considered as well (i.e., tags are being searched for
  // towards the root node of the folder structure)
  // note that once a folder matches its sub folders are no longer considered
  // even if the relevant tag might change when retrieving it from a sub folder
  // of the one in the returned set
  std::vector<TQFolder*> results = {};
  this->getFoldersWithTagEquivalentToInternal(tag, results);
  return results;
}

std::vector<TQFolder*> TQFolder::getFoldersWithTagEquivalentTo(const TQValue& tag) {
  return this->getFoldersWithTagEquivalentTo(&tag);
}

std::vector<TQFolder*> TQFolder::getFoldersWithTagsEquivalentTo(const std::vector<const TQValue*>& tags) {
  // determines a set of (sub) folders which have tags equivalent to those provided
  // (applying a logical "AND" on requirements). Tags on containing folders are 
  // considered as well (i.e., tags are being searched for
  // towards the root node of the folder structure)
  std::vector<TQFolder*> results = {this};
  std::vector<TQFolder*> previousResults = {};
  for (const TQValue* thisTag : tags) {
    previousResults = results; //temprary results are now results of the previous iteration
    results.clear();
    for (TQFolder* prevMatch : previousResults) {
      if (!prevMatch) continue;
      prevMatch->getFoldersWithTagEquivalentToInternal(thisTag, results); //adds itself or all subfolders having the correct tag (key/value)
    }
  }
  return results;
  
}

//__________________________________________________________________________________|___________

std::vector<TString> TQFolder::getFolderPaths(const TString& path_, TClass * tClass, bool toplevelOnly) {
  // returns a std::vector<TString> containing the full paths of folders matching
  // the given requirements.
  DEBUGclass("getting folder paths for '%s'",path_.Data());
  std::vector<TString> vec;
  TQFolderIterator itr(this->getListOfFolders(path_,tClass,toplevelOnly),true);
  while (itr.hasNext()) {
    TQFolder * f = itr.readNext();
    if (!f) continue;
    vec.push_back(f->getPath());
  }
  return vec;
}

std::vector<TString> TQFolder::getFolderPathsWildcarded(const TString& path_, TClass * tClass, bool toplevelOnly) {
  // returns a std::vector<TString> containing the full paths of folders matching
  // the given requirements. This variant returns the paths in their wildcarded
  // representation (using the "wildcarded" tag on the respective folders). If
  // multiple folders matching the requirements with the same wildcarded path are
  // found, the path is added to the vector only once.
  DEBUGclass("getting wildcarded folder paths for '%s'",path_.Data());  
  std::vector<TString> vec;
  std::map<TString,bool> map;
  TQFolderIterator itr(this->getListOfFolders(path_,tClass,toplevelOnly),true);
  while (itr.hasNext()) {
    TQFolder * f = itr.readNext();
    if (!f) continue;
    map[f->getPathWildcarded()] = true;
  }
  for(std::map<TString,bool>::iterator it = map.begin(); it != map.end(); ++it) {
    vec.push_back(it->first);
  }
  return vec;
}


//__________________________________________________________________________________|___________

TList * TQFolder::getListOfObjects(TString path, TClass * tclass){
  // retrieve a list of objects matching the given path
  DEBUGclass("getting list of objects for '%s'",path.Data());    
  TString tail = TQFolder::getPathTail(path);
  TList* retval = new TList();
  if(!path.IsNull()){
    TList* l = this->getListOfFolders(path);
    TQFolderIterator itr(l,true);
    while(itr.hasNext()){
      TQFolder* f = itr.readNext();
      if(!f) continue;
      TList* sublist = f->getListOfObjects(tail,tclass);
      retval->AddAll(sublist);
      delete sublist;
    }
  } else {
    TQIterator objItr(this->GetListOfFolders());
    while(objItr.hasNext()){
      TObject* obj = objItr.readNext();
      if(!obj) continue;
      if(tail.IsNull() || (tail == "?") || (TQStringUtils::matches(obj->GetName(),tail))){
        if(!tclass || obj->InheritsFrom(tclass))
          retval->Add(obj);
      }
    }
  }
  return retval;
}

//__________________________________________________________________________________|___________

TList * TQFolder::getListOfObjectPaths(TString path, TClass * tclass){
  // retrieve a list of objects matching the given path
  DEBUGclass("getting list of object paths for '%s'",path.Data());      
  TString tail = TQFolder::getPathTail(path);
  TList* retval = new TList();
  retval->SetOwner(true);
  if(!path.IsNull()){
    TList* l = this->getListOfFolders(path, tclass);
    TQFolderIterator itr(l,true);
    while(itr.hasNext()){
      TQFolder* f = itr.readNext();
      if(!f) continue;
      TList* sublist = f->getListOfObjectPaths(tail,tclass);
      sublist->SetOwner(false);
      retval->AddAll(sublist);
      delete sublist;
    }
  } else {
    TQIterator objItr(this->GetListOfFolders());
    while(objItr.hasNext()){
      TObject* obj = objItr.readNext();
      if(!obj) continue;
      if(tail.IsNull() || (tail == "?") || (TQStringUtils::matches(obj->GetName(),tail))){
        if(!tclass || obj->InheritsFrom(tclass))
          retval->Add(new TObjString(TQFolder::concatPaths(this->getPath(),obj->GetName())));
      }
    }
  }
  return retval;
}

//__________________________________________________________________________________|___________

TObject * TQFolder::getCopyOfObject(const TString& name_, const TString& path_) {
  TObject* obj = this->getObject(name_,path_);
  if(!obj) return NULL;
  TH1* hist = dynamic_cast<TH1*>(obj);
  if(hist){
    return TQHistogramUtils::copyHistogram(hist,"NODIR");
  }
  return obj->Clone();
}

//__________________________________________________________________________________|___________

TObject * TQFolder::getObject(const TString& name_, const TString& path_) {
  // retrieve an object with the given name from a path
  DEBUGclass("called on '%s' with name='%s', path='%s'",this->getPath().Data(),name_.Data(),path_.Data());
  if (path_.Length() == 0) {
    // find the object in this folder
    return this->FindObject(name_.Data());
  } else if(path_ == "?" || path_ == "*"){ //get the first matching object from the first matching folder which has the requested object
    DEBUGclass("getting any object");
    TList* l = this->getListOfFolders(path_);
    TQFolderIterator itr(l,true);
    while(itr.hasNext()){
      TQFolder* f = itr.readNext();
      if(!f) continue;
      TObject* obj = f->getObject(name_);
      if(obj) return obj;
    }
    return NULL;
  } else {
    // find the object in the folder called <path_>
    DEBUGclass(TString::Format("getting folder '%s'",path_.Data()));    
    TQFolder * folder = this->getFolder(path_);
    if (folder)
      return folder->getObject(name_);
    else
      return NULL;
  }

}

//__________________________________________________________________________________|___________

TString TQFolder::getObjectPath(TString path) {
  // expand and return the path of some object
  DEBUGclass("attempting to get path of object '%s'",path.Data());
  TString name = TQFolder::getPathTail(path);
  TList* l = this->getListOfFolders(TQFolder::concatPaths("*",path));
  TQFolderIterator itr(l,true);
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    if(!f) continue;
    TQIterator subitr(f->GetListOfFolders());
    while(subitr.hasNext()){
      TObject* obj = subitr.readNext();
      if(TQStringUtils::matches(obj->GetName(),name)){
        //@tag: [~basepath] This folder tag contains the basepath of the folder, which is prepended to the return value of folder->getPath()
	const TString basepath = f->getTagStringDefault("~basepath",".");
	return TQFolder::concatPaths(basepath, f->getPath(), obj->GetName());

      }
    }
  }
  return "";
}

//__________________________________________________________________________________|___________

TList* TQFolder::getObjectPaths(TString namepattern, TString pathpattern, TClass* objClass) {
  // return the paths of all objects matching the pattern
  // The ownership of the list elements is with the returned list itself.
  DEBUGclass("attempting to get paths of objects '%s'/'%s'",pathpattern.Data(),namepattern.Data());

  
  //the following lines shift any folder name like part of namepattern to pathpattern with a wildcard * in between
  TQStringUtils::ensureTrailingText(pathpattern,"/*");
  pathpattern = TQFolder::concatPaths(pathpattern,namepattern);
  namepattern = TQFolder::getPathTail(pathpattern);

  std::set<TString> paths;

  TQFolderIterator fitr(this->getListOfFolders(pathpattern),true);
  while(fitr.hasNext()){
    TQFolder* f = fitr.readNext();
    TQIterator oitr(f->GetListOfFolders());
    while(oitr.hasNext()){
      TObject* obj = oitr.readNext();
      if(TQStringUtils::matches(obj->GetName(),namepattern) && obj->InheritsFrom(objClass)){
        //@tag: [~basepath] This folder tag contains the basepath of the folder, which is prepended to the return value of folder->getPath()
        const TString basepath = f->getTagStringDefault("~basepath",".");
        paths.insert(TQFolder::concatPaths(basepath, f->getPath(), obj->GetName()));
      }
    }
  }
  TList* retval = new TList();
  for(const auto& p:paths){
    retval->Add(new TObjString( p ));
  }
  return retval;
}

//__________________________________________________________________________________|___________

TString TQFolder::getName() const {
  // retrieve the name of this object
  return this->fName;
}

//__________________________________________________________________________________|___________

void TQFolder::setName(const TString& newName) {
  // set the name of this object
  this->fName = newName;
}

//__________________________________________________________________________________|___________

const TString& TQFolder::getNameConst() const {
  // retrieve a const reference to the name of this object
  return this->fName;
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::getFolder(const TString& path){
  // wrapper to help resolve ambiguous calls
  return this->getFolder(path,(TClass*)NULL);
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::getFolder(const char* path){
  // wrapper to help resolve ambiguous calls
  return this->getFolder(path,(TClass*)NULL);
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::getFolder(const TString& path_, TClass * tclass) {
  // Returns the folder (instance of TQFolder) that matches the path pattern <path_>
  // and a NULL pointer in case no match can be found. If more than one folder matches
  // <path_> (because wildcards are used) the first match is returned. Additionally,
  // a new instance of TQFolder is created as requested if it does not already
  // exist and a "+" has been appended to <path_>. The path <path_> may be built
  // up from any number of path levels in either case and an arbitrary number of
  // nested folders may be created by appending one "+" to the full path.
  //
  // Examples:
  //
  // - getFolder("subfolder") returns a pointer to the instance of TQFolder named
  // "subfolder" within this instance of TQFolder if it does exist.
  // - getFolder("subfolder+") returns a pointer to the instance of TQFolder named
  // "subfolder" within this instance of TQFolder and does create it if it does
  // not exist
  // - getFolder("subfolder/fol2+") returns a pointer to the instance of TQFolder
  // named "fol2" within "subfolder" (in turn within this instance of TQFolder)
  // and does create it if it does not exist
  //

  // remove leading and trailing spaces and tabs
  TString path = TQStringUtils::trim(path_);
  if(path.IsNull()) return this;
  if(TQStringUtils::equal(path,"/")) return this->getRoot();
  
  DEBUGclass("attempting to retrieve folder '%s' in '%s'",path.Data(),this->getPath().Data());
  
  // check auto-create option: path ends with "+"
  TQStringUtils::removeTrailing(path,"/");
  bool force = ( TQStringUtils::removeTrailing(path,"!") == 1);
  bool autoCreate = ( TQStringUtils::removeTrailing(path,"+") == 1);
  TQStringUtils::removeTrailing(path,"/");

  // get the list of folders matching path_
  DEBUGclass(TString::Format("getting list of folders to get folder '%s'",path.Data()));
  TList * list = getListOfFolders(path, tclass, false, true);

  if (list && list->GetEntries() > 0) {
    // get the first folder in the list
    TQFolder * firstFolder = (TQFolder*)list->At(0);

    // delete the list
    delete list;

    // return the first folder
    return firstFolder;

  } else if (autoCreate) {

    // delete the list
    delete list;

    TString nameToCreate = path;
    TQFolder * baseFolder = this;

    Ssiz_t splitPos = path.Last('/');

    /* the folder to create has subfolders which
     * also have to be created: create them first */
    if (splitPos != kNPOS) {

      // split the path to create into <path>/<name>
      nameToCreate = path(splitPos + 1, path.Length());

      if (splitPos > 0)
        path = path(0, splitPos);
      else
        path = "/.";

      baseFolder = getFolder(path + (force ? "+!" : "+"), tclass);
    }

    if (baseFolder) {
      /* create a new instance of a folder: clone the
       * template or create a new TQFolder */
      TQFolder * newInstance;
      if (tclass){
        newInstance = (TQFolder*)(tclass->New());
        newInstance->SetName(nameToCreate);
      } else {
        newInstance = new TQFolder(nameToCreate);
      }

      // add this new instance to the base folder
      if (newInstance) {
        if (baseFolder->addFolder(newInstance)) {
          newInstance->setDirectory(this->fMyDir);
          newInstance->autoSetExportName();
          if(force) newInstance->SetName(nameToCreate);
          // we succeeded to create the path
          return newInstance;
        } else {
          /* we actually didn't succeed
           * to add the new instance */
          delete newInstance;
        }
      }
    }
  }

  // we didn't find any matching element
  return 0;

}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::addFolder(TQFolder * folder_, TString path_, TClass * tclass) {
  // add a folder at the given path

  if (!folder_) return 0;

  if (path_.Length() == 0) {
    
    // make sure the new sample folder has a valid name
    if (!isValidName(folder_->GetName())) { return 0; }
    
    // make sure the new sample folder has no base sample folder
    if (folder_->getBase()) { return 0; }

    // make sure there is no other element with the same name
    if (FindObject(folder_->GetName())) { return 0; }

    // set the base of the new sample folder before adding it
    folder_->setBase(this);

    /* add the new folder and return a
     * pointer on its new base folder */
    Add(folder_);
    return this;

  } else {
    return this->addObject(folder_,path_,tclass);
  }

  // something went wrong
  return 0;

}


//__________________________________________________________________________________|___________

TList * TQFolder::getListOfObjectNames(TClass * class_, bool recursive, TString path_) {
  // Return the list of names of objects in a folder

  DEBUGclass("resolving import links to retrieve object names");
  this->resolveImportLinks(recursive);

  if (path_.Length() == 0) {

    // prepare the list to return
    TList * result = new THashList();
    result->SetOwner(true);
    
    // loop over all elements in the folder
    TQIterator itr(this->GetListOfFolders());
    while(itr.hasNext()){
      TObject* obj = itr.readNext();

      /* the element might be a folder, we apply a special
       * treatment because we are only interesed in objects
       * that are not a folder. */
      if (obj->InheritsFrom(TQFolder::Class())) {
        
        /* folders only have to be considered if the
         * request is recursive (recursive = true). */
        if (recursive) {
          TList * subList = ((TQFolder*)obj)->getListOfObjectNames(class_, true);
          subList->SetOwner(false);
          // iterate over every element and prepend name of folder
          TQIterator subitr(subList);
          while (subitr.hasNext()){
            TObjString* obs = static_cast<TObjString*>(subitr.readNext());
            // we know the subList only contains TObjStrings
            TString objectName(obs->GetString());
            // prepend the name of the containing folder
            objectName.Prepend(TString(obj->GetName()) + "/");
            obs->SetString(objectName.Data());
            // add this to the resulting list
            result->Add(obs);
          }
          delete subList;
        }
        
      } else if (!class_ || obj->InheritsFrom(class_)) {
        
        result->Add(new TObjString(obj->GetName()));

      }
    }
    // return the list
    return result;

  } else {
    TQFolder * folder = this->getFolder(path_);
    if (folder){
      return folder->getListOfObjectNames(class_, recursive);
    } else {
      return 0;
    }
  }

}


//__________________________________________________________________________________|___________

TString TQFolder::getPath() {
  // Returns the full path of this instance of TQFolder in the hierarchy. For the
  // root folder "/." is returned.
  TString name(this->GetName());
  // to cope with folders that have been auto-renamed to yield valid identifiers, we ask for this "magic tag"
  // which allows us to instead return any other valid name
  //@tag: [.realname] This object tag contains the original name of the object in case it needed to be automatically renamed in order to make a valid name (e.g. replacement of "-" by "_".
  this->getTagString(".realname",name);
  if (fBase) {
    if (fBase == getRoot()) {
      // the base folder is the root
      name.Prepend("/");
      return name;
    } else {
      // the base folder is not the root folder
      return TQFolder::concatPaths(fBase->getPath(), name);
    }
  } else {
    // if there is no base folder, this is the root: return "/."
    return TString("/.");
  }
}

//__________________________________________________________________________________|___________

TString TQFolder::getPathWildcarded() {
  // Returns the full path of this instance of TQFolder in the hierarchy. For the
  // root folder "/" is returned.
  // this version of getPath replaces the names of folders that have the tag
  // wildcarded=true
  // set with a wildcard ('?')

  //@tag: [wildcarded] If this object tag is set to true, the part of the path corresponding to this object in the return value of getPathWildcarded() is replaced with a "?".
  TString name = (this->getTagBoolDefault("wildcarded",false) ? "?" : this->getName());

  if (fBase) {
    if (fBase == getRoot()) {
      // the base folder is the root
      return TString::Format("/%s/", name.Data());
    } else {
      // the base folder is not the root folder
      return TQFolder::concatPaths(fBase->getPathWildcarded(), name)+"/";
    }
  } else {
    // if there is no base folder, this is the root: return "/"
    return TString("/");
  }
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::getBase(int depth) const {
  // Returns a pointer to the base folder of this instance of TQFolder and a NULL
  // pointer in case it is the root folder of the folder hierarchy. In general, if
  // <depth> is larger than 1 (it is 1 by default) a pointer to the instance of
  // TQFolder <depth> levels up the hierarchy is returned and a NULL pointer if the
  // root folder is traversed before. If <depth> is zero a pointer to this instance
  // of TQFolder is returned.

  if (depth == 1) {
    // the default case: return pointer to base folder
    return fBase;
  } else if (depth == 0) {
    // the trivial case: return a pointer to this folder
    return (TQFolder*)this;
  } else if (depth > 1 && fBase) {
    // the general case: recursively get pointer to requested base folder
    return fBase->getBase(depth - 1);
  } else {
    // either negative <depth> or folder hierarchy not deep enough: return NULL pointer
    return NULL;
  }
}

//__________________________________________________________________________________|___________

int TQFolder::areRelated(const TQFolder* other) const {
  // checks if this folder or the other folder are subfolders of the respective 
  // other. Returns +1*nSteps if 'other' is a subfolder of 'this', -1*nSteps in the inverse case
  // and 0 otherwise. nSteps is the distance between the two folders starting at 1
  // if the two folders are equal. Example: If 'this' is a direct subfolder of 
  // 'other' then -2 is returned
  if (!other) return 0;
  if (this==other) return 1;
  int thisDist = this->getDistToRoot();
  int otherDist = other->getDistToRoot();
  if (thisDist>otherDist) return -1*other->areRelated(this);
  else if (thisDist<otherDist) {
    int tmp = this->areRelated(other->getBase()); 
    return tmp!=0 ? 1+tmp : 0;
  }
  //folders have the same distance from the root node but are not equal -> not related
  return 0;
  
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::getRoot() {
  // Returns the a pointer to the instance of TQFolder which is the root of this
  // folder hierarchy.

  if (fBase) {
    // if there is a base folder, recursively return root of it
    return fBase->getRoot();
  } else {
    // if there is no base folder, this is the root: return it
    return this;
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::isRoot() {
  // Returns true if this instance of TQFolder is the root of the folder hierarchy
  // (there is no base folder) and false otherwise.

  // true if there is no base folder
  return (fBase == NULL);
}


//__________________________________________________________________________________|___________

int TQFolder::getDistToRoot() const {
  // Returns the number of hierarchy levels to be traversed up to the root folder
  // of this hierarchy.

  if (fBase) {
    // there is a base folder: recursively return distance to root (but increased by one)
    return fBase->getDistToRoot() + 1;
  } else {
    // this is the root folder: return 0
    return 0;
  }
}


//__________________________________________________________________________________|___________

int TQFolder::getDepth() {
  // Returns the number of levels to be traversed down to the deepest element. For
  // an instance of TQFolder that does not contain "sub-instances" of TQFolder the
  // return value is 1.

  DEBUGclass("resolving import links to obtain depth");
  this->resolveImportLinks(true);

  // the maximum distance to an element
  int depth = 0;

  // loop over elements in this folder
  TQIterator itr(GetListOfFolders());
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();

    // the local depth of current object (1 by default)
    int localDepth = 1;
    if (obj->InheritsFrom(TQFolder::Class())) {
      // ... but determined recursively in case of instances of TQFolder
      localDepth += ((TQFolder*)obj)->getDepth();
    }

    // keep maximum
    depth = (localDepth > depth) ? localDepth : depth;
  }

  // return total depth (maximum of all local depths found so far)
  return depth;
}


//__________________________________________________________________________________|___________

TList * TQFolder::getTraceToRoot(bool startAtRoot) {
  // retrieve a list of folders containing all hierarchy levels up to the root
  // folder
  TList * list = NULL;
  if (fBase) {
    list = fBase->getTraceToRoot(startAtRoot);
  }

  if (!list) {
    list = new TList();
    list->SetOwner(false);
  }
  if (startAtRoot) {
    list->AddLast(this);
  } else {
    list->AddFirst(this);
  }

  return list;
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::loadLazyFolder(TString path) {
  // this function works exactly as TQFolder::loadFolder, with the exception that
  // all folder branches that have been externalized/splitted when writing the file
  // will remain in collapsed state until they are accessed.
  // for large files with an excessive use of externalization/splitting, this will
  // significantly speed up accessing the data, since the branches are only expanded
  // on-demand.
  //
  // please note, however, that you will only experience a total speed gain if you
  // only access small fractions of your data. if you plan to read most of the file's data
  // at some point, requiring the expansion of all branches, this 'lazy' feature
  // will only postpone the work of loading the data into RAM to the point where it is accessed
  // bringing no total speed gain.
  return TQFolder::loadFolder(path,true);
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::loadFolder(TString path, bool lazy) {
  // Loads an instance of TQFolder from an external ROOT file and returns a pointer
  // to it and a NULL pointer in case of failure. The ROOT file and the key within
  // the key within the ROOT file to be read is identified by <path> which has to
  // have the form "filename:keyname", e.g. "file.root:folder".
  // If the folder to load is stored within a structre of TDirectory in the file
  // it can be accessed by prepending the corresponding path to the folder name,
  // e.g. "file.root:dir1/dir2/folder". To load only a subfolder of an instance of
  // TQFolder from the ROOT file one can append the corresponding path to the folder
  // name, e.g. "file.root:folder/subfolder". In this case a pointer to "subfolder"
  // is returned which is made the root folder before
  // the 'lazy' flag will trigger lazy loading, please refer to TQFolder::loadLazyFolder
  // for documentation of this feature.

  // use a dummy folder to import the external folder using TQFolder::importObject(...)
  TQFolder * dummy = TQFolder::newFolder("dummy");
  if(path.Length() == 0){
    ERRORclass("unable to open file with no name!");
    return NULL;
  }

  TFile* file = TQFolder::openFile(path,"READ");
  if(!file){
    return NULL;
  }

  TObject * imported = dummy->importObjectFromDirectory(file, path,!lazy,TQFolder::Class());
  
  // the folder to load and return
  TQFolder * folder = NULL;

  // check the folder that has been imported and get the one to return
  if (imported && imported->InheritsFrom(TQFolder::Class())) {

    TQFolder * importedFolder = (TQFolder*)imported;
    while (importedFolder->getBase() != dummy)
      importedFolder = importedFolder->getBase();

    // detach imported folder from dummy folder
    folder = importedFolder->detachFromBase();
  }

  // delete the dummy folder
  delete dummy;

  // close file and delete file pointer
  if(folder){
    if(lazy){
      folder->setDirectoryInternal(file);
      folder->fOwnMyDir = true;
    } else {
      folder->setDirectoryInternal(NULL);
      file->Close();
      delete file;
    }
    folder->autoSetExportName();
  } else {
    file->Close();
    delete file;
  }

  // return the folder
  return folder;
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::loadFromTextFile(TString filename, bool showErrorMessage) {
  // Creates a new instance of TQFolder, performs an import from an external text
  // file <filename> on it, and returns a pointer to it in case of success and a
  // NULL pointer in case of failure. If <showErrorMessage> is true and an error
  // occurs during the import process the corresponding error message is displayed
  // via std::cout. If the name of the instance returned is set to the filename of the
  // text file with invalid characters replaced by "_".
  //
  // [Please note: this is a wrapper to TQFolder::loadFromTextFile(TString filename,
  // TString &errorMessage).]

  // string to assign a message related to a potential error to
  TString errMsg;

  // try to load a new instance of TQFolder from a text file
  TQFolder * folder = loadFromTextFile(filename, errMsg);

  // in case of an error ...
  if (!folder && showErrorMessage) {
    // print-out the error message provided by TQFolder::loadFromTextFile(...)
    ERRORclass(errMsg);
  }

  // return a pointer to the freshly loaded folder
  return folder;
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::loadFromTextFile(TString filename, TString &errorMessage) {
  // Creates a new instance of TQFolder, performs an import from an external text
  // file <filename> on it, and returns a pointer to it in case of success and a
  // NULL pointer in case of failure.
  // error messages will be fed into the string given as second argument
  DEBUGclass("loading folder from text file %s",filename.Data());

  TString name = filename;
  // extract the name of the file (without full path) to obtain
  // a sensible name for the instance of TQFolder to return
  name = TQFolder::getPathTail(name);

  // create a new instance of TQFolder
  TQFolder * folder = TQFolder::newFolder(TQFolder::makeValidIdentifier(name, "_"));

  // import folder from text file
  if (folder->importFromTextFile(filename, errorMessage)) {
    // ... and return it in case of success
    return folder;
  } else {
    // ... or delete it and return a NULL pointer in case of failure
    delete folder;
    return NULL;
  }
}


//__________________________________________________________________________________|___________

TQFolder * TQFolder::addObject(TObject * object, TString destination, TClass* folderClass) {
  // Adds the object <object> to this instance of TQFolder or to the one referred to
  // by <destination> and returns a pointer to the destination folder in case of
  // success or a NULL pointer in case of failure. If destination ends on "!" an
  // existing object with the same name will be replaced by the new one. Default is
  // to keep the old object and return 0 if one exists already.
  if (!object) {
    // stop if object to add is invalid
    return NULL;
  }
  DEBUGclass("entering function: object='%s', destination='%s'",object->GetName(),destination.Data());
  //enforce overwrite if destination ends on "!"
  bool overwrite = (TQStringUtils::removeTrailing(destination,"!") >0);
  #ifdef _DEBUG_
  if(overwrite) DEBUGclass("found overwrite flag");
  #endif

  // parse destination path
  TString path;
  if (!destination.IsNull()) {
    DEBUGclass("reading destination");
    TQStringUtils::readUpTo(destination, path, ":");
    path = TQStringUtils::trim(path);
  }

  // parse new name for object and stop if syntax is invalid
  bool newName = false;
  TString name = object->GetName();
  if (!destination.IsNull()) {
    // stop if we won't be able to rename the object
    if (!object->InheritsFrom(TNamed::Class())){
      ERRORclass("object '%s' cannot be renamed!",object->GetName());
      return 0;
    }

    // expect exactly two ":"
    if (TQStringUtils::removeLeading(destination, ":") != 2){
      ERRORclass("invalid number of ':'!");
      return 0;
    }

    // update the name
    name = TQStringUtils::trim(destination);
    if(!name.IsNull()) newName = true;
    else name = object->GetName();
  }

  DEBUGclass("in '%s': adding object '%s' to path '%s' with new name '%s'",this->getPath().Data(),object->GetName(),path.Data(),name.Data());

  // stop if the object has an invalid name
  if (newName && !isValidName(name) && !object->InheritsFrom(TObjString::Class())){
    WARNclass("cannot attach object '%s' to path '%s' - invalid name!",object->GetName(),path.Data());
    return NULL;
  }

  /* the object to add might be a folder which is
   * already part of another folder. Stop if so */
  TQFolder* otherF = dynamic_cast<TQFolder*>(object);
  if(otherF && !otherF->isRoot() && !(otherF->getRoot() == this->getRoot())){
    WARNclass("cannot add subfolder of other folder structure!");
    return NULL;
  }
  
  // get the destination folder
  TQFolder * folder = getFolder(path,folderClass);
  if (!folder) {
    WARNclass("cannot attach object '%s' to path '%s' - unable to retrieve folder! did you forget the '+' or the '::'?",object->GetName(),path.Data());
    return NULL;
  }

  // stop if the destination folder already contains an object with the same name
  if (folder->hasObject(name)){
    if (overwrite){
      folder->deleteObject(name);
    } else {
      WARNclass("not adding object '%s' to folder '%s' - an object of this name is already present",name.Data(),folder->getPath().Data());
      return NULL;
    }
  }
    // rename and add object
  if (newName)
    ((TNamed*)object)->SetName(name.Data());

  if(otherF){
    DEBUGclass("adding folder '%s' to '%s'",otherF->getPath().Data(),folder->getPath().Data());
    otherF->detachFromBase();
    folder->addFolder(otherF);
  } else {
    folder->Add(object);
  }

  // return the folder the object was added to
  return folder;
}

//__________________________________________________________________________________|___________

TDirectory * TQFolder::getDirectory(){
  // retrieve the directory wherein this folder resides
  return this->fMyDir;
}

//__________________________________________________________________________________|___________

int TQFolder::setDirectory(TDirectory* dir, bool own){
  // set the directory of this folder
  // will migrate all data to the new directory, might be slow
  // second argument decides whether the folder owns the directory handed
  DEBUGclass("resolving import links to set directory");  
  int retval = this->resolveImportLinks(this->fMyDir);
  this->clearDirectoryInternal();
  this->setDirectoryInternal(dir);
  this->fOwnMyDir=own;
  return retval;
}

//__________________________________________________________________________________|___________

void TQFolder::clearDirectoryInternal(){
  // clear and delete the directory associated to this folder if owned
  if(this->fOwnMyDir){
    TFile* f = dynamic_cast<TFile*>(this->fMyDir);
    if(f) f->Close();
    delete this->fMyDir;
  }
}

//__________________________________________________________________________________|___________

void TQFolder::setDirectoryInternal(TDirectory* dir){
  // set the directory of this folder
  // internal variant, will not migrate any data
  // DO NOT USE, UNLESS YOU KNOW WHAT YOU ARE DOING
  this->fMyDir = dir;
  TCollection* l = TFolder::GetListOfFolders();
  if(!l) return;
  TQIterator itr(l);
  while (itr.hasNext()) {
    TQFolder* f = dynamic_cast<TQFolder*>(itr.readNext());
    if(!f) continue;
    f->setDirectoryInternal(dir);
  }
}

//__________________________________________________________________________________|___________

TQFolder * TQFolder::addCopyOfObject(TObject * object, TString destination, TClass* folderClass) {
  // Adds an independent copy of the object <object> to this the instance of
  // TQFolder or to the one referred to by <destination> and returns a pointer to
  // the destination folder in case of success or a NULL pointer in case of failure.

  if (!object) {
    // need a valid pointer to an object to add
    // return a NULL pointer in case there is no object to add
    return NULL;
  }

  // use different cloning strategies depending on the type of object
  TObject * copy;
  if (object->InheritsFrom(TQFolder::Class())) {
    // copy instances of TQFolder using its built-in TQFolder::copy() method
    copy = ((TQFolder*)object)->copy();
  } else if (object->InheritsFrom(TH1::Class())) {
    // copy histograms using dedicated TQHistogramUtils::copyHistogram(...) method
    copy = TQHistogramUtils::copyHistogram((TH1*)object,"NODIR");
  } else {
    // copy (clone) object using ROOT's default streamer facility
    copy = object->Clone();
  }
  // copying the object might have failed for some reason
  if (!copy) {
    // ... return a NULL pointer in this case
    return NULL;
  }

  // try to add the new copy to the folder
  TQFolder * folder = addObject(copy, destination, folderClass);
  // ... this might fail for some reasons as well
  if (!folder) {
    // ... delete the copy again (and return a NULL pointer) in this case
    delete copy;
  }

  // return a pointer to the destination folder (obtained from TQFolder::addObject(...)
  return folder;
}


//__________________________________________________________________________________|___________

bool TQFolder::hasObject(TString name) {
  // return true if the folder has an object of the given name/path in its
  // folder structure
  if (TQStringUtils::removeLeading(name, "/") > 0)
    return getRoot()->hasObject(name);

  // extract the object name
  TString objName = TQFolder::getPathTail(name);

  // search for an object / objects with a name matching <objName>
  if (name.IsNull()) {
    /* search this folder,
     * TODO: allow use of wildcards */
    return (FindObject(objName.Data()) != 0);
  } else {
    /* search another folder,
     * TODO: allow for wildcards
     * TODO: don't allow constructive search ("+") */
    TQFolder * folder = getFolder(name);
    if (folder)
      return folder->hasObject(objName);
    else
      return false;
  }
}

//__________________________________________________________________________________|___________

int TQFolder::resolveImportLinks(bool recurse) {
  // resolve all import links and load all missing components from disk to
  // memory, converting a "lazy" sample folder into a fully expanded one
  return this->resolveImportLinks(NULL,recurse);
}

//__________________________________________________________________________________|___________

int TQFolder::resolveImportLinks(TDirectory * dir,bool recurse) {
  // resolve all import links and load all missing components the given
  // directory to memory, converting a "lazy" sample folder into a fully
  // expanded one

  if(this->isFullyResolved) return 0;

  this->isFullyResolved = recurse;

  int nLinks = 0;
  // collect the list of import link names in this folder
  TQIterator itr1(this->GetListOfFolders());
  while (itr1.hasNext()) {
    TObject * lnk = itr1.readNext();
    if(recurse){
      TQFolder* f = dynamic_cast<TQFolder*>(lnk);
      if(f){
         f->resolveImportLinks(dir,recurse);
         if(!f->isFullyResolved) this->isFullyResolved = false;
       }
    }
    if (lnk->InheritsFrom(TQImportLink::Class())) {
      if (this->resolveImportLink(lnk->GetName(), dir,recurse)) {
        nLinks++;
      } else {
        this->isFullyResolved = false;
      }
    }
  }
  return nLinks;
}


//__________________________________________________________________________________|___________

TObject * TQFolder::resolveImportLink(const TString& linkName, bool recurse) {
  // resolve one specific import link given by name
  return this->resolveImportLink(linkName,NULL,recurse);
}

//__________________________________________________________________________________|___________

TObject * TQFolder::resolveImportLink(const TString& linkName, TDirectory * dir, bool recurse) {
  // resolve one specific import link given by name from a given TDirectory
  if (!TQFolder::isValidName(linkName)) {
    return NULL;
  }
  DEBUGclass("attempting to resolve import link '%s' in '%s' from directory '%p'", linkName.Data(),this->getPath().Data(),dir);
  TObject * obj = this->getObject(linkName);
  TQImportLink * lnk = dynamic_cast<TQImportLink*>(obj);
  if (!lnk) return NULL;


  // get import path
  TString importPath(TQStringUtils::trim(lnk->getImportPath()));

  // detach link
  this->Remove(lnk);

  TObject * imported = NULL;
  if ((TQStringUtils::removeLeading(importPath, ":", 1) != 0)) {
    if(dir){
      imported = this->importObjectFromDirectory(dir,                  importPath,recurse);
    } else {
      imported = this->importObjectFromDirectory(this->getDirectory(), importPath,recurse);
    }
  } else {
    imported = this->importObject(importPath,recurse);
  }

  if (imported) {
    delete lnk;
  } else {
    ERRORclass("unable to resolve import ImportLink '%s' from directory '%s'",lnk->getImportPath().Data(),this->getDirectory()->GetName());
    this->addObject(lnk);
  }

  return imported;
}

//__________________________________________________________________________________|___________

void TQFolder::autoSetExportName(){
  // automatically generate an export name for this folder the export name is
  // required in order to allow writing this folder to disk with a non-zero
  // split value. however, the user should NEVER need to call this function, as
  // this should be handled automatically
  if(this->isRoot()){
    this->fExportName = this->GetName();
  } else {
    TString name(this->getBase()->getExportName());
    if(name.IsNull()){
      this->fExportName = this->GetName();
    } else {
      name += "-" + this->getName();
      TQStringUtils::ensureLeadingText(name,"--");
      this->fExportName = name;
    }
  }
  this->autoSetExportNames();
}

//__________________________________________________________________________________|___________

void TQFolder::autoSetExportNames(){
  // automatically generate an export names for this folder and all its subfolders
  // for further details, refer to TQFolder::autoSetExportName
  TQFolderIterator itr(this->GetListOfFolders());
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    if(!f) continue;
    f->autoSetExportName();
  }
}

//__________________________________________________________________________________|___________

void TQFolder::setExportName(const TString& name){
  // set a specific export name for this folder and auto-generate ones for all
  // its subfolders
  // for further details, refer to TQFolder::autoSetExportName
  this->fExportName = name;
  this->autoSetExportNames();
}

//__________________________________________________________________________________|___________

TObject * TQFolder::importObjectFromDirectory(TDirectory * dir, TString importPath, bool recurse, TClass* expectedClass) {
  // import an object from a TDirectory and deploy it at the given importPath
  if(expectedClass && importPath.IsNull()){
    importPath = "*";
  }
  if(importPath.IsNull()){
    ERRORclass("cannot import object without name or path!");
    return NULL;
  }

  // parsing the input path
  // /some/path/objname >> destination
  TString path;
  TQStringUtils::readUpTo(importPath, path, ">");
  path = TQStringUtils::trim(path);
  int nl = TQStringUtils::removeLeading(importPath, ">");
  TString destination = TQStringUtils::trim(importPath);
  if ((destination.IsNull() && nl != 0) || (!destination.IsNull() && nl != 2)) {
    ERRORclass("invalid destination string, please use exactly two pipes '>>' to signify destination!");
    return NULL;
  }

  // retrieving object
  DEBUGclass("attempting to import object from '%s' to '%s' at '%s'",path.Data(),destination.Data(),this->getPath().Data());
  TString objname(TQFolder::getPathHead(path));
  TQKeyIterator itr(dir->GetListOfKeys());
  TObject * object = NULL;
  while(itr.hasNext()){
    TKey* key = itr.readNext();
    TString keyname(key->GetName());
    if( TQStringUtils::matches(keyname, objname ) && !(objname[0] == '*' && keyname[0] == '-') && (!expectedClass || TQStringUtils::equal(expectedClass->GetName(),key->GetClassName()))){
      // the second requirement is needed to avoid "*" matching to spare parts starting with "--"
      object = dir->Get(keyname);
      DEBUGclass("matched '%s' to '%s', obtained object '%s'",key->GetName(),objname.Data(),object->GetName());
      break;
    }
  }
  if (!object) {
    DEBUGclass("failed to find object matching '%s' in '%s'",objname.Data(),dir->GetName());
    return NULL;
  }
  
  DEBUGclass("success!");

  // if the object we got is a TQFolder, we need to look inside
  TQFolder * folder = dynamic_cast<TQFolder*>(object);
  if (folder){
    folder->detachFromBase();
    folder->fMyDir = dir;
    folder->autoSetExportName();
    if(recurse){
      DEBUGclass("resolving import links during import");        
      folder->resolveImportLinks(true);
    }
    folder->isFullyResolved = recurse;
    if(!path.IsNull()){
      DEBUGclass("attempting to retrieve subfolder from '%s' in '%s'",path.Data(),folder->GetName());
      TQFolder* f = folder->getFolder(path);
      if(!f) return NULL;
      f->detachFromBase();
      delete folder;
      folder = f;
      object = f;
    }
  }

  // we can't add TDirectories
  if (object->InheritsFrom(TDirectory::Class())) {
    WARNclass("cannot attach objects of class '%s' to folder!",object->ClassName());
    return NULL;
  }

  // if its a histogram, we need to detach it from the file
  if (object->InheritsFrom(TH1::Class())) {
    ((TH1*)object)->SetDirectory(NULL);
  }

  // add the object
  if (!this->addObject(object, destination)) {
    // we failed to add the object
    WARNclass("failed to attach object '%s' to destination '%s'!",object->GetName(), destination.Data());
    delete object;
    return NULL;
  }

  // return the object imported
  return object;
}

//__________________________________________________________________________________|___________

bool TQFolder::writeFolder(TDirectory * dir, TString name, int depth, bool keepInMemory){
  // writes a TQFolder to a given directory
  // the precise functionality of this function can be customized using optional parameters
  // in the default settings,
  // - dir is the directory to which the folder will be written
  // - exportName is the key under which the folder will be deployed in the directory
  //
  // after this function has been successfully executed, the the given directory will be associated
  // to this folder. further writes via writeFolder or writeUpdate will use this directory
  // if no other (new) directory is given
  //
  // also, all currently collapsed branches of the folder hierarchy will be expanded and rewritten
  // to the new directory.
  //
  // since ROOT has problems with too large TObjects, the optional depth argument allows automatic splitting
  // of a large folder hierarchy into parts. this splitting will on the top level and on each succeeding
  // level of the folder hierarchy, until the depth exceeds the optional depth parameter.
  //
  // the keepInMemory=false flag can be used to automatically remove all folders from memory
  // that have been linked/externalized with the depth-splitting procedure
  // this causes the corresponding branhces of the folder hierarchy to be collapsed
  // these branches are expanded (and the contents are then automatically reloaded from disk)
  // when they are accessed
  // with keepInMemory=false, reading/writing folder contents will take significantly longer
  // however, lots of RAM space will be freed whenever writeFolder or writeUpdate are called
  // with keepInMemory=false
  //
  if (name.IsNull()) {
    name = GetName();
  }
  return writeFolderHook(dir, name, depth, keepInMemory);
}

//__________________________________________________________________________________|___________

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"

bool TQFolder::writeFolderMaxSize(TDirectory * dir, TString name, int maxSizeInMB, bool keepInMemory){
  // this function is still under developement, please use the usual TQFolder::writeFolder function instead
  return writeFolderHook(dir, name, -1, keepInMemory);
}

//__________________________________________________________________________________|___________

bool TQFolder::writeFolder(TDirectory * dir, int depth, bool keepInMemory){
  // as opposed to TQFolder::writeFolder(TDirectory*dir,TString name, int depth, bool keepInMemory)
  // this function does not take the 'name' argument and automatically used the folder name instead
  // for further documentation on the functionality, please refer to the aforementioned function
  TString name = this->GetName();
  return writeFolderHook(dir, name, depth, keepInMemory);
}

//__________________________________________________________________________________|___________

bool TQFolder::writeFolderMaxSize(TDirectory * dir, int maxSizeInMB, bool keepInMemory){
  // this function is still under developement, please use the usual TQFolder::writeFolder function instead
  return writeFolderHook(dir, this->GetName(), -1, keepInMemory);
}

#pragma GCC diagnostic pop

//__________________________________________________________________________________|___________

TString TQFolder::makeExportName(TString exportName){
  // this function will transform the given string into a valid export name
  // for further information, please refer to TQFolder::writeFolder
  // THIS FUNCTION IS FOR INTERNAL USE ONLY
  exportName.ReplaceAll("/", "-");
  exportName.Prepend("--");
  return exportName;
}

//__________________________________________________________________________________|___________


const TString& TQFolder::getExportName(){
  // return the currently set export name of this folder
  // for further information, please refer to TQFolder::writeFolder
  return this->fExportName;
}

//__________________________________________________________________________________|___________

bool TQFolder::split(TDirectory * dir, int depth){
  DEBUGclass("resolving import links during split");          
  this->resolveImportLinks();
  this->autoSetExportName();
  TQFolderIterator itr(this->GetListOfFolders());
  if(depth > 0){
    DEBUGclass("@%s: depth > 0, splitting subfolders",this->getPath().Data());
    // collect the list of subfolders
    bool failed = false;
    while (itr.hasNext()) {
      TQFolder* subfolder = itr.readNext();
      if(!subfolder) continue;
      if(!subfolder->split(dir,depth-1)){
        failed = true;
        break;
      }
    }
    if(failed) this->resolveImportLinks(true);
    return !failed;
  } else {
    DEBUGclass("@%s: depth <= 0, splitting here",this->getPath().Data());
    DEBUGclass("setting directory to %x",dir);
    if(dir)
      this->setDirectoryInternal(dir);
    bool failed = false;

    // stop if base directory is invalid
    if (!this->fMyDir) {
      ERRORclass("cannot write to NULL directory");
      return false;
    }

    // collect the list of subfolders
    DEBUGclass("looping over subfolders...");
    while (itr.hasNext()) {
      TQFolder* subFolder = itr.readNext();
      if(!subFolder) continue;
      DEBUGclass("detaching '%s'",subFolder->getPath().Data());
      subFolder->autoSetExportName();
      const TString exportName(subFolder->getExportName());
      subFolder->detachFromBase();
      DEBUGclass("writing '%s' (basefolder is now %p)",subFolder->GetName(),(void*)subFolder->getBase());
      this->fMyDir->WriteTObject(subFolder, exportName, "Overwrite");
      DEBUGclass("adding link for '%s' at '%s'",subFolder->GetName(),exportName.Data());
      TQImportLink * importLink = new TQImportLink(subFolder->GetName(), TString(":") + exportName);
      this->addObject(importLink);
      if(failed) break;
    }

    // now that this folder has been split,
    // it is no longer fully resolved
    // also all of its base folders
    // should be set to reflect this
    TQFolder* f = this;
    while(f) {
      f->isFullyResolved=false;
      f = f->getBase();
    }

    return !failed;
  }
}

//__________________________________________________________________________________|___________

bool TQFolder::writeFolderHook(TDirectory * dir, const TString& exportName, int depth, bool keepInMemory){
  // wrapper function to allow subclasses to easily hook into the writing procedure
  return this->writeFolderInternal(dir,exportName,depth,keepInMemory);
}

//__________________________________________________________________________________|___________

bool TQFolder::writeFolderInternal(TDirectory * dir, const TString& exportName, int depth, bool keepInMemory){
  // this private function implements the TQFolder::writeFolder functionality
  // other flavours of this function merely use the functionality of this one
  // however, for documentation, please refer to the public variants
  DEBUGclass("entering function");
  DEBUGclass("resolving import links to write");          
  this->resolveImportLinks(true);
  this->setDirectoryInternal(dir);

  DEBUGclass("considering exportName '%s'",exportName.Data()) ;
  if(exportName.IsNull())
    this->fExportName = TQFolder::makeExportName(this->getPath());
  else
    this->fExportName = exportName;
  if(this->fExportName.IsNull())
    this->autoSetExportName();

  DEBUGclass("exportName is now '%s'",this->fExportName.Data()) ;

  bool failed = false;
  if(depth >= 0){
    DEBUGclass("splitting at level %d (target is %p)",depth,(void*)(dir)) ;
    if(!this->split(dir,depth)){
      ERRORclass("unable to split folder!");
      failed = true;
    } else {
      DEBUGclass("split successful") ;
    }
  }

  // write this object
  DEBUGclass("writing object to directory '%s'@%p",this->fMyDir->GetName(),(void*)(this->fMyDir)) ;
  this->fMyDir->WriteTObject(this, this->fExportName, "Overwrite");

  if(keepInMemory){
    DEBUGclass("resolving split") ;
    this->resolveImportLinks(true);
  }

  DEBUGclass("all done") ;
  return !failed;
}

//__________________________________________________________________________________|___________

bool TQFolder::isOnDisk(){
  // check if the TQFolder has a valid directory set
  // and is available to be re-read from this directory
  return this->isOnDisk(this->fMyDir);
}

//__________________________________________________________________________________|___________

bool TQFolder::isOnDisk(TDirectory* dir){
  // check if the TQFolder is available from the given directory
  if(!dir) dir=this->fMyDir;
  if(!dir) return false;
  TList* keys = dir->GetListOfKeys();
  if(!keys) return false;
  TQIterator itr(keys);
  while(itr.hasNext()){
    TObject* key = itr.readNext();
    if( this->fExportName.CompareTo(key->GetName()) == 0){
      return true;
    }
  }
  return false;
}

//__________________________________________________________________________________|___________


bool TQFolder::collapse(){
  // collapse the folder down to its TQImportLinks
  // this is useful in cases where you read a large TQFolder structure
  // only accessing a tiny proportion of the entire structure at a time
  // and only reading (not writing) any data
  // in this case, occasional calles of TQFolder::collapse()
  // will free the memory space used by the TQFolder branch in question
  // and resinsert a TQImportLink at the corresponding points
  // to allow re-reading the folder contents if need be
  // ideally, this will drastically reduce the memory usage of your applicaton
  // however, any modification made to the folder structure will be lost!
  bool retval = false;
  TQIterator itr(this->GetListOfFolders());
  while (itr.hasNext()) {
    TQFolder* f = dynamic_cast<TQFolder*>(itr.readNext());
    if(!f) continue;
    if(!f->isOnDisk()){
      if(f->collapse()) retval = true;
      continue;
    } else {
      TQImportLink * importLink = new TQImportLink(f->GetName(), TString(":") + f->getExportName());
      f->deleteAll();
      this->deleteObject(f->getName());
      this->addObject(importLink);
      retval = true;
    }
  }
  return retval;
}


//__________________________________________________________________________________|___________



bool TQFolder::writeUpdate(int depth, bool keepInMemory){
  // this function, just like TQFolder::writeFolder, will write the folder contents to disk
  // as opposed to the aforementioned function, this will only write an incremental update
  // of the folder, that is, only write those chunks of data that have been accessed since
  // the last write has been performed
  //
  // to determine this, writeUpdate will check for expanded branches of the folder hierarchy
  // and will save them into an external object in the current directory
  // this directory will be either of the following (with descending priority)
  // - the directory to which the folder has been written at the last call of writeFolder
  // - the directory from which the folder has been retrieved originally, if writeable
  // - the current working directory
  //
  // please note that the inremential nature of the updates is only achieved if
  // - previous calls of writeUpdate and/or writeFolder have used the keepInMemory=false flag, and
  // - the depth argument for previous writeFolder and/or writeUpdate calls has been >0
  // since this is the only case in which there will be collapsed branches in the folder hierarchy
  // alternatively, incremental updates will also work if the folder is opened in lazy mode, see
  // TQFolder::loadLazyFolder
  //
  if(!this->fMyDir){
    ERRORclass("cannot write update without active directory!");
    return false;
  }
  if(!this->fMyDir->IsWritable()){
    ERRORclass("cannot write update: active directory '%s' is not writeable!",this->fMyDir->GetName());
    return false;
  }

  // collect the list of subfolders
  std::vector<TQFolder*> subfolders;
  if (depth > 0) {
    TQIterator itr(this->GetListOfFolders());
    while (itr.hasNext()) {
      TQFolder* f = dynamic_cast<TQFolder*>(itr.readNext());
      if(!f) continue;
      subfolders.push_back(f);
    }
  }

  bool failed = false;
  // iterate over subfolders and replace them by import links
  for(size_t i=0; i<subfolders.size(); i++ ){
    TQFolder * subFolder = subfolders[i];
    if (!subFolder->writeUpdate(depth - 1, keepInMemory)){
      failed = true;
    }
    subFolder->detachFromBase();
    TQImportLink * importLink = new TQImportLink(subFolder->GetName(), TString(":") + subFolder->getExportName());
    this->addObject(importLink);
  }
  // write this object
  TQFolder* oldBase = this->getBase();
  this->fBase = NULL;
  this->fMyDir->WriteTObject(this, this->fExportName, "Overwrite");
  this->fBase = oldBase;

  // delete import links again and restore original subfolders
  for(size_t i=0; i<subfolders.size(); i++){
    TQFolder * subFolder = subfolders[i];
    if(keepInMemory){
      this->deleteObject(subFolder->GetName());
      this->addObject(subFolder);
    } else {
      delete subFolder;
    }
  }
  this->isFullyResolved = keepInMemory;
  return !failed;
}




//__________________________________________________________________________________|___________

bool TQFolder::writeDirectory(TDirectory * baseDir) {
  // write this TQFolder >>as a TDirectory<< to the given base directory this
  // function is intended to allow easy export of TQFolders to co-workers which
  // are not using this framework

  DEBUGclass("resolving import links to write");          
  this->resolveImportLinks(true);
  // stop if base directory is invalid
  if (!baseDir) {
    return false;
  }

  // check if the directory to create already exists
  TObject * dirObj = baseDir->Get(GetName());
  if (dirObj) {
    // there is another object (TDirecory?) with the same name
    return false;
  }

  // create a new directory
  TDirectory * dir = baseDir->mkdir(GetName(), GetTitle());
  if (!dir) {
    // creating the directory failed for some reason
    return false;
  }

  /* now loop on the contents of this folder
   * and write everything to the new directory */
  bool success = true;
  TQIterator itr(GetListOfFolders());
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();
    if(obj->GetName()[0]=='.') continue;
    if (obj->InheritsFrom(TQFolder::Class())) {
      if (!((TQFolder*)obj)->writeDirectory(dir)) {
        // writing sub folder failed for some reason
        success = false;
      }
    } else {
      dir->WriteTObject(obj);
    }
  }

  return success;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromTextFiles(const TString& filePattern) {
  // applies the textual definitions from one or more text files to this instance
  // for details, please refer to TQFolder::loadFromTextFile
  TString errMsg;
  bool success = importFromTextFiles(filePattern, errMsg);
  if (!success) {
    ERRORclass(errMsg);
  }
  return success;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromTextFiles(const TString& filePattern, TString &errorMessage) {
  // applies the textual definitions from one or more text files to this instance
  // for details, please refer to TQFolder::loadFromTextFile
  // error messages will be fed into the string given as second argument
  TList * files = TQUtils::getListOfFilesMatching(filePattern);

  TQIterator itr(files, true);
  while (itr.hasNext()) {
    TString filename = itr.readNext()->GetName();
    TString folderName = TQFolder::makeValidPath(filename, "_", false, false);
    TQFolder * folder = this->getFolder(folderName + "+");
    if (!folder) {
      errorMessage = TString::Format("Failed to create subfolder '%s'",
                                     folderName.Data());
      return false;
    }
    if (!folder->importFromTextFile(filename, errorMessage)) {
      return false;
    }
  }

  if (itr.getCounter() == 0) {
    errorMessage = TString::Format("Cound not find any file matching '%s'",
                                   filePattern.Data());
    return false;
  }

  return true;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromTextFile(const TString& filename) {
  // applies the textual definitions from exaclty one text file to this instance
  // for details, please refer to TQFolder::loadFromTextFile

  TString errMsg;
  bool success = importFromTextFile(filename, errMsg);
  if (!success) {
    ERRORclass(errMsg);
  }
  return success;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromTextFile(const TString& filename, TString &errorMessage) {
  // applies the textual definitions from exaclty one text file to this instance
  // for details, please refer to TQFolder::loadFromTextFile
  // error messages will be fed into the string given as second argument
  int nNewlines = 1;
  TString errFile;
  TString errMsg;

  // now import from text file
  bool success = importFromTextFilePrivate(filename, nNewlines, errFile, errMsg);

  // display error message in case an error occured
  if (!success) {
    if (nNewlines < 0) {
      errorMessage = TString::Format("Error related to file '%s': %s",
                                     errFile.Data(), errMsg.Data());
    } else {
      errorMessage = TString::Format("Error in line %d of file '%s': %s",
                                     nNewlines, errFile.Data(), errMsg.Data());
    }
  }

  // return true if no error occured and false otherwise
  return success;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromTextFilePrivate(const TString& filename_, int &nNewlines, TString &errFile, TString &errMsg) {
  // import a text file
  if(filename_.IsNull()) return false;
  TString filename = TQLibrary::getAbsolutePath(filename_);

  errFile = filename;

  // open input file
  DEBUGclass("reading text file %s",filename.Data());
  std::ifstream file(filename.Data());
  if (file.fail()) {
    nNewlines = -1;
    errMsg = "Failed to open file";
    return false;
  }


  TString text = TQStringUtils::readTextFromFile(&file,"#","#*","*#");
  DEBUGclass("done",filename.Data());

  // close file
  file.close();
  text.ReplaceAll("\r","");
  return importFromTextPrivate(text, nNewlines, errFile, errMsg);
}


//__________________________________________________________________________________|___________

TList * TQFolder::exportToText(bool includeUntextables, int indent) {
  // export this instance of TQFolder to a list of strings
  // the result can be used to create a new instance of TQFolder via
  // TQFolder::loadFolderFromText or to patch an existing folder by calling
  // TQFolder::importFromText
  DEBUGclass("resolving import links to export");          
  this->resolveImportLinks(true);

  // the text to return
  TList * text = 0;

  // indentation prefix
  TString indentStr = TQStringUtils::repeatTabs(indent);

  // export tags
  if (this->getNTags() > 0) {
    text = new TList();
    text->SetOwner(true);
    text->AddLast(new TObjString(TString::Format("%s<%s>",
                                                 indentStr.Data(), this->exportTagsAsString().Data()).Data()));
  }

  // export objects: loop over objects in folder
  TQIterator itr(GetListOfFolders());
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();
    if (!text) {
      text = new TList();
      text->SetOwner(true);
    }
    if (obj->InheritsFrom(TQFolder::Class())) {
      TList * subText = ((TQFolder*)obj)->exportToText(includeUntextables, indent + 1);
      if (subText) {
        text->AddLast(new TObjString(TString::Format("%s+%s {",
                                                     indentStr.Data(), obj->GetName()).Data()));
        text->AddAll(subText);
        text->AddLast(new TObjString(TString::Format("%s}",
                                                     indentStr.Data()).Data()));

        subText->SetOwner(false);
        delete subText;
      } else {
        text->AddLast(new TObjString(TString::Format("%s+%s;",
                                                     indentStr.Data(), obj->GetName()).Data()));
      }
    } else if (obj->InheritsFrom(TObjString::Class())){
      text->AddLast(new TObjString(TString::Format("%s\"%s\";",indentStr.Data(),obj->GetName())));
    } else if(includeUntextables) {
      TString details = TQStringUtils::getDetails(obj);
      if (!details.IsNull()) {
        details.Prepend(" {");
        details.Append("}");
      }
      if(obj->InheritsFrom(TH1::Class())){
        text->AddLast(new TObjString(indentStr+TQHistogramUtils::convertToText((TH1*)obj,2)+";"));
      } else {
        text->AddLast(new TObjString(TString::Format("%s#+%s::%s%s;", indentStr.Data(),
                                                     obj->IsA()->GetName(), obj->GetName(), details.Data()).Data()));
      }
    }
  }

  return text;
}


//__________________________________________________________________________________|___________

bool TQFolder::writeContentsToHTML(std::ostream& out, int expandDepth, bool includeUntextables) {
  // creat an HTML-view of this TQFolder instance
  // please be aware that the result can be unmanagably large for large folder hierarchies
  out << "<div class=\"listing\" style=\"display:" << (expandDepth > 0 ? "block" : "none") << "\">" << std::endl;

  // export tags
  TQIterator itrTags(this->getListOfKeys(),true);
  while(itrTags.hasNext()){
    out << "<div class=\"tag\">";
    TObject* obj = itrTags.readNext();
    TString name(obj->GetName());
    TString value(this->getTagStringDefault(name,""));
    out << "<span class=\"tagKey\">" << TQStringUtils::convertPlain2HTML(name) << "</span>";
    out << "<span class=\"tagValue\">" << TQStringUtils::convertPlain2HTML(value) << "</span>";
    out << "</div>" << std::endl;
  }
  // export objects: loop over objects in folder
  TQIterator itr(GetListOfFolders());
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();
    TQFolder* f = dynamic_cast<TQFolder*>(obj);
    if (f){
      out << "<div>" << std::endl;
      out << "<div class=\"folder\" onclick=\"toggleDiv(this.nextElementSibling)\"><span class=\"foldername\">" << f->GetName() << "</span></div>" << std::endl;
      f->writeContentsToHTML(out,expandDepth-1,includeUntextables);
      out << "</div>" << std::endl;
    } else if (includeUntextables) {
      TString details;
      if (obj->InheritsFrom(TH1::Class())) {
        details = TQHistogramUtils::getDetailsAsString((TH1*)obj, 2);
      } else if (obj->InheritsFrom(TQCounter::Class())) {
        details = ((TQCounter*)obj)->getAsString();
      }
      TString className(obj->IsA()->GetName());
      out << "<div class=\"object\"><span class=\"objecttype\"><a style=\"color:inherit; text-decoration:none\" target=\"_blank\" href=\"" << TQFolder::concatPaths(TQLibrary::getWebsite(),className) << ".html\">" << className << "</a></span><span class=\"objectname\">" << obj->GetName() << "</span>";
      if(!details.IsNull()) out << "<span class=objectdetails\">" << TQStringUtils::convertPlain2HTML(details) << "</span>";
      out << "</div>";
    }
  }

  out << "</div>" << std::endl;
  return true;
}

//__________________________________________________________________________________|___________

bool TQFolder::exportToHTMLFile(const TString& filename, int expandDepth, bool includeUntextables) {
  // creat an HTML-view of this TQFolder instance and write it to a file
  // please be aware that the result can be unmanagably large for large folder hierarchies
  if(expandDepth < 1) expandDepth = std::numeric_limits<int>::infinity();
  std::ofstream out(filename);
  if(!out.is_open()) return false;

  out << "<html>" << std::endl << "<head>" << std::endl;
  out << "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">" << std::endl;
  out << "<title>" << this->GetName() << "</title>" << std::endl;
  out << "<style id=\"style\" type=\"text/css\">" << std::endl;
  out << ".folder { width:100%; background-image:url(" << '"' << TQStringUtils::readSVGtoDataURI(TQFolder::concatPaths(TQLibrary::getTQPATH(),"share/nuoveXT-icons/folder.svg")) << '"' << "); background-size:contain; background-repeat: no-repeat; cursor: hand; }" << std::endl;
  out << ".foldername { margin-left:1.5em; font-weight:bold; }" << std::endl;
  out << ".listing { margin-left:3em; }" << std::endl;
  out << ".tag { display:inline-block; font-size:12pt; font-style:italic; width:100%; }" << std::endl;
  out << ".tagkey { display:inline-block; min-width: 200px; color:purple; margin-right:1em; }" << std::endl;
  out << ".tagvalue { display: inline-block; width: 80%; vertical-align: top; };" << std::endl;
  out << ".object { display:inline-block; }" << std::endl;
  out << ".objecttype { display:inline-block; width: 100px; color: darkblue; font-weight:bold; text-decoration:none; }" << std::endl;
  out << ".objectname { display:inline-block; width: 200px; }" << std::endl;
  out << ".objectdetails { };" << std::endl;
  out << "a { font-weight:bold; text-decoration:none; }" << std::endl;
  out << "</style>" << std::endl;

  out << "<script type=\"text/javascript\">" << std::endl;
  out << "function toggleDiv(obj){ if(!obj) return; if(obj.style.display==\"none\") obj.style.display=\"block\"; else obj.style.display=\"none\"; }" << std::endl;
  out << "</script>" << std::endl;
  out << "</head>" << std::endl;
  out << "<body>" << std::endl;
  this->writeContentsToHTML(out,expandDepth,includeUntextables);
  out << "<hr>" << std::endl;
  out << "<div style=\"font-size:12px\">This page was automatically generated by the <a href=\"" << TQLibrary::getWebsite() << "\">HWWAnalysisCode</a> software library. The icons displayed are part of the <a href=\"http://nuovext.pwsp.net/\">nuoveXT</a> icon scheme, licensed under <a href=\"http://www.gnu.org/licenses/lgpl.html\">LGPL</a> (2013).</div>" << std::endl;
  out << "</body>" << std::endl;
  out << "</html>" << std::endl;
  return true;
}

//__________________________________________________________________________________|___________

bool TQFolder::exportToTextFile(const TString& filename, bool includeUntextables) {
  // export this instance of TQFolder to a text file
  // the result can be used to create a new instance of TQFolder via
  // TQFolder::loadFolderFromTextFile or to patch an existing folder by calling
  // TQFolder::importFromTextFile
  TList * text = this->exportToText(includeUntextables);

  if (text) {
    text->AddFirst(new TObjString("# -*- mode: tqfolder -*-"));
    bool success = TQStringUtils::writeTextToFile(text, filename);
    delete text;
    return success;
  } else {
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromText(const TString& input) {
  // Import folders and tags from text. The syntax is built from three basic elements:
  //
  // 1) creating new folders (instances of TQFolder),
  // 2) setting tags on folders,
  // 3) executing commands.
  //
  // Lines starting with "#" will be considered a comment and will be ignored. In
  // the following the syntax is explain my means of an example text:
  //
  // # Create a new sub-folder ("mySubfolder"):
  // +mySubfolder;
  //
  // # Create a new sub-folder ("mySubfolder") and import recursively:
  // +mySubfolder {
  //
  // }
  //
  // # Please note: If a recursive import block is opened "{...}" no
  // # terminating ";" is needed.
  //
  // # Create new nested sub-folders ("mySubfolder/anotherSubFolder"):
  // +mySubfolder/anotherSubFolder;
  //
  // # This one does also work with recursive import:
  // +mySubfolder/anotherSubFolder {
  //
  // }
  //
  // # Set a tag ("myTag") with some value (myValue) on this folder:
  // <myTag = myValue>
  //
  // # Set more than one tag:
  // <myTag = myValue, anotherTag = false, hello = "world">
  //
  // # Set a tag ("myTag") with some value (myValue) on a sub-folder ("mySubfolder"):
  // <myTag = myValue> @ mySubfolder;
  //
  // # Include text to import from an external text file ("myImportText.txt"):
  // $include("myImportText.txt");
  //
  // # Delete a folder ("mySubfolder"):
  // $delete("mySubfolder");
  //
  // # (this one simply calls TQFolder::deleteObject(...)).
  //
  // # Ignore text inside a block:
  // $ignore() {
  //
  // }
  //
  // # Please note: the text to be ignored should be a valid text block to import.
  //
  // # Copy a folder ("mySubfolder") and rename the new instance (to "mySubfolder2")
  // $copy("mySubfolder >>:: mySubfolder2");

  TString errMsg;
  bool success = importFromText(input, errMsg);
  if (!success) {
    ERRORclass(errMsg);
  }
  return success;
}


//__________________________________________________________________________________|___________

bool TQFolder::importFromText(const TString& input, TString &errorMessage) {
  // Import folders and tags from text.
  // for details, please refer to the wrapper function of the same name
  // occurring errors will be fed into the string given as second argument
  int nNewlines = 1;
  TString errFile;
  TString errMsg;
  bool success = importFromTextPrivate(input, nNewlines, errFile, errMsg);
  if (!success) {
    if (errFile.IsNull()) {
      errorMessage = TString::Format("Error in line %d: %s", nNewlines, errMsg.Data());
    } else {
      errorMessage = TString::Format("Error in line %d of file '%s': %s",
                                     nNewlines, errFile.Data(), errMsg.Data());
    }
  }
  return success;
}

//__________________________________________________________________________________|___________

bool TQFolder::executeCopyCommand(TString object, TString& errMsg, bool moveOnly, const TString& destPrefix){
  // read object source
  DEBUGclass("executeCopyCommand called on '%s' with destination prefix '%s'",this->getPath().Data(),destPrefix.Data());
  TString source;
  object.ReplaceAll("$(BASEFOLDERNAME)",this->GetName());
  TQStringUtils::removeLeadingBlanks(object);
  if (!TQStringUtils::readToken(object, source, TQStringUtils::getDefaultIDCharacters() + "*?/")) {
    errMsg = "Expecting object source for command 'copy'";
    return false;
  }
  TQStringUtils::removeLeadingBlanks(object);
  TString dest;
  if (!object.IsNull()) {
    if (TQStringUtils::removeLeading(object, ">") != 2) {
      errMsg = "Expecting destination operator '>>' after source for command 'copy', but found '" + object + "'";
      return false;
    }
    TQStringUtils::removeLeadingBlanks(object);
    if (object.IsNull()) {
      errMsg = "Expecting destination after operator '>>' for command 'copy', but received no input";
      return false;
    }
    dest = TQFolder::concatPaths(destPrefix,this->replaceInText(object,"~"));
  }
  TString destObj = TQFolder::getPathTail(dest);
  TQFolder* destFolder = this->getFolder(dest);
  DEBUGclass("evaluating $copy/$move operator in '%s', source='%s', dest='%s', destObj='%s'",this->getPath().Data(),source.Data(),dest.Data(),destObj.Data());
  // get source of copy
  std::vector<std::pair<TQFolder*,TObject*>> sources;
  TQIterator objitr(this->getListOfObjectPaths(source),true);

  while(objitr.hasNext()){
    TObject * objSourcePath = objitr.readNext();
    if (!objSourcePath) continue;
    TString srcPath(objSourcePath->GetName());
    DEBUGclass("source path '%s' relative to folder '%s'",srcPath.Data(),this->getPath().Data());
    TString srcName(TQFolder::getPathTail(srcPath));
    TObject* objSource = this->getObject(srcName,srcPath);
    if(!objSource) continue;
    TQFolder* fSource = this->getFolder(TQFolder::getPathTail(srcPath));
    sources.push_back(std::make_pair(fSource,objSource));
  }

  for(const auto& s:sources){
    TQFolder* fSource = s.first;
    TObject* objSource = s.second;
    if(!moveOnly){
      // make copy
      if (objSource->InheritsFrom(TQFolder::Class())) {
        objSource = ((TQFolder*)objSource)->copy();
      } else {
        objSource = objSource->Clone();
      }
      // add copy
      if (!destFolder->addObject(objSource, destObj)) {
        delete objSource;
        errMsg = TString::Format("Failed to copy object '%s'", source.Data());
        return false;
      }
    } else {
      // detach
      if (!objSource->InheritsFrom(TQFolder::Class())) {
        fSource->Remove(objSource);
      }
      // add
      if (!destFolder->addObject(objSource, destObj)) {
        errMsg = TString::Format("Failed to copy object '%s'", source.Data());
        return false;
      }
    }
  }
  if(sources.size() < 1){
    errMsg = TString::Format("Couldn't find object matching '%s' in '%s'", source.Data(), this->getPath().Data());
    return false;
  }
  return true;
}

//__________________________________________________________________________________|___________

bool TQFolder::importFromTextPrivate(TString input, int &nNewlines, TString &errFile, TString &errMsg) {
  // worker function to import a TQFolder from a text file
  DEBUGclass("entering function");
  // read input string
  while (!input.IsNull()) {
    DEBUGclass("next up: '%s'",input.Data());
    if(errMsg.Length() > 1e7){
      throw std::runtime_error("BREAK: too many error messages, debug your input or use 'skipsilent=true' to suppress!");
    }

    // read leading blanks and line breaks
    TQStringUtils::readBlanksAndNewlines(input, nNewlines);

    // switch according to token
    TString token;
    if (input.BeginsWith("#")) {
      // ==> comment: ignore line
      TQStringUtils::readUpTo(input, token, "\n");
    } else if (input.BeginsWith("@")) {
      // read "@"
      int np = TQStringUtils::removeLeading(input, "@");
      if (np > 1) {
        errMsg = TString::Format("Wrong operator '%s'", TQStringUtils::repeat("@", np).Data());
        return false;
      }

      // read name of object
      int nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      if (TQStringUtils::readToken(input, token,
                                   TQStringUtils::getDefaultIDCharacters() + ",/:*?$()") == 0) {
        nNewlines = nNewlinesTmp;
        errMsg = "Expect object definition after '@'";
        return false;
      }

      // create new folder
      TString path = this->replaceInText(token,"~",false);
      TCollection* c = this->getListOfFolders(path);
      nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlinesTmp);
      if (input.BeginsWith("{")) {
        token.Clear();
        if (TQStringUtils::readBlock(input, token, "{}[]()", "''\"\"#\n", false, 2) == 0) {
          errMsg = TString::Format("Block opened here '%s' not closed properly",TQStringUtils::maxLength(TQStringUtils::compactify(input), 40).Data());
          return false;
        }
      }
      TString errMsgHold;
      if(c && c->GetEntries() > 0){
        TQFolderIterator itr(c,true);
        while(itr.hasNext()){
          TQFolder* f = itr.readNext();
          if(!f) continue;
          //if (!
          f->importFromTextPrivate(token, nNewlines, errFile, errMsg);
          if (!errMsg.IsNull()) errMsgHold += errMsg + "; \n" ;
          //) {
          //  return false;
          //}
        }
        nNewlines = nNewlinesTmp;
      } else {
        errMsg = TString::Format("[WARNING] Operation '@%s' produced no matches!",path.Data());
        //return false;
      }
      errMsg = errMsgHold;
      if (!errMsg.IsNull()) {
        return false;
      }
    } else if (input.BeginsWith("+")) {
      // ==> new object

      // read "+"
      int np = TQStringUtils::removeLeading(input, "+");
      if (np > 1) {
        errMsg = TString::Format("Wrong operator '%s'", TQStringUtils::repeat("+", np).Data());
        return false;
      }

      // read name of object
      int nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      if (TQStringUtils::readToken(input, token,
                                   TQStringUtils::getDefaultIDCharacters() + "/:*?$()") == 0) {
        nNewlines = nNewlinesTmp;
        errMsg = "Expect object definition after '+'";
        return false;
      }

      // create new folder
      TString newname = this->replaceInText(token,"~",false);
      newname.ReplaceAll("$(BASEFOLDERNAME)",this->GetName());
      TQFolder * newObj = this->getFolder(newname + "+");
      if (!newObj) {
        errMsg = TString::Format("Failed to create object '%s'", token.Data());
        return false;
      }

      // nested definition?
      nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      if (input.BeginsWith("{")) {
        token.Clear();
        if (TQStringUtils::readBlock(input, token, "{}[]()", "''\"\"#\n", false, 2) == 0) {
          errMsg = TString::Format("Block opened here '%s' not closed properly",
                                   TQStringUtils::maxLength(TQStringUtils::compactify(input), 40).Data());
          return false;
        }
        if (!newObj->importFromTextPrivate(token, nNewlines, errFile, errMsg)) {
          return false;
        }
      } else if (!TQStringUtils::removeLeading(input, ";", 1)) {
        nNewlines = nNewlinesTmp;
        errMsg = TString::Format("Missing terminating ';' after object definition '%s'", token.Data());
        return false;
      }

    } else if (input.BeginsWith("<")) {
      // ==> set tags

      // read tags
      TString tags;
      if (TQStringUtils::readBlock(input, tags, "<>[](){}", "''\"\"#\n", false, 2) == 0) {
        errMsg = TString::Format("Tag definition block opened here '%s' not closed properly",
                                 TQStringUtils::maxLength(input, 10).ReplaceAll("\n", " ").Data());
        return false;
      }

      // read (optional) destination
      TString dest;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      if (TQStringUtils::removeLeading(input, "@", 1) > 0) {
        // read destination
        int nNewlinesTmp = nNewlines;
        TQStringUtils::readBlanksAndNewlines(input, nNewlines);
        if (TQStringUtils::readToken(input, dest,
                                     TQStringUtils::getDefaultIDCharacters() + "/*?, ") == 0) {
          nNewlines = nNewlinesTmp;
          errMsg = "Expecting tag destination path after '@'";
          return false;
        }
        // read terminating ";"
        nNewlinesTmp = nNewlines;
        TQStringUtils::readBlanksAndNewlines(input, nNewlines);
        if (!TQStringUtils::removeLeading(input, ";", 1)) {
          nNewlines = nNewlinesTmp;
          errMsg = "Missing terminating ';' after tag destination path";
          return false;
        }
      }

      // import tags
      tags.ReplaceAll("$(BASEFOLDERNAME)",this->GetName());
      TQTaggable tagReader(tags);
      tagReader.exportTags(this, dest);
    } else if (input.BeginsWith("$")) {
      // ==> command
      // remove leading "$"
      TQStringUtils::removeLeading(input, "$", 1);

      // read command
      TString cmd;
      if (!TQStringUtils::readToken(input, cmd, TQStringUtils::getLetters())) {
        // ==> missing command: stop
        errMsg = "Missing command after '$'";
        return false;
      }

      // read parameter
      TString strParameter;

      int nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      if (input.BeginsWith("(")) {
        if (TQStringUtils::readBlock(input, strParameter, "()", "''\"\"#\n", false, 2) == 0) {
          errMsg = TString::Format("Parameter block opened here '%s' not closed properly",
                                   TQStringUtils::maxLength(input, 10).ReplaceAll("\n", " ").Data());
          return false;
        }
      } else {
        // ==> missing parameter: stop
        nNewlines = nNewlinesTmp;
        errMsg = TString::Format("Missing '(...)' after command '%s'", cmd.Data());
        return false;
      }
      
      DEBUGclass("parsing command '%s' with arguments %s, input continues as '%s'",cmd.Data(),strParameter.Data(),input.Data());
      
      bool isCmdInclude = (cmd.CompareTo("include", TString::kIgnoreCase) == 0);
      bool isCmdImport = (cmd.CompareTo("import", TString::kIgnoreCase) == 0);
      bool isCmdCopy = (cmd.CompareTo("copy", TString::kIgnoreCase) == 0);
      bool isCmdMove = (cmd.CompareTo("move", TString::kIgnoreCase) == 0);
      bool isCmdDelete = (cmd.CompareTo("delete", TString::kIgnoreCase) == 0);
      bool isCmdEscape = (cmd.CompareTo("escape", TString::kIgnoreCase) == 0);
      bool isCmdIgnore = (cmd.CompareTo("ignore", TString::kIgnoreCase) == 0);
      bool isCmdModify = (cmd.CompareTo("modify", TString::kIgnoreCase) == 0);
      bool isCmdCreate = (cmd.CompareTo("create", TString::kIgnoreCase) == 0);
      bool isCmdFor = (cmd.CompareTo("for", TString::kIgnoreCase) == 0);
      bool isCmdForEach = (cmd.CompareTo("foreach", TString::kIgnoreCase) == 0);
      if (isCmdForEach) {  // both commands start with "for", give precedence to foreach
          isCmdFor = false;
      }
      bool isCmdReplace = (cmd.CompareTo("replace", TString::kIgnoreCase) == 0);
      bool isCmdPrint = (cmd.CompareTo("print", TString::kIgnoreCase) == 0); //execute 'print' command with given argument on curent folder location
      bool isCmdPrintLine (cmd.CompareTo("printline", TString::kIgnoreCase) == 0); //print argument to console
      bool isCmdWrite = (cmd.CompareTo("write", TString::kIgnoreCase) == 0); //write folder to disk
      bool acceptNestedBlock = isCmdCopy;
      bool expectNestedBlock = isCmdIgnore || isCmdFor || isCmdForEach;

      // read terminating ";"
      nNewlinesTmp = nNewlines;
      TQStringUtils::readBlanksAndNewlines(input, nNewlines);
      TString nestedBlock;
      if (input.BeginsWith("{") && (acceptNestedBlock || expectNestedBlock)) {
        if (TQStringUtils::readBlock(input, nestedBlock, "{}[]()", "''\"\"#\n", false, 2) == 0) {
          errMsg = TString::Format("Block opened here '%s' not closed properly",
                                   TQStringUtils::maxLength(input, 10).ReplaceAll("\n", " ").Data());
          return false;
        }
      } else if (!input.BeginsWith("{") && expectNestedBlock) {
        // ==> missing terminating ";": stop
        nNewlines = nNewlinesTmp;
        errMsg = TString::Format("Expecting nested block after command '%s'", cmd.Data());
        return false;
      } else if (!TQStringUtils::removeLeading(input, ";", 1)) {
        // ==> missing terminating ";": stop
        nNewlines = nNewlinesTmp;
        errMsg = TString::Format("Missing terminating ';' after command '%s'", cmd.Data());
        return false;
      }

      strParameter.ReplaceAll("$(BASEFOLDERNAME)",this->GetName());

      if (isCmdInclude) {
        // read filename
        TQTaggable param;
        param.importTagWithPrefix(strParameter, "", false, "filename");
        TString includeFilenameOrig;

        int nNewlines2 = 1;
        TString errFile2;
        TString errMsg2;
        //@tag: [filename] This parameter tag states the file to be included by $include(filename=myfile) when importing a folder structure from text. Specifying the name of this tag ("filename=") is optional.
        if (param.getNTags() != 1 || !param.getTagString("filename", includeFilenameOrig)) {
          // ==> error reading file: stop
          errMsg = "Wrong number of arguments or invalid argument to command 'include', filename needed.";
          return false;

        }
        includeFilenameOrig = this->replaceInTextRecursive(includeFilenameOrig);
        
        TString includeFilename = TQPathManager::getPathManager()->findConfigPath(includeFilenameOrig);

        if(includeFilename.IsNull()){
          errMsg = TString::Format("Failed to find file '%s'", includeFilenameOrig.Data());
          return false;
        }
        if (!this->importFromTextFilePrivate(includeFilename, nNewlines2, errFile2, errMsg2)) {
          // ==> error reading file: stop
          if (nNewlines2 < 0) {
            errMsg = TString::Format("Failed to include file '%s': %s", includeFilename.Data(), errMsg2.Data());
          } else {
            nNewlines = nNewlines2;
            errFile = errFile2;
            errMsg = errMsg2;
          }
          return false;
        }
      } else if (isCmdImport) {
        // import a ROOT file
        TQStringUtils::unquoteInPlace(strParameter,"\"'");
        if (!this->importObject(strParameter)){
          errMsg = TString::Format("Failed to import '%s'", strParameter.Data());
          return false;
        }
      } else if (isCmdDelete) {
        // read object
        TQTaggable param;
        //@tag: [object,filter,skipsilent] This parameter tag states the object to be deleted/copied by $delete(object=someObject) or $copy("path/to/oldObj >> new/Path/::newName"); when importing a folder structure from text. Specifying the name of this tag ("object=") is optional. A "filter" can be specified to only apply the operation to instances of TQSampleFolder ("sf", "samplefolder") or TQSample ("s", "sample"); please note that the filter is inclusive for instances of classes inheriting from the one specified by the filter (i.e. "sf" also includes instances of TQSample).
        // the skipsilent flag can be set to true, e.g. to avoid warning messages that are mostly harmless, e.g. when a folder should be deleted that is not actually present in the SF.
        
        param.importTagsWithPrefix(strParameter, "", false, false, "object");
        TString object;
        bool skipSilent = param.getTagBoolDefault("skipsilent",false);
        //retrieve filter (allows to modify only TQSamples, TQSampleFolders and TQSamples or all TQFolders
        TClass* filter = 0;
        if (TQStringUtils::compare(param.getTagStringDefault("filter",""),"s") == 0 || TQStringUtils::compare(param.getTagStringDefault("filter",""),"sample") == 0) {
          filter = TQSample::Class();
        } else if (TQStringUtils::compare(param.getTagStringDefault("filter",""),"sf") == 0 || TQStringUtils::compare(param.getTagStringDefault("filter",""),"samplefolder") == 0) {
          filter = TQSampleFolder::Class();
        } else if (TQStringUtils::compare(param.getTagStringDefault("filter",""), "") != 0) {
          errMsg = TString::Format("Given argument '%s' for tag 'filter' in command 'delete' unkown.", param.getTagStringDefault("filter","").Data());          
          return false;
        }
        if (param.getNTags() < 1){
          // ==> error copying: stop
          errMsg = "Wrong number of arguments to command 'delete'";
          return false;
        } else if(param.getTagString("object", object)){
          object = TQStringUtils::trim(object);
          
          if (!this->deleteObject(object, false, filter)) {
            // ==> error deleting object: stop
            if (!skipSilent) {
              errMsg = TString::Format("[mostly harmless] in %s: Failed to delete object '%s'", this->getPath().Data(),object.Data());
            }
            //return false;
          }
        } else if(param.getTagString("tags", object)){
          TString path;
          TQTaggable* obj=NULL;
          if(param.getTagString("path",path)){
            obj = dynamic_cast<TQTaggable*>(this->getObject(path));
          } else {
            obj = this;
          }
          obj->removeTags(object);
        }
      } else if (isCmdCopy || isCmdMove) {

        // read object
        TQTaggable param;
        param.importTagWithPrefix(strParameter, "", false, "object");
        TString object;

        if (param.getNTags() != 1 || !param.getTagString("object", object)) {
          // ==> error copying: stop
          errMsg = "Wrong number of arguments to command 'copy'";
          return false;

        } else {
          if(!this->executeCopyCommand(object,errMsg,isCmdMove)){
            WARNclass(TString::Format("copy/move command %s failed, skipping",object.Data()));
          }
        }
      } else if (isCmdIgnore) {
        // ==> simply don't do anything
      } else if (isCmdForEach || (isCmdFor && strParameter.Contains(":"))) {
	TString key;
	std::vector<TString> loopElements;
        TString tmpLoopElement;	
	if(isCmdForEach){
	  if(TQStringUtils::readUpTo(strParameter,key, ",") <1 ) {
	    errMsg = "foreach-command must have syntax '$foreach(key,item1,item2,...){ ... }'";
	    return false;
	  }
	  TQStringUtils::removeLeadingBlanks(key);
	  TQStringUtils::removeTrailingBlanks(key);
	  DEBUGclass("foreach key = '%s'", key.Data());
	} else {
	  TString strItems;
	  if(TQStringUtils::readUpTo(strParameter,key,":")<1 || TQStringUtils::removeLeading(strParameter,":") !=1 || TQStringUtils::readUpTo(strParameter,strItems,")")<1){
	    errMsg = "for-command must have syntax '$for(key:elem1,elem2,...){ ... }'";
	    return false;
	  }
	  loopElements = TQStringUtils::split(strItems,",");
	}	
        while (TQStringUtils::removeLeading(strParameter, ",") == 1 && TQStringUtils::readUpTo(strParameter, tmpLoopElement, ",") >= 1) {
          TQStringUtils::removeLeadingBlanks(tmpLoopElement);
          TQStringUtils::removeTrailingBlanks(tmpLoopElement);
          DEBUGclass("foreach found value in definition: '%s'", tmpLoopElement.Data());
          loopElements.emplace_back(tmpLoopElement);
          tmpLoopElement = "";
        }
        if (loopElements.empty()) {
          errMsg = "you need to specify at least one item. foreach-command must have syntax '$foreach(key,item1,item2,...){ ... }'";
          return false;
        }
        int tmpNewlines(nNewlines);
        TQTaggable helper;
        for (TString it : loopElements) {
          helper.setTagString(key, TQStringUtils::trim(it," \n\t"));
          TString tmpBlock = helper.replaceInText(nestedBlock);
          tmpNewlines = nNewlines;
          if (!this->importFromTextPrivate(tmpBlock, tmpNewlines, errFile, errMsg)){
            return false;
          }
        }
        nNewlines = tmpNewlines;
      } else if(isCmdFor){
        /*@tag:[step,pad] edit the behavior of the for-loop, enabling skipping a few entries (step) or padding the string of the key to more or less than the number of digits of the final value*/
	TString key,strItBegin,strItEnd;
	if(TQStringUtils::readUpTo(strParameter,key,",")<1 || TQStringUtils::removeLeading(strParameter,",") !=1 ||
	   TQStringUtils::readUpTo(strParameter,strItBegin,",")<1 || TQStringUtils::removeLeading(strParameter,",") !=1 ||
	   TQStringUtils::readUpTo(strParameter,strItEnd,",")<1){
	  errMsg = "for-command must have syntax '$for(key,begin,end){ ... }'";
	  return false;
	}
	TQTaggable param(strParameter);
	TString sBegin = this->replaceInText(strItBegin);
	TString sEnd = this->replaceInText(strItEnd);
	if(!TQStringUtils::isInteger(sBegin)){
	  errMsg = TString::Format("for-command must have integer as beginning, not '%s'",sBegin.Data());
	  return false;
	}
	if(!TQStringUtils::isInteger(sEnd)){
	  errMsg = TString::Format("for-command must have integer as end, not '%s'",sEnd.Data());
	  return false;
        }
	int itBegin = atoi(sBegin.Data());
	int itEnd = atoi(sEnd.Data());
	int step = param.getTagIntegerDefault("step",itEnd >= itBegin ? 1 : -1);
	int pad = param.getTagIntegerDefault("pad",1+log10(std::max(itBegin,itEnd-1)));
	int tmpNewlines(nNewlines);
	TQTaggable helper;
	for(int it=itBegin; it<itEnd; it+=step){
	  helper.setTagString(key,TQStringUtils::padNumber(it,pad));
	  TString tmpBlock = helper.replaceInText(nestedBlock);
	  tmpNewlines = nNewlines;
	  if (!this->importFromTextPrivate(tmpBlock, tmpNewlines, errFile, errMsg)){
	    return false;
	  }
	}
	nNewlines = tmpNewlines;
      } else if (isCmdEscape) {
        TQStringUtils::removeLeadingBlanks(strParameter);
        bool inverted = (TQStringUtils::removeLeading(strParameter,"!") > 0); //inverted selection, trigger on everything BUT folders matching the filter if name is prefixed by "!".
        if (TQStringUtils::equal(strParameter,"") || TQStringUtils::matches(this->getName(), strParameter)) {
          if (!inverted) return true;
        } else {
          if (inverted) return true;
        }
      } else if (isCmdModify) {
        TQTaggable param;
        param.importTags(strParameter);
        #ifdef _DEBUG_
        param.printTags();
        #endif
        /*@tag:[tag,operator,value,path,filter,create,force,override,skipsilent] These text argument tags are used for the $modify command when importing from text. They specify which tag ("tag") at which folder (matching the value of "path", wildcarding is possible) to modify using the value of the tag "value" and the operator from "operator". "tag", "operator" and "value" are required, "path" is optional. A "filter" can be specified to only apply the operation to instances of TQSampleFolder ("sf", "samplefolder") or TQSample ("s", "sample"); please note that the filter is inclusive for instances of classes inheriting from the one specified by the filter (i.e. "sf" also includes instances of TQSample).

        Supported operators are dependent on the type of tag: string: "+" (append), "-" (remove trailing), "=" (set); int/double: "+","-","*","/","^"(exponentiate, old^new),"="(set); bool: "=","==","!=","&&","||". Additionally, operators for non-boolean values (except "=") can be prefixed with an exclamation mark "!" interchanging the existing (old) value and the new value in the corresponding operation for numerical values. For strings, an exclamation mark before the actual operator causes the operation to be performed at the beginning of the existing string. Examples:
        "/" calculates <old>/<new>, "!/" calculates <new>/<old>
        "-" removes the string <new> from the end of <old> if possible, "!-" does the same thing at the beginning of <old>.

        The boolean tag "create" specifies is a new tag should be created, if none of the given name is present so far (default: false). If "force" is set to true, existing tags of different types are overwritten (default: false). In both cases (non-existing tag or overwriting tag of different type), an initial value of 0., false or "" is used before the specified operation is performed. The boolean tag "override" allows to specify is existing tags (of same type) should be replaced. This can be used to initalize tag at all placed which do not have a value set yet. Default is !create.

        In case of any unexpected behavior, warning messages are printed by default. To skip these messages becuase you know what you are doing, you can set the tag "skipsilent" to true.
        */
        if ( !(param.hasTagString("tag") && param.hasTagString("operator") && param.hasTag("value")) ) {
        errMsg = TString("Missing options! Required values are 'tag=\"tagToModify\", operator=\"+-*/=\", value=someValue'. Optional parameters are 'path=\"path/to/folder\", filter=\"s/sf\", create=true/false, override=false/true, force=true/false (later values are default)");
        }
        TString path = param.getTagStringDefault("path",".");
        TString tag = param.getTagStringDefault("tag","");
        //retrieve filter (allows to modify only TQSamples, TQSampleFolders and TQSamples or all TQFolders
        TClass* filter = TQFolder::Class();
        if (TQStringUtils::compare(param.getTagStringDefault("filter",""),"s") == 0 || TQStringUtils::compare(param.getTagStringDefault("filter",""),"sample") == 0) {
          filter = TQSample::Class();
        } else if (TQStringUtils::compare(param.getTagStringDefault("filter",""),"sf") == 0 || TQStringUtils::compare(param.getTagStringDefault("filter",""),"samplefolder") == 0) {
          filter = TQSampleFolder::Class();
        }
        TString op = param.getTagStringDefault("operator","=");
        //only create a non-existent tag if enforced
        bool create = param.getTagBoolDefault("create",false);
        bool skipSilent = param.getTagBoolDefault("skipsilent",false);
        bool force = param.getTagBoolDefault("force",false);
        bool replace = param.getTagBoolDefault("override",!create); //if we are not allowed to create new tags and operator is '=' we wouldn't do anything unless replace is true.
        //retrieve type of tag
        bool isString = param.tagIsOfTypeString("value");
        bool isDouble = param.tagIsOfTypeDouble("value");
        bool isInt = param.tagIsOfTypeInteger("value");
        bool isBool = param.tagIsOfTypeBool("value");
        if (!isString && !isDouble && !isInt && !isBool) {
          errMsg = TString("Cannot modify! Unsupported tag type.");
          return false;
        }
        bool inverted = false;//if this is true, the order of the arguments is inverted (i.e. the left hand argument of the operator becomes the right hand one and vice versa.
        if (!isBool) {
          inverted = TQStringUtils::removeLeading(op,"!",1) == 1;
        }
        if (inverted && TQStringUtils::equal(op,"=")) {
          errMsg = TString::Format("Are you trying to set a value in inverted mode (operator '!=' for non-boolean value)? This does not makesense!");
          return false;
        }
        bool silent = param.getTagBoolDefault("quiet",param.getTagBoolDefault("silent",false));
        if (isString && !( TQStringUtils::equal(op,"=") || TQStringUtils::equal(op,"+") || TQStringUtils::equal(op,"-") ) ) {
          errMsg = TString::Format("Unsupported modification operator '%s' for value of type %s",op.Data(),"string");
          return false;
        }
        if (isDouble && !( TQStringUtils::equal(op,"=") || TQStringUtils::equal(op,"+") || TQStringUtils::equal(op,"-") || TQStringUtils::equal(op,"*") || TQStringUtils::equal(op,"/") || TQStringUtils::equal(op,"^") ) ) {
          errMsg = TString::Format("Unsupported modification operator '%s' for value of type %s",op.Data(),"double");
          return false;
        }
        if (isInt && !( TQStringUtils::equal(op,"=") || TQStringUtils::equal(op,"+") || TQStringUtils::equal(op,"-") || TQStringUtils::equal(op,"*") || TQStringUtils::equal(op,"/") || TQStringUtils::equal(op,"^") ) ) {
          errMsg = TString::Format("Unsupported modification operator '%s' for value of type %s",op.Data(),"int");
          return false;
        }
        if (isBool && !( TQStringUtils::equal(op,"=") || TQStringUtils::equal(op,"==") || TQStringUtils::equal(op,"!=") || TQStringUtils::equal(op,"&&") || TQStringUtils::equal(op,"||") ) ) {
          errMsg = TString::Format("Unsupported modification operator '%s' for value of type %s",op.Data(),"bool");
          return false;
        }

        if ( TQStringUtils::equal(op,"/") && (!inverted && ((isDouble && param.getTagDoubleDefault("value",0.) == 0.) || (isInt && param.getTagIntegerDefault("value",0) == 0) ) ) ) {
          errMsg = TString("Cannot modify tags! Division by zero is not available yet. ETA: 1/0. days");
          return false;
        }

        TList* targetList = this->getListOfFolders(path,filter);
        if (!targetList) {
          errMsg = TString::Format("No matching folders found for pattern '%s'",path.Data());
          return false;
        }


        TQFolderIterator itr(targetList);
        while (itr.hasNext()) {
          TQFolder* folder = itr.readNext();
          if (!folder) continue;
          //catch division by zero (for "inverted" mode) TODO: some more checks might be required here
          if (inverted && (TQStringUtils::equal(op,"/") && (folder->tagIsOfTypeDouble(tag) || folder->tagIsOfTypeInteger(tag)) && folder->getTagDoubleDefault(tag,0.) == 0. )) {
            WARNclass(TString::Format("Cannot modify tags for folder '%s' (inverted mode)! Division by zero is not available yet. ETA: 1/0. days; skipping this folder",folder->getName().Data() ).Data());
            continue;
          }

          if (isString) {
            if (folder->hasTag(tag) && !folder->tagIsOfTypeString(tag) && !(create||force) ) {
              if (!skipSilent)
                WARNclass("In folder '%s', skipping modification of tag '%s' with operator '%s' and value '%s' due to type mismatch. Use force=true to modify anyways!",folder->getPath().Data(),tag.Data(),op.Data(), param.getTagStringDefault("value","").Data());
              //don't create a new tag
              continue;
            }
            if (!folder->hasTag(tag) && !create ) {
              if (!skipSilent)
                WARNclass("In folder '%s', skipping modification of tag '%s' with operator '%s' and value '%s' due to tag not being present. Use create=true to modify anyways!",folder->getPath().Data(),tag.Data(),op.Data(), param.getTagStringDefault("value","").Data());
              //don't create a new tag
              continue;
            }
            if (folder->hasTag(tag) && !folder->tagIsOfTypeString(tag)) {
              if (!force) {
                if (!skipSilent)
                  WARNclass("Tag '%s' at '%s' is already present but of different type!", tag.Data(), folder->getPath().Data());
                continue;
              } else {
                if (!silent) WARNclass("Replacing existing tag '%s' of different type at '%s'!", tag.Data(), folder->getPath().Data());
                TString val;
                if (!folder->getTagString(tag,val)) {WARNclass("Failed to convert existing tag to string type!"); continue;}
                folder->removeTag(tag);
                folder->setTagString(tag,val);
              }
            }
            if (TQStringUtils::equal(op,"=") && (replace || !folder->hasTagString(tag) ) ) {folder->setTag(tag,param.getTagStringDefault("value",""));}
            if (TQStringUtils::equal(op,"+")) {folder->setTag(tag,inverted ? param.getTagStringDefault("value","") + folder->getTagStringDefault(tag,"") : folder->getTagStringDefault(tag,"") + param.getTagStringDefault("value","")); continue;}
            if (TQStringUtils::equal(op,"-")) {
              TString tmp = folder->getTagStringDefault(tag,"");
              if (inverted) {
                TQStringUtils::removeLeadingText(tmp,param.getTagStringDefault("value",""));
              } else {
                TQStringUtils::removeTrailingText(tmp,param.getTagStringDefault("value",""));
              }
              folder->setTag(tag,tmp);
              continue;
            }
          } else if (isDouble) {
            if (!folder->tagIsOfTypeDouble(tag) && !(create||force) ) {
              if (!skipSilent)
                WARNclass("In folder '%s', skipping modification of tag '%s' with operator '%s' and value '%f' due to type mismatch. Use force=true to modify anyways!",folder->getPath().Data(),tag.Data(),op.Data(), param.getTagDoubleDefault("value",0.));
              //don't create a new tag
              continue;
            }
            if (folder->hasTag(tag) && !folder->tagIsOfTypeDouble(tag)) {
              if (!force) {
                if (!skipSilent)
                  WARNclass("Tag '%s' at '%s' is already present but of different type!", tag.Data(), folder->getPath().Data());
                continue;
              } else {
                if (!silent) WARNclass("Replacing existing tag '%s' of different type at '%s'!", tag.Data(), folder->getPath().Data());
                double val;
                if (!folder->getTagDouble(tag,val)) {WARNclass("Failed to convert existing tag to double type!"); continue;}
                folder->removeTag(tag);
                folder->setTagDouble(tag,val);
              }
            }
            if (TQStringUtils::equal(op,"=") && (replace || !folder->hasTagDouble(tag) ) ) {folder->setTag(tag,param.getTagDoubleDefault("value",0.)); continue;}
            //+ operator for double is abelian, so we silently ignore the "inverted" flag
            if (TQStringUtils::equal(op,"+")) {folder->setTag(tag,folder->getTagDoubleDefault(tag,0.) + param.getTagDoubleDefault("value",0.)); continue;}
            if (TQStringUtils::equal(op,"-")) {folder->setTag(tag,inverted ? param.getTagDoubleDefault("value",0.) - folder->getTagDoubleDefault(tag,0.) : folder->getTagDoubleDefault(tag,0.) - param.getTagDoubleDefault("value",0.)); continue;}
            //* operator for double is abelian, so we silently ignore the "inverted" flag
            if (TQStringUtils::equal(op,"*")) {folder->setTag(tag,folder->getTagDoubleDefault(tag,0.) * param.getTagDoubleDefault("value",0.)); continue;}
            if (TQStringUtils::equal(op,"/")) {folder->setTag(tag,inverted ? param.getTagDoubleDefault("value",0.) / folder->getTagDoubleDefault(tag,0.) : folder->getTagDoubleDefault(tag,0.) / param.getTagDoubleDefault("value",0.)); continue;} //division by zero should be caught at an earlier stage.
            if (TQStringUtils::equal(op,"^")) {folder->setTag(tag,inverted ? pow(param.getTagDoubleDefault("value",0.) , folder->getTagDoubleDefault(tag,0.) ) : pow( folder->getTagDoubleDefault(tag,0.) , param.getTagDoubleDefault("value",0.) ) ); continue;}
          }  else if (isInt) {
            if (!folder->tagIsOfTypeInteger(tag) && !(create||force) ) {
              if (!skipSilent)
                WARNclass("In folder '%s', skipping modification of tag '%s' with operator '%s' and value '%d' due to type mismatch. Use force=true to modify anyways!",folder->getPath().Data(),tag.Data(),op.Data(), param.getTagIntegerDefault("value",0));
              //don't create a new tag
              continue;
            }
            if (folder->hasTag(tag) && !folder->tagIsOfTypeInteger(tag)) {
              if (!force) {
                WARNclass("Tag '%s' at '%s' is already present but of different type!", tag.Data(), folder->getPath().Data());
                continue;
              } else {
                if (!silent) WARNclass("Replacing existing tag '%s' of different type at '%s'!", tag.Data(), folder->getPath().Data());
                int val;
                if (!folder->getTagInteger(tag,val)) {WARNclass("Failed to convert existing tag to integer type!"); continue;}
                folder->removeTag(tag);
                folder->setTagInteger(tag,val);
              }
            }
            if (TQStringUtils::equal(op,"=") && (replace || !folder->hasTagInteger(tag) ) ) {folder->setTag(tag,param.getTagIntegerDefault("value",0)); continue;}
            if (TQStringUtils::equal(op,"+")) {folder->setTag(tag,folder->getTagIntegerDefault(tag,0) + param.getTagIntegerDefault("value",0)); continue;}
            if (TQStringUtils::equal(op,"-")) {folder->setTag(tag,inverted ? param.getTagIntegerDefault("value",0) - folder->getTagIntegerDefault(tag,0) : folder->getTagIntegerDefault(tag,0) - param.getTagIntegerDefault("value",0)); continue;}
            if (TQStringUtils::equal(op,"*")) {folder->setTag(tag,folder->getTagIntegerDefault(tag,0) * param.getTagIntegerDefault("value",0)); continue;}
            if (TQStringUtils::equal(op,"/")) {
              WARNclass("Performing interger division, results may be unexpected!");
              folder->setTag(tag,inverted ? param.getTagIntegerDefault("value",0) / folder->getTagIntegerDefault(tag,0) : folder->getTagIntegerDefault(tag,0) / param.getTagIntegerDefault("value",0)); //division by zero should be caught at an earlier stage.
              continue;
              }
            if (TQStringUtils::equal(op,"^")) { folder->setTag(tag,inverted ? pow( param.getTagIntegerDefault("value",0) , folder->getTagIntegerDefault(tag,0) ) : pow( folder->getTagIntegerDefault(tag,0) , param.getTagIntegerDefault("value",0) ) ); continue; }
          }else if (isBool) {
            if (!folder->hasTagBool(tag) && !(create||force) ) {
              if (!skipSilent)
                WARNclass("In folder '%s', skipping modification of tag '%s' with operator '%s' and value '%s' due to type mismatch. Use force=true to modify anyways!",folder->getPath().Data(),tag.Data(),op.Data(), param.getTagBoolDefault("value",false) ? "true":"false" );
              //don't create a new tag
              continue;
            }
            if (folder->hasTag(tag) && !folder->hasTagBool(tag)) {
              if (!force) {
                WARNclass("Tag '%s' at '%s' is already present but of different type!", tag.Data(), folder->getPath().Data());
                continue;
              } else {
                if (!silent) WARNclass("Replacing existing tag '%s' of different type at '%s'!", tag.Data(), folder->getPath().Data());
                bool val;
                if (!folder->getTagBool(tag,val)) {WARNclass("Failed to convert existing tag to boolean type!"); continue;}
                folder->removeTag(tag);
                folder->setTagBool(tag,val);
              }
            }
            if (TQStringUtils::equal(op,"=") && (replace || !folder->hasTagBool(tag) ) ) {folder->setTag(tag,param.getTagBoolDefault("value",false)); continue;}
            if (TQStringUtils::equal(op,"==")) {folder->setTag(tag,folder->getTagBoolDefault(tag,false) == param.getTagBoolDefault("value",false)); continue;}
            if (TQStringUtils::equal(op,"!=")) {folder->setTag(tag,folder->getTagBoolDefault(tag,false) != param.getTagBoolDefault("value",false)); continue;}
            if (TQStringUtils::equal(op,"&&")) {folder->setTag(tag,folder->getTagBoolDefault(tag,false) && param.getTagBoolDefault("value",false)); continue;}
            if (TQStringUtils::equal(op,"||")) {folder->setTag(tag,folder->getTagBoolDefault(tag,false) || param.getTagBoolDefault("value",false)); continue;}
          }

        }
        delete targetList;

      } else if (isCmdReplace) {
        TString raw = strParameter;
        TString pathFilter, tagFilter, typeFilter;
        TQTaggable param;
        TQStringUtils::removeLeadingBlanks(raw);
        if (TQStringUtils::findFree(raw,"=","()[]{}\"\"''") < TQStringUtils::findFree(raw,",","()[]{}\"\"''") ) {
        //default path and tag filter
          pathFilter = "*";
          tagFilter = "*";
          typeFilter = "all";
        } else {
        //Full command treatment (non-default folder/tag filter)
          if (TQStringUtils::readBlock(raw,tagFilter,"\"\"''") > 0 ) {
            TQStringUtils::removeLeadingBlanks(raw);
          } else {
            TQStringUtils::readUpTo(raw,tagFilter,",");
          }
          if (TQStringUtils::removeLeading(raw,",") < 1) {
            errMsg = TString::Format("Failed to parse line $replace(%s), should be $replace(\"(typeFilter)folderFilter:tagFilter\",tag1=\"value1\",tag2=\"value2\",...)",strParameter.Data());
            return false;
          }
          if (TQStringUtils::readBlock(tagFilter,typeFilter,"()") == 0) typeFilter = "all";
          TQStringUtils::readUpTo(tagFilter,pathFilter,":");
          TQStringUtils::removeLeading(tagFilter,":",1);
          TQStringUtils::removeLeadingBlanks(typeFilter);
          TQStringUtils::removeTrailingBlanks(typeFilter);
          TQStringUtils::removeTrailingBlanks(pathFilter);
        }
        TString replaced(this->replaceInText(raw));
        if(replaced.Contains("$")){
          WARNclass("replacement '%s' in '%s' contains unresolved variables, please double-check!",replaced.Data(),this->getPath().Data());
        } else if(replaced.Contains("(")){
          WARNclass("replacement '%s' in '%s' brackets, please double-check!",replaced.Data(),this->getPath().Data());
        }        
        param.importTags(replaced);
        TClass* cFilter;
        if (TQStringUtils::equal(typeFilter,"sf") || TQStringUtils::equal(typeFilter,"samplefolder") ) cFilter = TQSampleFolder::Class();
        else if (TQStringUtils::equal(typeFilter,"s") || TQStringUtils::equal(typeFilter,"sample") ) cFilter = TQSample::Class();
        else cFilter = TQFolder::Class();
        this->replaceInFolderTags(param,pathFilter,tagFilter,cFilter);
        /*
        TList* targetList = this->getListOfFolders(pathFilter,cFilter);
        if (!targetList) {
          errMsg = TString::Format("No matching folders found for pattern '%s'",pathFilter.Data());
          return false;
        }

        TQFolderIterator itr(targetList);
        while (itr.hasNext()) {
          TQFolder* folder = itr.readNext();
          if (!folder) continue;
          TList* lTags = folder->getListOfKeys(tagFilter);
          if (!lTags) continue;
          TIterator* itr = lTags->MakeIterator();
          TObjString* ostr;
          while ((ostr = (dynamic_cast<TObjString*>(itr->Next())))) {
            if (!ostr) continue;
            if (!folder->tagIsOfTypeString(ostr->GetString())) continue;
            folder->setTagString(ostr->GetString(), param.replaceInText(folder->getTagStringDefault(ostr->GetString(),"")));
          }
          delete lTags;
          delete itr;
        }
        delete targetList;
        */
      } else if (isCmdCreate) {
        // read object
        TQTaggable param;
        param.importTags(strParameter);
        TString path;
        //@tag: [path,type] These text argument tags are use with the command $create. The value of "path" determines the elements created. All missing elements in the given path are created as instances of the class specified via the "type" tag: if it is set to "s" or "sample", instances of TQSample are created, if the value of "type" is "sf" or "samplefolder", instances of TQSampleFolder are created. If no (or any invalid) value for "type" is given, instances of TQFolder are created.
        if (param.getNTags() < 1 || !param.getTagString("path", path)) {
          // ==> error copying: stop
          errMsg = "Wrong number of arguments to command 'create'";
          return false;
        } else {
          TString type;
          param.getTagString("type",type);
          type = TQStringUtils::makeLowercase(type);
          TQStringUtils::removeLeadingBlanks(path);
          bool useRoot = TQStringUtils::removeLeading(path,"/") > 0;
          std::vector<TString> vPath = TQStringUtils::split(path,"/");
          std::vector<TQFolder*> currentFolders;
          currentFolders.push_back(useRoot ? this->getRoot() : this);
          for (uint i=0; i<vPath.size(); ++i) {
            if (vPath.at(i).Length() < 1) continue;
            std::vector<TQFolder*> newFolders;
            for(auto currentFolder:currentFolders){
              TQFolderIterator folders(currentFolder->getListOfFolders(vPath.at(i)),true);
              TQFolder* tmpFolder = NULL;
              while(folders.hasNext()){
                tmpFolder = folders.readNext();
                newFolders.push_back(tmpFolder);
              }
              if(!tmpFolder){
                if (TQStringUtils::equal(type,"s") || TQStringUtils::equal(type,"sample") ) {
                  tmpFolder = new TQSample(vPath.at(i));

                } else if (TQStringUtils::equal(type,"sf") || TQStringUtils::equal(type,"samplefolder") ) {
                  tmpFolder = new TQSampleFolder(vPath.at(i));
                } else {
                  tmpFolder = new TQFolder(vPath.at(i));
                }
                currentFolder->addFolder(tmpFolder);
                newFolders.push_back(tmpFolder);
              }
            }
            currentFolders = newFolders;
          }
        }
      } else if (isCmdPrint) { //execute print method on current folder
        this->print(TQStringUtils::unquote(strParameter));
      } else if (isCmdPrintLine) { //print argument to console
        INFO( TString::Format("@%s: '%s'" , this->getPath().Data(), this->replaceInText(TQStringUtils::unquote(strParameter)).Data()) );
      } else if (isCmdWrite) {
        TQTaggable param;
        param.importTagWithPrefix(strParameter, "", false, "filename");
        TQFolder* target = NULL;
        TString filename = param.getTagStringDefault("filename","");
        if (filename.Length()==0) {
          errMsg = TString::Format("no file name specified");
          return false;
        }
        if (!TQUtils::ensureDirectoryForFile(filename)) {
          errMsg = TString::Format("Failed to ensure existance of directory for file '%s'",filename.Data());
          return false;
        }
        if (param.hasTagString("target")) {
          target = this->getFolder(param.getTagStringDefault("target",""));
        } else {
          target = this;
        }
        if (!target) {
          errMsg = TString::Format("could not find target folder '%s'", param.getTagStringDefault("target","").Data());
          return false;
        }
        target->exportToTextFile(filename);
      } else {
        // ==> unknown command: stop
        errMsg = TString::Format("Unknown command '%s'", cmd.Data());
        return false;
      }
      DEBUGclass("next token");
    } else if (input.BeginsWith("\"")){
      TQStringUtils::removeLeading(input, "\"");
      TQStringUtils::readUpTo(input,token,"\"");
      TQStringUtils::removeLeading(input, "\"");
      if(!TQStringUtils::removeLeading(input, ";")){
        errMsg = TString::Format("Missing terminating ';' after string '%s'", token.Data());
      }
      TObjString* str = new TObjString(token);
      this->addObject(str);
    } else if (input.BeginsWith("TH")){
      TQStringUtils::readUpTo(input,token,";","()[]{}","\"\"''");
      if(!TQStringUtils::removeLeading(input, ";")){
        errMsg = TString::Format("Missing terminating ';' after histogram '%s'", token.Data());
      }
      TH1* hist = TQHistogramUtils::convertFromText(token);
      this->addObject(hist);
    } else if (!input.IsNull()) {
      // ==> unknown token: stop
      errMsg = TString::Format("Unknown token near '%s'",
                               TQStringUtils::maxLength(input, 30).ReplaceAll("\n", " ").Data());
      return false;
    }
  }

  return true;
}


//__________________________________________________________________________________|___________

TQFolder::~TQFolder() {
  // Deletes this instance of TQFolder and all its objects and sub-folders recursively

  // remove this folder from its base folder
  this->detachFromBase();

  // delete all objects of this folder
  this->deleteAll();

  // take care of the directory
  this->clearDirectoryInternal();
}

//__________________________________________________________________________________|___________

TQFolder* TQFolder::copyDirectoryStructure(const TString& basepath, int maxdepth){
  // return a full TQFolder copy of some actual file system structure
  if(basepath.BeginsWith("root://")){
    DEBUGclass("detected eos head");
    size_t pathpos = basepath.Index("/eos/");
    TString eosprefix = basepath(0,pathpos);
    TString eosurl(eosprefix);
    TQStringUtils::removeTrailing(eosurl,"/");
    TQLibrary::getQLibrary()->setEOSurl(eosurl+".cern.ch");
    TString path = basepath(pathpos,basepath.Length());
    TQFolder* f = TQFolder::copyDirectoryStructureEOS(path,maxdepth);
    if(!f) return NULL;
    f->setTagBool("eos",true);
    f->setTagString("eosprefix",eosprefix);
    f->setTagString("eospath",path);
    f->setTagString("basepath",basepath);
    return f;
  } else {
    DEBUGclass("using local variant");
    TQFolder* f = TQFolder::copyDirectoryStructureLocal(basepath,maxdepth);
    if(!f) return NULL;
    f->setTagBool("eos",false);
    f->setTagString("basepath",basepath);
    return f;
  }
  return NULL;
}

//__________________________________________________________________________________|___________

TQFolder* TQFolder::copyDirectoryStructureLocal(const TString& basepath, int maxdepth){
  // traverse a folder structure of the local physical file system and create a TQFolder-image thereof
  const TString dircmd(TString::Format("find -L %s -maxdepth %d ! -readable -prune -o -type d -print ", basepath.Data(),maxdepth));
  const TString filecmd(TString::Format("find -L %s -maxdepth %d ! -readable -prune -o -type f -print ", basepath.Data(),maxdepth+1));
  DEBUGclass(dircmd);
  TList* dirs = TQUtils::execute(dircmd,4096);
 #ifdef _DEBUG_
  dirs->Print();
 #endif
  DEBUGclass(filecmd);
  TList* files = TQUtils::execute(filecmd,4096);
 #ifdef _DEBUG_
  files->Print();
 #endif
  TString path(basepath);
  TString tmppath(path);
  TQFolder* f = new TQFolder("tmp");
  tmppath = TQFolder::getPathTail(tmppath);
  DEBUGclass("Setting name of base folder to '%s'",tmppath.Data());
  f->SetName(tmppath);
  if(dirs){
    dirs->SetOwner(true);
    TQIterator ditr(dirs);
    while(ditr.hasNext()){
      TObject* obj = ditr.readNext();
      if(!obj) continue;
      TString name = obj->GetName();
      DEBUGclass("path including basepath: '%s'",name.Data());
      TQStringUtils::removeLeadingText(name,basepath);
      if(!TQFolder::isValidPath(name)) {
        DEBUGclass("skipping directory '%s' due to invalid name",name.Data());
        continue;
      }
      f->getFolder(TString::Format("%s+",name.Data()));
    }
    delete dirs;
  }
  if(files){
    files->SetOwner(true);
    TQIterator fitr(files);
    while(fitr.hasNext()){
      TObject* obj = fitr.readNext();
      if(!obj) continue;
      TString path(obj->GetName());
      TQStringUtils::removeLeadingText(path,basepath);
      TString name = TQFolder::getPathTail(path);
      DEBUGfunc("adding file '%s' to '%s'",name.Data(),path.Data());
      if(path.IsNull()){
        f->addObject(new TObjString(name));
      } else {
        TQFolder* newf = f->getFolder(path + "+!");
        if(!newf){
          DEBUGclass("using invalid_name");
          newf = f->getFolder("invalid_name+");
        }
        if(newf){
          DEBUGclass("adding object to '%s'@%x",newf->GetName(),newf);
	  if(!newf->addObject(new TObjString(name))){
	    ERRORclass("cannot add object '%s' to '%s'",name.Data(),newf->getPath().Data());
	  }
	}
	else ERRORfunc("unable to create '%s'",name.Data(),path.Data());
      }
    }
    delete files;
  }
  return f;
}

//__________________________________________________________________________________|___________

TQFolder* TQFolder::copyDirectoryStructureEOS(const TString& basepath, int maxdepth){
  // traverse a folder structure of the some EOS file system and create a TQFolder-image thereof
  DEBUGclass("copying directory structure '%s'",basepath.Data());
  TString path = basepath;
  TString foldername = TQFolder::getPathTail(path);
  TQFolder* f = new TQFolder(foldername);
  f->SetName(foldername);
  if(!f) return NULL;
  TQIterator itr(TQUtils::execute(TQLibrary::getEOScmd()+" ls "+basepath,1024),true);
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    TString name = TQStringUtils::makeASCII(obj->GetName());
    if(name.Contains("/")){
      path = name;
    } else {
      path = TQFolder::concatPaths(basepath,name);
    }
    DEBUGclass("looking at '%s'",path.Data());
    bool isDir = false;
    if(maxdepth > 0){
      TList* l = TQUtils::execute(TQLibrary::getEOScmd()+" stat "+path,1024);
      if(!l){
        ERRORclass("unable to execute '%s stat %s', skipping",TQLibrary::getEOScmd().Data(),path.Data());
        continue;
      }
      TString status(l->Last()->GetName());
      delete l;
      if(status.IsNull()){
        ERRORclass("unable to retrieve status of object '%s', skipping",path.Data());
        continue;
      }
      if(status.Contains("directory") || status.Contains("IsDir")){
	isDir = true;
      }
    }
    if(isDir){
      TQFolder* subf = TQFolder::copyDirectoryStructureEOS(path,maxdepth-1);
      // in this special case, we want to allow otherwise invalid names
      // hence, we exceptionally call the underlying routine instead of addObject
      if(subf){
	f->Add(subf);
	subf->setBase(f);
      }
    } else {
      f->addObject(new TObjString(TQFolder::getPathTail(name)));
    }
  }
  return f;
}

//__________________________________________________________________________________|___________

int TQFolder::writeToFile(const TString& filename, bool overwrite, int depth, bool keepInMemory){
  // write this folder to a file of the given name, splitting at the given depth value
  // the name of the folder will be used as a key
  DEBUGclass("opening file '%s'",filename.Data());
  TFile* f = TFile::Open(filename,overwrite ? "RECREATE" : "UPDATE");
  if(!f) return -1;
  if(!f->IsOpen()){
    delete f;
    return -2;
  }
  DEBUGclass("writing to file");
  bool retval = this->writeFolderHook(f,this->GetName(),depth,keepInMemory);
  DEBUGclass("closing file");
  f->Close();
  return (int)(retval);
}

//__________________________________________________________________________________|___________

void TQFolder::setInfoTags(){
  // deposit a couple of tags with timestamp and meta-information about software versions
  this->setTagString(".creationDate",TQUtils::getTimeStamp());
  this->setTagString(".createdBy",TQLibrary::getApplicationName());
  this->setTagString(".libVersion",TQLibrary::getVersion());
  this->setTagString(".rootVersion",TQLibrary::getROOTVersion());
  this->setTagString(".gccVersion",TQLibrary::getGCCVersion());
}

//__________________________________________________________________________________|___________

TQFolder* TQFolder::findCommonBaseFolder(TCollection* fList, bool allowWildcards){
  // find a common base folder of some list
  TString base = "";
  bool first = true;
  TQFolderIterator itr(fList);
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    const TString tmppath( allowWildcards ? f->getPathWildcarded() : f->getPath());
    if(first){
      base = tmppath;
      first=false;
    } else {
      if(TQStringUtils::reduceToCommonPrefix(base,tmppath) < 1) return NULL;
    }
  }
  DEBUGclass(TString::Format("common base appears to be '%s'",base.Data()));
  if(base.IsNull()) return NULL;
  if(base.EndsWith("/")){
    TQFolder* retval = this->getFolder(base);
    if(retval) return retval;
  }
  this->getPathTail(base);
  return this->getFolder(base);
}

//__________________________________________________________________________________|___________

TList* TQFolder::exportTagsToText(const TString& filter){
  // create a TList with strings for all tags matching the filter in this folder structure
  // the result can be applied to some folder via TQFolder::importFromTextFile
  TList* folders = this->getListOfFolders("*");
  TList* retval = new TList();
  TQFolderIterator itr(folders,true);
  std::map<TString,TString> tagMap;
  while(itr.hasNext()){
    TQFolder* obj = itr.readNext();
    if(!obj) continue;
    TString tags = obj->exportTagsAsString(filter,true);
    if(tags.IsNull()) continue;
    TString path = obj->getPathWildcarded();
    tagMap[path] = tags;
  }
  for(std::map<TString,TString>::iterator it = tagMap.begin(); it != tagMap.end(); ++it){
    TString line = "<" + it->second + "> @ " + it->first + ";";
    TObjString* s = new TObjString(line);
    retval->Add(s);
  }
  return retval;
}

//__________________________________________________________________________________|___________

bool TQFolder::exportTagsToTextFile(const TString& filename, const TString& filter){
  // write to a file the strings for all tags matching the filter in this folder structure
  // the result can be applied to some folder via TQFolder::importFromTextFile
  TList * text = this->exportTagsToText(filter);
  text->Print();
  if (text) {
    text->AddFirst(new TObjString("# -*- mode: tqfolder -*-"));
    bool success = TQStringUtils::writeTextToFile(text, filename);
    delete text;
    return success;
  } else {
    return false;
  }
}

//__________________________________________________________________________________|___________

bool TQFolder::merge(TQFolder* other, bool sumElements){
  // merge another instance of TQFolder into this one. this function will
  // traverse the folder structure recursively and collect all existing
  // subfolders from both instances and merge them into one. in the case of a
  // conflict, it will always use the subfolder with the more recent time stamp
  if(this->Class() == TQFolder::Class()){
    return this->mergeAsFolder(other,sumElements ? MergeMode::SumElements : MergeMode::PreferOther);
  } else {
    ERRORclass("unable to merge '%s' with 'TQFolder'",this->Class()->GetName());
    return false;
  }
}

//__________________________________________________________________________________|___________

bool TQFolder::mergeAsFolder(TQFolder* other, MergeMode mode){
  // simply merge to folders, merging all objects, taggs and subfolders
  this->mergeTags(other);
  // merge folders
  TQFolderIterator itr(other->getListOfFolders("?"));
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    if(!f) continue;
    TQFolder* thisF = this->getFolder(f->GetName());
    if(thisF){
      thisF->mergeAsFolder(f,mode);
    } else {
      f->detachFromBase();
      this->addObject(f);
    }
  }
  // merge objects
  this->mergeObjects(other,mode);
  // return
  return true;
}

//__________________________________________________________________________________|___________

bool TQFolder::mergeTags(TQFolder* other){
  // merge (copy) the tags from another folder to this one
  bool overwrite = this->getGlobalOverwrite();
  this->setGlobalOverwrite(false);
  this->importTags(other);
  if(overwrite) this->setGlobalOverwrite(true);
  return true;
}

//__________________________________________________________________________________|___________

void TQFolder::mergeObjects(TQFolder* other, MergeMode mode){
  // merge (move) the objects from another folder to this one
  TQIterator itr(other->GetListOfFolders());
  
  //create a helper map for faster retrieval of objects in this folder (bringing down the complexity from linear to logarithmic for that part)
  std::map<TString,TObject*> helperMap;
  std::map<TString,TObject*>::iterator helperIt;
  for (TObject*  obj: (*(this->GetListOfFolders())) ) {
    if (!obj) continue;
    //TString is well enough desinged to allow us to use the const char* from GetName() here directly:
    helperMap[obj->GetName()] = obj;
  }
 
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    if(!obj) continue;
    // folders are not handled
    if(obj->InheritsFrom(TQFolder::Class())) continue;
    //TObject* thisObj = this->getObject(obj->GetName());
    TObject* thisObj = nullptr;
    helperIt = helperMap.find(obj->GetName());
    if (helperIt != helperMap.end()) thisObj = helperIt->second; //get the TObject pointer
    
    if(!thisObj) {
      DEBUGclass("grabbing object '%s'",obj->GetName());
      other->Remove(obj);
      this->addObject(obj);
    } else {
      if(mode == PreferThis){
        DEBUGclass("leaving object '%s'",thisObj->GetName());
        // do nothing 
      } else if(mode == PreferOther){
        DEBUGclass("grabbing & replacing object '%s'",thisObj->GetName());
        other->Remove(obj);
        this->Remove(thisObj);
        delete thisObj;
        this->addObject(obj);
      } else if(mode == SumElements){
      if ( obj->InheritsFrom(TH1::Class()) && thisObj->InheritsFrom(TH1::Class()) ) {
        TH1* hist = static_cast<TH1*>(obj);
        TH1* thisHist = static_cast<TH1*>(thisObj);
        if(TQHistogramUtils::checkConsistency(hist,thisHist)){
          DEBUGclass("summing histogram '%s'",thisObj->GetName());
          thisHist->Add(hist);
          continue;
        }
        else{
          WARNclass("The histograms that you're trying to merge are not consistent. Check the binning and the dimensions for example.");
        }
      } else if ( obj->InheritsFrom(THnBase::Class()) && thisObj->InheritsFrom(THnBase::Class()) ) {
        THnBase* ndimHist = static_cast<THnBase*>(obj);
        THnBase* thisndimHist = static_cast<THnBase*>(thisObj);
        if(TQTHnBaseUtils::checkConsistency(ndimHist,thisndimHist)){
          DEBUGclass("summing n-dim histogram '%s'",thisObj->GetName());
          thisndimHist->Add(ndimHist);
          continue;
        }
      } else if ( obj->InheritsFrom(TQCounter::Class()) && thisObj->InheritsFrom(TQCounter::Class()) ) {
        TQCounter* counter = static_cast<TQCounter*>(obj);
        TQCounter* thisCounter = static_cast<TQCounter*>(thisObj);
        if(counter && thisCounter){
          DEBUGclass("summing counter '%s'",thisObj->GetName());
          thisCounter->add(counter);
          continue;
        }
      } else if ( obj->InheritsFrom(TQTable::Class()) && thisObj->InheritsFrom(TQTable::Class()) ) {
        if ( obj->InheritsFrom(TQXSecParser::Class()) || thisObj->InheritsFrom(TQXSecParser::Class()) ) continue; //skip XSPs, this would lead to an incredibly stupid object as you'd typically end up with sample folders with an XSP which is a 10^wayTooMuch fold copy of the one created in makeSampleFile
        TQTable* tbl = static_cast<TQTable*>(obj);
        TQTable* thisTbl = static_cast<TQTable*>(thisObj);
        if(tbl && thisTbl){
          DEBUGclass("appending table '%s'",thisObj->GetName());
          thisTbl->merge(tbl);
          continue;
        }
      } else if ( obj->InheritsFrom(TObjString::Class()) && thisObj->InheritsFrom(TObjString::Class()) ) {
        TObjString* str = static_cast<TObjString*>(obj);
        TObjString* thisStr = static_cast<TObjString*>(thisObj);
        if(str && thisStr){
          if(TQStringUtils::equal(str->String(),thisStr->String())){
            continue;
          } else {
            ERRORclass("cannot merge two TObjStrings with different content!");
            continue;
          }
        }
      }
      ERRORclass("cannot merge objects '%s' of type '%s' and '%s'",obj->GetName(),obj->ClassName(),thisObj->ClassName());
      }
    }
  }
  DEBUGclass("leaving function");
}

//__________________________________________________________________________________|___________

int TQFolder::replaceInFolderTags(TQTaggable& params, const TString& path, const TString& tagFilter, TClass* typeFilter ){
  TList* targetList = this->getListOfFolders(path,typeFilter);
  if (!targetList) {
    WARNclass("No matching folders found for pattern '%s'",path.Data());
    return -1;
  }
  TQFolderIterator itr(targetList);
  while (itr.hasNext()) {
    TQFolder* folder = itr.readNext();
    if (!folder) continue;
    folder->replaceInTags(params,tagFilter);
  }
  delete targetList;
  return 0;
}
 TQFolder.cxx:1
 TQFolder.cxx:2
 TQFolder.cxx:3
 TQFolder.cxx:4
 TQFolder.cxx:5
 TQFolder.cxx:6
 TQFolder.cxx:7
 TQFolder.cxx:8
 TQFolder.cxx:9
 TQFolder.cxx:10
 TQFolder.cxx:11
 TQFolder.cxx:12
 TQFolder.cxx:13
 TQFolder.cxx:14
 TQFolder.cxx:15
 TQFolder.cxx:16
 TQFolder.cxx:17
 TQFolder.cxx:18
 TQFolder.cxx:19
 TQFolder.cxx:20
 TQFolder.cxx:21
 TQFolder.cxx:22
 TQFolder.cxx:23
 TQFolder.cxx:24
 TQFolder.cxx:25
 TQFolder.cxx:26
 TQFolder.cxx:27
 TQFolder.cxx:28
 TQFolder.cxx:29
 TQFolder.cxx:30
 TQFolder.cxx:31
 TQFolder.cxx:32
 TQFolder.cxx:33
 TQFolder.cxx:34
 TQFolder.cxx:35
 TQFolder.cxx:36
 TQFolder.cxx:37
 TQFolder.cxx:38
 TQFolder.cxx:39
 TQFolder.cxx:40
 TQFolder.cxx:41
 TQFolder.cxx:42
 TQFolder.cxx:43
 TQFolder.cxx:44
 TQFolder.cxx:45
 TQFolder.cxx:46
 TQFolder.cxx:47
 TQFolder.cxx:48
 TQFolder.cxx:49
 TQFolder.cxx:50
 TQFolder.cxx:51
 TQFolder.cxx:52
 TQFolder.cxx:53
 TQFolder.cxx:54
 TQFolder.cxx:55
 TQFolder.cxx:56
 TQFolder.cxx:57
 TQFolder.cxx:58
 TQFolder.cxx:59
 TQFolder.cxx:60
 TQFolder.cxx:61
 TQFolder.cxx:62
 TQFolder.cxx:63
 TQFolder.cxx:64
 TQFolder.cxx:65
 TQFolder.cxx:66
 TQFolder.cxx:67
 TQFolder.cxx:68
 TQFolder.cxx:69
 TQFolder.cxx:70
 TQFolder.cxx:71
 TQFolder.cxx:72
 TQFolder.cxx:73
 TQFolder.cxx:74
 TQFolder.cxx:75
 TQFolder.cxx:76
 TQFolder.cxx:77
 TQFolder.cxx:78
 TQFolder.cxx:79
 TQFolder.cxx:80
 TQFolder.cxx:81
 TQFolder.cxx:82
 TQFolder.cxx:83
 TQFolder.cxx:84
 TQFolder.cxx:85
 TQFolder.cxx:86
 TQFolder.cxx:87
 TQFolder.cxx:88
 TQFolder.cxx:89
 TQFolder.cxx:90
 TQFolder.cxx:91
 TQFolder.cxx:92
 TQFolder.cxx:93
 TQFolder.cxx:94
 TQFolder.cxx:95
 TQFolder.cxx:96
 TQFolder.cxx:97
 TQFolder.cxx:98
 TQFolder.cxx:99
 TQFolder.cxx:100
 TQFolder.cxx:101
 TQFolder.cxx:102
 TQFolder.cxx:103
 TQFolder.cxx:104
 TQFolder.cxx:105
 TQFolder.cxx:106
 TQFolder.cxx:107
 TQFolder.cxx:108
 TQFolder.cxx:109
 TQFolder.cxx:110
 TQFolder.cxx:111
 TQFolder.cxx:112
 TQFolder.cxx:113
 TQFolder.cxx:114
 TQFolder.cxx:115
 TQFolder.cxx:116
 TQFolder.cxx:117
 TQFolder.cxx:118
 TQFolder.cxx:119
 TQFolder.cxx:120
 TQFolder.cxx:121
 TQFolder.cxx:122
 TQFolder.cxx:123
 TQFolder.cxx:124
 TQFolder.cxx:125
 TQFolder.cxx:126
 TQFolder.cxx:127
 TQFolder.cxx:128
 TQFolder.cxx:129
 TQFolder.cxx:130
 TQFolder.cxx:131
 TQFolder.cxx:132
 TQFolder.cxx:133
 TQFolder.cxx:134
 TQFolder.cxx:135
 TQFolder.cxx:136
 TQFolder.cxx:137
 TQFolder.cxx:138
 TQFolder.cxx:139
 TQFolder.cxx:140
 TQFolder.cxx:141
 TQFolder.cxx:142
 TQFolder.cxx:143
 TQFolder.cxx:144
 TQFolder.cxx:145
 TQFolder.cxx:146
 TQFolder.cxx:147
 TQFolder.cxx:148
 TQFolder.cxx:149
 TQFolder.cxx:150
 TQFolder.cxx:151
 TQFolder.cxx:152
 TQFolder.cxx:153
 TQFolder.cxx:154
 TQFolder.cxx:155
 TQFolder.cxx:156
 TQFolder.cxx:157
 TQFolder.cxx:158
 TQFolder.cxx:159
 TQFolder.cxx:160
 TQFolder.cxx:161
 TQFolder.cxx:162
 TQFolder.cxx:163
 TQFolder.cxx:164
 TQFolder.cxx:165
 TQFolder.cxx:166
 TQFolder.cxx:167
 TQFolder.cxx:168
 TQFolder.cxx:169
 TQFolder.cxx:170
 TQFolder.cxx:171
 TQFolder.cxx:172
 TQFolder.cxx:173
 TQFolder.cxx:174
 TQFolder.cxx:175
 TQFolder.cxx:176
 TQFolder.cxx:177
 TQFolder.cxx:178
 TQFolder.cxx:179
 TQFolder.cxx:180
 TQFolder.cxx:181
 TQFolder.cxx:182
 TQFolder.cxx:183
 TQFolder.cxx:184
 TQFolder.cxx:185
 TQFolder.cxx:186
 TQFolder.cxx:187
 TQFolder.cxx:188
 TQFolder.cxx:189
 TQFolder.cxx:190
 TQFolder.cxx:191
 TQFolder.cxx:192
 TQFolder.cxx:193
 TQFolder.cxx:194
 TQFolder.cxx:195
 TQFolder.cxx:196
 TQFolder.cxx:197
 TQFolder.cxx:198
 TQFolder.cxx:199
 TQFolder.cxx:200
 TQFolder.cxx:201
 TQFolder.cxx:202
 TQFolder.cxx:203
 TQFolder.cxx:204
 TQFolder.cxx:205
 TQFolder.cxx:206
 TQFolder.cxx:207
 TQFolder.cxx:208
 TQFolder.cxx:209
 TQFolder.cxx:210
 TQFolder.cxx:211
 TQFolder.cxx:212
 TQFolder.cxx:213
 TQFolder.cxx:214
 TQFolder.cxx:215
 TQFolder.cxx:216
 TQFolder.cxx:217
 TQFolder.cxx:218
 TQFolder.cxx:219
 TQFolder.cxx:220
 TQFolder.cxx:221
 TQFolder.cxx:222
 TQFolder.cxx:223
 TQFolder.cxx:224
 TQFolder.cxx:225
 TQFolder.cxx:226
 TQFolder.cxx:227
 TQFolder.cxx:228
 TQFolder.cxx:229
 TQFolder.cxx:230
 TQFolder.cxx:231
 TQFolder.cxx:232
 TQFolder.cxx:233
 TQFolder.cxx:234
 TQFolder.cxx:235
 TQFolder.cxx:236
 TQFolder.cxx:237
 TQFolder.cxx:238
 TQFolder.cxx:239
 TQFolder.cxx:240
 TQFolder.cxx:241
 TQFolder.cxx:242
 TQFolder.cxx:243
 TQFolder.cxx:244
 TQFolder.cxx:245
 TQFolder.cxx:246
 TQFolder.cxx:247
 TQFolder.cxx:248
 TQFolder.cxx:249
 TQFolder.cxx:250
 TQFolder.cxx:251
 TQFolder.cxx:252
 TQFolder.cxx:253
 TQFolder.cxx:254
 TQFolder.cxx:255
 TQFolder.cxx:256
 TQFolder.cxx:257
 TQFolder.cxx:258
 TQFolder.cxx:259
 TQFolder.cxx:260
 TQFolder.cxx:261
 TQFolder.cxx:262
 TQFolder.cxx:263
 TQFolder.cxx:264
 TQFolder.cxx:265
 TQFolder.cxx:266
 TQFolder.cxx:267
 TQFolder.cxx:268
 TQFolder.cxx:269
 TQFolder.cxx:270
 TQFolder.cxx:271
 TQFolder.cxx:272
 TQFolder.cxx:273
 TQFolder.cxx:274
 TQFolder.cxx:275
 TQFolder.cxx:276
 TQFolder.cxx:277
 TQFolder.cxx:278
 TQFolder.cxx:279
 TQFolder.cxx:280
 TQFolder.cxx:281
 TQFolder.cxx:282
 TQFolder.cxx:283
 TQFolder.cxx:284
 TQFolder.cxx:285
 TQFolder.cxx:286
 TQFolder.cxx:287
 TQFolder.cxx:288
 TQFolder.cxx:289
 TQFolder.cxx:290
 TQFolder.cxx:291
 TQFolder.cxx:292
 TQFolder.cxx:293
 TQFolder.cxx:294
 TQFolder.cxx:295
 TQFolder.cxx:296
 TQFolder.cxx:297
 TQFolder.cxx:298
 TQFolder.cxx:299
 TQFolder.cxx:300
 TQFolder.cxx:301
 TQFolder.cxx:302
 TQFolder.cxx:303
 TQFolder.cxx:304
 TQFolder.cxx:305
 TQFolder.cxx:306
 TQFolder.cxx:307
 TQFolder.cxx:308
 TQFolder.cxx:309
 TQFolder.cxx:310
 TQFolder.cxx:311
 TQFolder.cxx:312
 TQFolder.cxx:313
 TQFolder.cxx:314
 TQFolder.cxx:315
 TQFolder.cxx:316
 TQFolder.cxx:317
 TQFolder.cxx:318
 TQFolder.cxx:319
 TQFolder.cxx:320
 TQFolder.cxx:321
 TQFolder.cxx:322
 TQFolder.cxx:323
 TQFolder.cxx:324
 TQFolder.cxx:325
 TQFolder.cxx:326
 TQFolder.cxx:327
 TQFolder.cxx:328
 TQFolder.cxx:329
 TQFolder.cxx:330
 TQFolder.cxx:331
 TQFolder.cxx:332
 TQFolder.cxx:333
 TQFolder.cxx:334
 TQFolder.cxx:335
 TQFolder.cxx:336
 TQFolder.cxx:337
 TQFolder.cxx:338
 TQFolder.cxx:339
 TQFolder.cxx:340
 TQFolder.cxx:341
 TQFolder.cxx:342
 TQFolder.cxx:343
 TQFolder.cxx:344
 TQFolder.cxx:345
 TQFolder.cxx:346
 TQFolder.cxx:347
 TQFolder.cxx:348
 TQFolder.cxx:349
 TQFolder.cxx:350
 TQFolder.cxx:351
 TQFolder.cxx:352
 TQFolder.cxx:353
 TQFolder.cxx:354
 TQFolder.cxx:355
 TQFolder.cxx:356
 TQFolder.cxx:357
 TQFolder.cxx:358
 TQFolder.cxx:359
 TQFolder.cxx:360
 TQFolder.cxx:361
 TQFolder.cxx:362
 TQFolder.cxx:363
 TQFolder.cxx:364
 TQFolder.cxx:365
 TQFolder.cxx:366
 TQFolder.cxx:367
 TQFolder.cxx:368
 TQFolder.cxx:369
 TQFolder.cxx:370
 TQFolder.cxx:371
 TQFolder.cxx:372
 TQFolder.cxx:373
 TQFolder.cxx:374
 TQFolder.cxx:375
 TQFolder.cxx:376
 TQFolder.cxx:377
 TQFolder.cxx:378
 TQFolder.cxx:379
 TQFolder.cxx:380
 TQFolder.cxx:381
 TQFolder.cxx:382
 TQFolder.cxx:383
 TQFolder.cxx:384
 TQFolder.cxx:385
 TQFolder.cxx:386
 TQFolder.cxx:387
 TQFolder.cxx:388
 TQFolder.cxx:389
 TQFolder.cxx:390
 TQFolder.cxx:391
 TQFolder.cxx:392
 TQFolder.cxx:393
 TQFolder.cxx:394
 TQFolder.cxx:395
 TQFolder.cxx:396
 TQFolder.cxx:397
 TQFolder.cxx:398
 TQFolder.cxx:399
 TQFolder.cxx:400
 TQFolder.cxx:401
 TQFolder.cxx:402
 TQFolder.cxx:403
 TQFolder.cxx:404
 TQFolder.cxx:405
 TQFolder.cxx:406
 TQFolder.cxx:407
 TQFolder.cxx:408
 TQFolder.cxx:409
 TQFolder.cxx:410
 TQFolder.cxx:411
 TQFolder.cxx:412
 TQFolder.cxx:413
 TQFolder.cxx:414
 TQFolder.cxx:415
 TQFolder.cxx:416
 TQFolder.cxx:417
 TQFolder.cxx:418
 TQFolder.cxx:419
 TQFolder.cxx:420
 TQFolder.cxx:421
 TQFolder.cxx:422
 TQFolder.cxx:423
 TQFolder.cxx:424
 TQFolder.cxx:425
 TQFolder.cxx:426
 TQFolder.cxx:427
 TQFolder.cxx:428
 TQFolder.cxx:429
 TQFolder.cxx:430
 TQFolder.cxx:431
 TQFolder.cxx:432
 TQFolder.cxx:433
 TQFolder.cxx:434
 TQFolder.cxx:435
 TQFolder.cxx:436
 TQFolder.cxx:437
 TQFolder.cxx:438
 TQFolder.cxx:439
 TQFolder.cxx:440
 TQFolder.cxx:441
 TQFolder.cxx:442
 TQFolder.cxx:443
 TQFolder.cxx:444
 TQFolder.cxx:445
 TQFolder.cxx:446
 TQFolder.cxx:447
 TQFolder.cxx:448
 TQFolder.cxx:449
 TQFolder.cxx:450
 TQFolder.cxx:451
 TQFolder.cxx:452
 TQFolder.cxx:453
 TQFolder.cxx:454
 TQFolder.cxx:455
 TQFolder.cxx:456
 TQFolder.cxx:457
 TQFolder.cxx:458
 TQFolder.cxx:459
 TQFolder.cxx:460
 TQFolder.cxx:461
 TQFolder.cxx:462
 TQFolder.cxx:463
 TQFolder.cxx:464
 TQFolder.cxx:465
 TQFolder.cxx:466
 TQFolder.cxx:467
 TQFolder.cxx:468
 TQFolder.cxx:469
 TQFolder.cxx:470
 TQFolder.cxx:471
 TQFolder.cxx:472
 TQFolder.cxx:473
 TQFolder.cxx:474
 TQFolder.cxx:475
 TQFolder.cxx:476
 TQFolder.cxx:477
 TQFolder.cxx:478
 TQFolder.cxx:479
 TQFolder.cxx:480
 TQFolder.cxx:481
 TQFolder.cxx:482
 TQFolder.cxx:483
 TQFolder.cxx:484
 TQFolder.cxx:485
 TQFolder.cxx:486
 TQFolder.cxx:487
 TQFolder.cxx:488
 TQFolder.cxx:489
 TQFolder.cxx:490
 TQFolder.cxx:491
 TQFolder.cxx:492
 TQFolder.cxx:493
 TQFolder.cxx:494
 TQFolder.cxx:495
 TQFolder.cxx:496
 TQFolder.cxx:497
 TQFolder.cxx:498
 TQFolder.cxx:499
 TQFolder.cxx:500
 TQFolder.cxx:501
 TQFolder.cxx:502
 TQFolder.cxx:503
 TQFolder.cxx:504
 TQFolder.cxx:505
 TQFolder.cxx:506
 TQFolder.cxx:507
 TQFolder.cxx:508
 TQFolder.cxx:509
 TQFolder.cxx:510
 TQFolder.cxx:511
 TQFolder.cxx:512
 TQFolder.cxx:513
 TQFolder.cxx:514
 TQFolder.cxx:515
 TQFolder.cxx:516
 TQFolder.cxx:517
 TQFolder.cxx:518
 TQFolder.cxx:519
 TQFolder.cxx:520
 TQFolder.cxx:521
 TQFolder.cxx:522
 TQFolder.cxx:523
 TQFolder.cxx:524
 TQFolder.cxx:525
 TQFolder.cxx:526
 TQFolder.cxx:527
 TQFolder.cxx:528
 TQFolder.cxx:529
 TQFolder.cxx:530
 TQFolder.cxx:531
 TQFolder.cxx:532
 TQFolder.cxx:533
 TQFolder.cxx:534
 TQFolder.cxx:535
 TQFolder.cxx:536
 TQFolder.cxx:537
 TQFolder.cxx:538
 TQFolder.cxx:539
 TQFolder.cxx:540
 TQFolder.cxx:541
 TQFolder.cxx:542
 TQFolder.cxx:543
 TQFolder.cxx:544
 TQFolder.cxx:545
 TQFolder.cxx:546
 TQFolder.cxx:547
 TQFolder.cxx:548
 TQFolder.cxx:549
 TQFolder.cxx:550
 TQFolder.cxx:551
 TQFolder.cxx:552
 TQFolder.cxx:553
 TQFolder.cxx:554
 TQFolder.cxx:555
 TQFolder.cxx:556
 TQFolder.cxx:557
 TQFolder.cxx:558
 TQFolder.cxx:559
 TQFolder.cxx:560
 TQFolder.cxx:561
 TQFolder.cxx:562
 TQFolder.cxx:563
 TQFolder.cxx:564
 TQFolder.cxx:565
 TQFolder.cxx:566
 TQFolder.cxx:567
 TQFolder.cxx:568
 TQFolder.cxx:569
 TQFolder.cxx:570
 TQFolder.cxx:571
 TQFolder.cxx:572
 TQFolder.cxx:573
 TQFolder.cxx:574
 TQFolder.cxx:575
 TQFolder.cxx:576
 TQFolder.cxx:577
 TQFolder.cxx:578
 TQFolder.cxx:579
 TQFolder.cxx:580
 TQFolder.cxx:581
 TQFolder.cxx:582
 TQFolder.cxx:583
 TQFolder.cxx:584
 TQFolder.cxx:585
 TQFolder.cxx:586
 TQFolder.cxx:587
 TQFolder.cxx:588
 TQFolder.cxx:589
 TQFolder.cxx:590
 TQFolder.cxx:591
 TQFolder.cxx:592
 TQFolder.cxx:593
 TQFolder.cxx:594
 TQFolder.cxx:595
 TQFolder.cxx:596
 TQFolder.cxx:597
 TQFolder.cxx:598
 TQFolder.cxx:599
 TQFolder.cxx:600
 TQFolder.cxx:601
 TQFolder.cxx:602
 TQFolder.cxx:603
 TQFolder.cxx:604
 TQFolder.cxx:605
 TQFolder.cxx:606
 TQFolder.cxx:607
 TQFolder.cxx:608
 TQFolder.cxx:609
 TQFolder.cxx:610
 TQFolder.cxx:611
 TQFolder.cxx:612
 TQFolder.cxx:613
 TQFolder.cxx:614
 TQFolder.cxx:615
 TQFolder.cxx:616
 TQFolder.cxx:617
 TQFolder.cxx:618
 TQFolder.cxx:619
 TQFolder.cxx:620
 TQFolder.cxx:621
 TQFolder.cxx:622
 TQFolder.cxx:623
 TQFolder.cxx:624
 TQFolder.cxx:625
 TQFolder.cxx:626
 TQFolder.cxx:627
 TQFolder.cxx:628
 TQFolder.cxx:629
 TQFolder.cxx:630
 TQFolder.cxx:631
 TQFolder.cxx:632
 TQFolder.cxx:633
 TQFolder.cxx:634
 TQFolder.cxx:635
 TQFolder.cxx:636
 TQFolder.cxx:637
 TQFolder.cxx:638
 TQFolder.cxx:639
 TQFolder.cxx:640
 TQFolder.cxx:641
 TQFolder.cxx:642
 TQFolder.cxx:643
 TQFolder.cxx:644
 TQFolder.cxx:645
 TQFolder.cxx:646
 TQFolder.cxx:647
 TQFolder.cxx:648
 TQFolder.cxx:649
 TQFolder.cxx:650
 TQFolder.cxx:651
 TQFolder.cxx:652
 TQFolder.cxx:653
 TQFolder.cxx:654
 TQFolder.cxx:655
 TQFolder.cxx:656
 TQFolder.cxx:657
 TQFolder.cxx:658
 TQFolder.cxx:659
 TQFolder.cxx:660
 TQFolder.cxx:661
 TQFolder.cxx:662
 TQFolder.cxx:663
 TQFolder.cxx:664
 TQFolder.cxx:665
 TQFolder.cxx:666
 TQFolder.cxx:667
 TQFolder.cxx:668
 TQFolder.cxx:669
 TQFolder.cxx:670
 TQFolder.cxx:671
 TQFolder.cxx:672
 TQFolder.cxx:673
 TQFolder.cxx:674
 TQFolder.cxx:675
 TQFolder.cxx:676
 TQFolder.cxx:677
 TQFolder.cxx:678
 TQFolder.cxx:679
 TQFolder.cxx:680
 TQFolder.cxx:681
 TQFolder.cxx:682
 TQFolder.cxx:683
 TQFolder.cxx:684
 TQFolder.cxx:685
 TQFolder.cxx:686
 TQFolder.cxx:687
 TQFolder.cxx:688
 TQFolder.cxx:689
 TQFolder.cxx:690
 TQFolder.cxx:691
 TQFolder.cxx:692
 TQFolder.cxx:693
 TQFolder.cxx:694
 TQFolder.cxx:695
 TQFolder.cxx:696
 TQFolder.cxx:697
 TQFolder.cxx:698
 TQFolder.cxx:699
 TQFolder.cxx:700
 TQFolder.cxx:701
 TQFolder.cxx:702
 TQFolder.cxx:703
 TQFolder.cxx:704
 TQFolder.cxx:705
 TQFolder.cxx:706
 TQFolder.cxx:707
 TQFolder.cxx:708
 TQFolder.cxx:709
 TQFolder.cxx:710
 TQFolder.cxx:711
 TQFolder.cxx:712
 TQFolder.cxx:713
 TQFolder.cxx:714
 TQFolder.cxx:715
 TQFolder.cxx:716
 TQFolder.cxx:717
 TQFolder.cxx:718
 TQFolder.cxx:719
 TQFolder.cxx:720
 TQFolder.cxx:721
 TQFolder.cxx:722
 TQFolder.cxx:723
 TQFolder.cxx:724
 TQFolder.cxx:725
 TQFolder.cxx:726
 TQFolder.cxx:727
 TQFolder.cxx:728
 TQFolder.cxx:729
 TQFolder.cxx:730
 TQFolder.cxx:731
 TQFolder.cxx:732
 TQFolder.cxx:733
 TQFolder.cxx:734
 TQFolder.cxx:735
 TQFolder.cxx:736
 TQFolder.cxx:737
 TQFolder.cxx:738
 TQFolder.cxx:739
 TQFolder.cxx:740
 TQFolder.cxx:741
 TQFolder.cxx:742
 TQFolder.cxx:743
 TQFolder.cxx:744
 TQFolder.cxx:745
 TQFolder.cxx:746
 TQFolder.cxx:747
 TQFolder.cxx:748
 TQFolder.cxx:749
 TQFolder.cxx:750
 TQFolder.cxx:751
 TQFolder.cxx:752
 TQFolder.cxx:753
 TQFolder.cxx:754
 TQFolder.cxx:755
 TQFolder.cxx:756
 TQFolder.cxx:757
 TQFolder.cxx:758
 TQFolder.cxx:759
 TQFolder.cxx:760
 TQFolder.cxx:761
 TQFolder.cxx:762
 TQFolder.cxx:763
 TQFolder.cxx:764
 TQFolder.cxx:765
 TQFolder.cxx:766
 TQFolder.cxx:767
 TQFolder.cxx:768
 TQFolder.cxx:769
 TQFolder.cxx:770
 TQFolder.cxx:771
 TQFolder.cxx:772
 TQFolder.cxx:773
 TQFolder.cxx:774
 TQFolder.cxx:775
 TQFolder.cxx:776
 TQFolder.cxx:777
 TQFolder.cxx:778
 TQFolder.cxx:779
 TQFolder.cxx:780
 TQFolder.cxx:781
 TQFolder.cxx:782
 TQFolder.cxx:783
 TQFolder.cxx:784
 TQFolder.cxx:785
 TQFolder.cxx:786
 TQFolder.cxx:787
 TQFolder.cxx:788
 TQFolder.cxx:789
 TQFolder.cxx:790
 TQFolder.cxx:791
 TQFolder.cxx:792
 TQFolder.cxx:793
 TQFolder.cxx:794
 TQFolder.cxx:795
 TQFolder.cxx:796
 TQFolder.cxx:797
 TQFolder.cxx:798
 TQFolder.cxx:799
 TQFolder.cxx:800
 TQFolder.cxx:801
 TQFolder.cxx:802
 TQFolder.cxx:803
 TQFolder.cxx:804
 TQFolder.cxx:805
 TQFolder.cxx:806
 TQFolder.cxx:807
 TQFolder.cxx:808
 TQFolder.cxx:809
 TQFolder.cxx:810
 TQFolder.cxx:811
 TQFolder.cxx:812
 TQFolder.cxx:813
 TQFolder.cxx:814
 TQFolder.cxx:815
 TQFolder.cxx:816
 TQFolder.cxx:817
 TQFolder.cxx:818
 TQFolder.cxx:819
 TQFolder.cxx:820
 TQFolder.cxx:821
 TQFolder.cxx:822
 TQFolder.cxx:823
 TQFolder.cxx:824
 TQFolder.cxx:825
 TQFolder.cxx:826
 TQFolder.cxx:827
 TQFolder.cxx:828
 TQFolder.cxx:829
 TQFolder.cxx:830
 TQFolder.cxx:831
 TQFolder.cxx:832
 TQFolder.cxx:833
 TQFolder.cxx:834
 TQFolder.cxx:835
 TQFolder.cxx:836
 TQFolder.cxx:837
 TQFolder.cxx:838
 TQFolder.cxx:839
 TQFolder.cxx:840
 TQFolder.cxx:841
 TQFolder.cxx:842
 TQFolder.cxx:843
 TQFolder.cxx:844
 TQFolder.cxx:845
 TQFolder.cxx:846
 TQFolder.cxx:847
 TQFolder.cxx:848
 TQFolder.cxx:849
 TQFolder.cxx:850
 TQFolder.cxx:851
 TQFolder.cxx:852
 TQFolder.cxx:853
 TQFolder.cxx:854
 TQFolder.cxx:855
 TQFolder.cxx:856
 TQFolder.cxx:857
 TQFolder.cxx:858
 TQFolder.cxx:859
 TQFolder.cxx:860
 TQFolder.cxx:861
 TQFolder.cxx:862
 TQFolder.cxx:863
 TQFolder.cxx:864
 TQFolder.cxx:865
 TQFolder.cxx:866
 TQFolder.cxx:867
 TQFolder.cxx:868
 TQFolder.cxx:869
 TQFolder.cxx:870
 TQFolder.cxx:871
 TQFolder.cxx:872
 TQFolder.cxx:873
 TQFolder.cxx:874
 TQFolder.cxx:875
 TQFolder.cxx:876
 TQFolder.cxx:877
 TQFolder.cxx:878
 TQFolder.cxx:879
 TQFolder.cxx:880
 TQFolder.cxx:881
 TQFolder.cxx:882
 TQFolder.cxx:883
 TQFolder.cxx:884
 TQFolder.cxx:885
 TQFolder.cxx:886
 TQFolder.cxx:887
 TQFolder.cxx:888
 TQFolder.cxx:889
 TQFolder.cxx:890
 TQFolder.cxx:891
 TQFolder.cxx:892
 TQFolder.cxx:893
 TQFolder.cxx:894
 TQFolder.cxx:895
 TQFolder.cxx:896
 TQFolder.cxx:897
 TQFolder.cxx:898
 TQFolder.cxx:899
 TQFolder.cxx:900
 TQFolder.cxx:901
 TQFolder.cxx:902
 TQFolder.cxx:903
 TQFolder.cxx:904
 TQFolder.cxx:905
 TQFolder.cxx:906
 TQFolder.cxx:907
 TQFolder.cxx:908
 TQFolder.cxx:909
 TQFolder.cxx:910
 TQFolder.cxx:911
 TQFolder.cxx:912
 TQFolder.cxx:913
 TQFolder.cxx:914
 TQFolder.cxx:915
 TQFolder.cxx:916
 TQFolder.cxx:917
 TQFolder.cxx:918
 TQFolder.cxx:919
 TQFolder.cxx:920
 TQFolder.cxx:921
 TQFolder.cxx:922
 TQFolder.cxx:923
 TQFolder.cxx:924
 TQFolder.cxx:925
 TQFolder.cxx:926
 TQFolder.cxx:927
 TQFolder.cxx:928
 TQFolder.cxx:929
 TQFolder.cxx:930
 TQFolder.cxx:931
 TQFolder.cxx:932
 TQFolder.cxx:933
 TQFolder.cxx:934
 TQFolder.cxx:935
 TQFolder.cxx:936
 TQFolder.cxx:937
 TQFolder.cxx:938
 TQFolder.cxx:939
 TQFolder.cxx:940
 TQFolder.cxx:941
 TQFolder.cxx:942
 TQFolder.cxx:943
 TQFolder.cxx:944
 TQFolder.cxx:945
 TQFolder.cxx:946
 TQFolder.cxx:947
 TQFolder.cxx:948
 TQFolder.cxx:949
 TQFolder.cxx:950
 TQFolder.cxx:951
 TQFolder.cxx:952
 TQFolder.cxx:953
 TQFolder.cxx:954
 TQFolder.cxx:955
 TQFolder.cxx:956
 TQFolder.cxx:957
 TQFolder.cxx:958
 TQFolder.cxx:959
 TQFolder.cxx:960
 TQFolder.cxx:961
 TQFolder.cxx:962
 TQFolder.cxx:963
 TQFolder.cxx:964
 TQFolder.cxx:965
 TQFolder.cxx:966
 TQFolder.cxx:967
 TQFolder.cxx:968
 TQFolder.cxx:969
 TQFolder.cxx:970
 TQFolder.cxx:971
 TQFolder.cxx:972
 TQFolder.cxx:973
 TQFolder.cxx:974
 TQFolder.cxx:975
 TQFolder.cxx:976
 TQFolder.cxx:977
 TQFolder.cxx:978
 TQFolder.cxx:979
 TQFolder.cxx:980
 TQFolder.cxx:981
 TQFolder.cxx:982
 TQFolder.cxx:983
 TQFolder.cxx:984
 TQFolder.cxx:985
 TQFolder.cxx:986
 TQFolder.cxx:987
 TQFolder.cxx:988
 TQFolder.cxx:989
 TQFolder.cxx:990
 TQFolder.cxx:991
 TQFolder.cxx:992
 TQFolder.cxx:993
 TQFolder.cxx:994
 TQFolder.cxx:995
 TQFolder.cxx:996
 TQFolder.cxx:997
 TQFolder.cxx:998
 TQFolder.cxx:999
 TQFolder.cxx:1000
 TQFolder.cxx:1001
 TQFolder.cxx:1002
 TQFolder.cxx:1003
 TQFolder.cxx:1004
 TQFolder.cxx:1005
 TQFolder.cxx:1006
 TQFolder.cxx:1007
 TQFolder.cxx:1008
 TQFolder.cxx:1009
 TQFolder.cxx:1010
 TQFolder.cxx:1011
 TQFolder.cxx:1012
 TQFolder.cxx:1013
 TQFolder.cxx:1014
 TQFolder.cxx:1015
 TQFolder.cxx:1016
 TQFolder.cxx:1017
 TQFolder.cxx:1018
 TQFolder.cxx:1019
 TQFolder.cxx:1020
 TQFolder.cxx:1021
 TQFolder.cxx:1022
 TQFolder.cxx:1023
 TQFolder.cxx:1024
 TQFolder.cxx:1025
 TQFolder.cxx:1026
 TQFolder.cxx:1027
 TQFolder.cxx:1028
 TQFolder.cxx:1029
 TQFolder.cxx:1030
 TQFolder.cxx:1031
 TQFolder.cxx:1032
 TQFolder.cxx:1033
 TQFolder.cxx:1034
 TQFolder.cxx:1035
 TQFolder.cxx:1036
 TQFolder.cxx:1037
 TQFolder.cxx:1038
 TQFolder.cxx:1039
 TQFolder.cxx:1040
 TQFolder.cxx:1041
 TQFolder.cxx:1042
 TQFolder.cxx:1043
 TQFolder.cxx:1044
 TQFolder.cxx:1045
 TQFolder.cxx:1046
 TQFolder.cxx:1047
 TQFolder.cxx:1048
 TQFolder.cxx:1049
 TQFolder.cxx:1050
 TQFolder.cxx:1051
 TQFolder.cxx:1052
 TQFolder.cxx:1053
 TQFolder.cxx:1054
 TQFolder.cxx:1055
 TQFolder.cxx:1056
 TQFolder.cxx:1057
 TQFolder.cxx:1058
 TQFolder.cxx:1059
 TQFolder.cxx:1060
 TQFolder.cxx:1061
 TQFolder.cxx:1062
 TQFolder.cxx:1063
 TQFolder.cxx:1064
 TQFolder.cxx:1065
 TQFolder.cxx:1066
 TQFolder.cxx:1067
 TQFolder.cxx:1068
 TQFolder.cxx:1069
 TQFolder.cxx:1070
 TQFolder.cxx:1071
 TQFolder.cxx:1072
 TQFolder.cxx:1073
 TQFolder.cxx:1074
 TQFolder.cxx:1075
 TQFolder.cxx:1076
 TQFolder.cxx:1077
 TQFolder.cxx:1078
 TQFolder.cxx:1079
 TQFolder.cxx:1080
 TQFolder.cxx:1081
 TQFolder.cxx:1082
 TQFolder.cxx:1083
 TQFolder.cxx:1084
 TQFolder.cxx:1085
 TQFolder.cxx:1086
 TQFolder.cxx:1087
 TQFolder.cxx:1088
 TQFolder.cxx:1089
 TQFolder.cxx:1090
 TQFolder.cxx:1091
 TQFolder.cxx:1092
 TQFolder.cxx:1093
 TQFolder.cxx:1094
 TQFolder.cxx:1095
 TQFolder.cxx:1096
 TQFolder.cxx:1097
 TQFolder.cxx:1098
 TQFolder.cxx:1099
 TQFolder.cxx:1100
 TQFolder.cxx:1101
 TQFolder.cxx:1102
 TQFolder.cxx:1103
 TQFolder.cxx:1104
 TQFolder.cxx:1105
 TQFolder.cxx:1106
 TQFolder.cxx:1107
 TQFolder.cxx:1108
 TQFolder.cxx:1109
 TQFolder.cxx:1110
 TQFolder.cxx:1111
 TQFolder.cxx:1112
 TQFolder.cxx:1113
 TQFolder.cxx:1114
 TQFolder.cxx:1115
 TQFolder.cxx:1116
 TQFolder.cxx:1117
 TQFolder.cxx:1118
 TQFolder.cxx:1119
 TQFolder.cxx:1120
 TQFolder.cxx:1121
 TQFolder.cxx:1122
 TQFolder.cxx:1123
 TQFolder.cxx:1124
 TQFolder.cxx:1125
 TQFolder.cxx:1126
 TQFolder.cxx:1127
 TQFolder.cxx:1128
 TQFolder.cxx:1129
 TQFolder.cxx:1130
 TQFolder.cxx:1131
 TQFolder.cxx:1132
 TQFolder.cxx:1133
 TQFolder.cxx:1134
 TQFolder.cxx:1135
 TQFolder.cxx:1136
 TQFolder.cxx:1137
 TQFolder.cxx:1138
 TQFolder.cxx:1139
 TQFolder.cxx:1140
 TQFolder.cxx:1141
 TQFolder.cxx:1142
 TQFolder.cxx:1143
 TQFolder.cxx:1144
 TQFolder.cxx:1145
 TQFolder.cxx:1146
 TQFolder.cxx:1147
 TQFolder.cxx:1148
 TQFolder.cxx:1149
 TQFolder.cxx:1150
 TQFolder.cxx:1151
 TQFolder.cxx:1152
 TQFolder.cxx:1153
 TQFolder.cxx:1154
 TQFolder.cxx:1155
 TQFolder.cxx:1156
 TQFolder.cxx:1157
 TQFolder.cxx:1158
 TQFolder.cxx:1159
 TQFolder.cxx:1160
 TQFolder.cxx:1161
 TQFolder.cxx:1162
 TQFolder.cxx:1163
 TQFolder.cxx:1164
 TQFolder.cxx:1165
 TQFolder.cxx:1166
 TQFolder.cxx:1167
 TQFolder.cxx:1168
 TQFolder.cxx:1169
 TQFolder.cxx:1170
 TQFolder.cxx:1171
 TQFolder.cxx:1172
 TQFolder.cxx:1173
 TQFolder.cxx:1174
 TQFolder.cxx:1175
 TQFolder.cxx:1176
 TQFolder.cxx:1177
 TQFolder.cxx:1178
 TQFolder.cxx:1179
 TQFolder.cxx:1180
 TQFolder.cxx:1181
 TQFolder.cxx:1182
 TQFolder.cxx:1183
 TQFolder.cxx:1184
 TQFolder.cxx:1185
 TQFolder.cxx:1186
 TQFolder.cxx:1187
 TQFolder.cxx:1188
 TQFolder.cxx:1189
 TQFolder.cxx:1190
 TQFolder.cxx:1191
 TQFolder.cxx:1192
 TQFolder.cxx:1193
 TQFolder.cxx:1194
 TQFolder.cxx:1195
 TQFolder.cxx:1196
 TQFolder.cxx:1197
 TQFolder.cxx:1198
 TQFolder.cxx:1199
 TQFolder.cxx:1200
 TQFolder.cxx:1201
 TQFolder.cxx:1202
 TQFolder.cxx:1203
 TQFolder.cxx:1204
 TQFolder.cxx:1205
 TQFolder.cxx:1206
 TQFolder.cxx:1207
 TQFolder.cxx:1208
 TQFolder.cxx:1209
 TQFolder.cxx:1210
 TQFolder.cxx:1211
 TQFolder.cxx:1212
 TQFolder.cxx:1213
 TQFolder.cxx:1214
 TQFolder.cxx:1215
 TQFolder.cxx:1216
 TQFolder.cxx:1217
 TQFolder.cxx:1218
 TQFolder.cxx:1219
 TQFolder.cxx:1220
 TQFolder.cxx:1221
 TQFolder.cxx:1222
 TQFolder.cxx:1223
 TQFolder.cxx:1224
 TQFolder.cxx:1225
 TQFolder.cxx:1226
 TQFolder.cxx:1227
 TQFolder.cxx:1228
 TQFolder.cxx:1229
 TQFolder.cxx:1230
 TQFolder.cxx:1231
 TQFolder.cxx:1232
 TQFolder.cxx:1233
 TQFolder.cxx:1234
 TQFolder.cxx:1235
 TQFolder.cxx:1236
 TQFolder.cxx:1237
 TQFolder.cxx:1238
 TQFolder.cxx:1239
 TQFolder.cxx:1240
 TQFolder.cxx:1241
 TQFolder.cxx:1242
 TQFolder.cxx:1243
 TQFolder.cxx:1244
 TQFolder.cxx:1245
 TQFolder.cxx:1246
 TQFolder.cxx:1247
 TQFolder.cxx:1248
 TQFolder.cxx:1249
 TQFolder.cxx:1250
 TQFolder.cxx:1251
 TQFolder.cxx:1252
 TQFolder.cxx:1253
 TQFolder.cxx:1254
 TQFolder.cxx:1255
 TQFolder.cxx:1256
 TQFolder.cxx:1257
 TQFolder.cxx:1258
 TQFolder.cxx:1259
 TQFolder.cxx:1260
 TQFolder.cxx:1261
 TQFolder.cxx:1262
 TQFolder.cxx:1263
 TQFolder.cxx:1264
 TQFolder.cxx:1265
 TQFolder.cxx:1266
 TQFolder.cxx:1267
 TQFolder.cxx:1268
 TQFolder.cxx:1269
 TQFolder.cxx:1270
 TQFolder.cxx:1271
 TQFolder.cxx:1272
 TQFolder.cxx:1273
 TQFolder.cxx:1274
 TQFolder.cxx:1275
 TQFolder.cxx:1276
 TQFolder.cxx:1277
 TQFolder.cxx:1278
 TQFolder.cxx:1279
 TQFolder.cxx:1280
 TQFolder.cxx:1281
 TQFolder.cxx:1282
 TQFolder.cxx:1283
 TQFolder.cxx:1284
 TQFolder.cxx:1285
 TQFolder.cxx:1286
 TQFolder.cxx:1287
 TQFolder.cxx:1288
 TQFolder.cxx:1289
 TQFolder.cxx:1290
 TQFolder.cxx:1291
 TQFolder.cxx:1292
 TQFolder.cxx:1293
 TQFolder.cxx:1294
 TQFolder.cxx:1295
 TQFolder.cxx:1296
 TQFolder.cxx:1297
 TQFolder.cxx:1298
 TQFolder.cxx:1299
 TQFolder.cxx:1300
 TQFolder.cxx:1301
 TQFolder.cxx:1302
 TQFolder.cxx:1303
 TQFolder.cxx:1304
 TQFolder.cxx:1305
 TQFolder.cxx:1306
 TQFolder.cxx:1307
 TQFolder.cxx:1308
 TQFolder.cxx:1309
 TQFolder.cxx:1310
 TQFolder.cxx:1311
 TQFolder.cxx:1312
 TQFolder.cxx:1313
 TQFolder.cxx:1314
 TQFolder.cxx:1315
 TQFolder.cxx:1316
 TQFolder.cxx:1317
 TQFolder.cxx:1318
 TQFolder.cxx:1319
 TQFolder.cxx:1320
 TQFolder.cxx:1321
 TQFolder.cxx:1322
 TQFolder.cxx:1323
 TQFolder.cxx:1324
 TQFolder.cxx:1325
 TQFolder.cxx:1326
 TQFolder.cxx:1327
 TQFolder.cxx:1328
 TQFolder.cxx:1329
 TQFolder.cxx:1330
 TQFolder.cxx:1331
 TQFolder.cxx:1332
 TQFolder.cxx:1333
 TQFolder.cxx:1334
 TQFolder.cxx:1335
 TQFolder.cxx:1336
 TQFolder.cxx:1337
 TQFolder.cxx:1338
 TQFolder.cxx:1339
 TQFolder.cxx:1340
 TQFolder.cxx:1341
 TQFolder.cxx:1342
 TQFolder.cxx:1343
 TQFolder.cxx:1344
 TQFolder.cxx:1345
 TQFolder.cxx:1346
 TQFolder.cxx:1347
 TQFolder.cxx:1348
 TQFolder.cxx:1349
 TQFolder.cxx:1350
 TQFolder.cxx:1351
 TQFolder.cxx:1352
 TQFolder.cxx:1353
 TQFolder.cxx:1354
 TQFolder.cxx:1355
 TQFolder.cxx:1356
 TQFolder.cxx:1357
 TQFolder.cxx:1358
 TQFolder.cxx:1359
 TQFolder.cxx:1360
 TQFolder.cxx:1361
 TQFolder.cxx:1362
 TQFolder.cxx:1363
 TQFolder.cxx:1364
 TQFolder.cxx:1365
 TQFolder.cxx:1366
 TQFolder.cxx:1367
 TQFolder.cxx:1368
 TQFolder.cxx:1369
 TQFolder.cxx:1370
 TQFolder.cxx:1371
 TQFolder.cxx:1372
 TQFolder.cxx:1373
 TQFolder.cxx:1374
 TQFolder.cxx:1375
 TQFolder.cxx:1376
 TQFolder.cxx:1377
 TQFolder.cxx:1378
 TQFolder.cxx:1379
 TQFolder.cxx:1380
 TQFolder.cxx:1381
 TQFolder.cxx:1382
 TQFolder.cxx:1383
 TQFolder.cxx:1384
 TQFolder.cxx:1385
 TQFolder.cxx:1386
 TQFolder.cxx:1387
 TQFolder.cxx:1388
 TQFolder.cxx:1389
 TQFolder.cxx:1390
 TQFolder.cxx:1391
 TQFolder.cxx:1392
 TQFolder.cxx:1393
 TQFolder.cxx:1394
 TQFolder.cxx:1395
 TQFolder.cxx:1396
 TQFolder.cxx:1397
 TQFolder.cxx:1398
 TQFolder.cxx:1399
 TQFolder.cxx:1400
 TQFolder.cxx:1401
 TQFolder.cxx:1402
 TQFolder.cxx:1403
 TQFolder.cxx:1404
 TQFolder.cxx:1405
 TQFolder.cxx:1406
 TQFolder.cxx:1407
 TQFolder.cxx:1408
 TQFolder.cxx:1409
 TQFolder.cxx:1410
 TQFolder.cxx:1411
 TQFolder.cxx:1412
 TQFolder.cxx:1413
 TQFolder.cxx:1414
 TQFolder.cxx:1415
 TQFolder.cxx:1416
 TQFolder.cxx:1417
 TQFolder.cxx:1418
 TQFolder.cxx:1419
 TQFolder.cxx:1420
 TQFolder.cxx:1421
 TQFolder.cxx:1422
 TQFolder.cxx:1423
 TQFolder.cxx:1424
 TQFolder.cxx:1425
 TQFolder.cxx:1426
 TQFolder.cxx:1427
 TQFolder.cxx:1428
 TQFolder.cxx:1429
 TQFolder.cxx:1430
 TQFolder.cxx:1431
 TQFolder.cxx:1432
 TQFolder.cxx:1433
 TQFolder.cxx:1434
 TQFolder.cxx:1435
 TQFolder.cxx:1436
 TQFolder.cxx:1437
 TQFolder.cxx:1438
 TQFolder.cxx:1439
 TQFolder.cxx:1440
 TQFolder.cxx:1441
 TQFolder.cxx:1442
 TQFolder.cxx:1443
 TQFolder.cxx:1444
 TQFolder.cxx:1445
 TQFolder.cxx:1446
 TQFolder.cxx:1447
 TQFolder.cxx:1448
 TQFolder.cxx:1449
 TQFolder.cxx:1450
 TQFolder.cxx:1451
 TQFolder.cxx:1452
 TQFolder.cxx:1453
 TQFolder.cxx:1454
 TQFolder.cxx:1455
 TQFolder.cxx:1456
 TQFolder.cxx:1457
 TQFolder.cxx:1458
 TQFolder.cxx:1459
 TQFolder.cxx:1460
 TQFolder.cxx:1461
 TQFolder.cxx:1462
 TQFolder.cxx:1463
 TQFolder.cxx:1464
 TQFolder.cxx:1465
 TQFolder.cxx:1466
 TQFolder.cxx:1467
 TQFolder.cxx:1468
 TQFolder.cxx:1469
 TQFolder.cxx:1470
 TQFolder.cxx:1471
 TQFolder.cxx:1472
 TQFolder.cxx:1473
 TQFolder.cxx:1474
 TQFolder.cxx:1475
 TQFolder.cxx:1476
 TQFolder.cxx:1477
 TQFolder.cxx:1478
 TQFolder.cxx:1479
 TQFolder.cxx:1480
 TQFolder.cxx:1481
 TQFolder.cxx:1482
 TQFolder.cxx:1483
 TQFolder.cxx:1484
 TQFolder.cxx:1485
 TQFolder.cxx:1486
 TQFolder.cxx:1487
 TQFolder.cxx:1488
 TQFolder.cxx:1489
 TQFolder.cxx:1490
 TQFolder.cxx:1491
 TQFolder.cxx:1492
 TQFolder.cxx:1493
 TQFolder.cxx:1494
 TQFolder.cxx:1495
 TQFolder.cxx:1496
 TQFolder.cxx:1497
 TQFolder.cxx:1498
 TQFolder.cxx:1499
 TQFolder.cxx:1500
 TQFolder.cxx:1501
 TQFolder.cxx:1502
 TQFolder.cxx:1503
 TQFolder.cxx:1504
 TQFolder.cxx:1505
 TQFolder.cxx:1506
 TQFolder.cxx:1507
 TQFolder.cxx:1508
 TQFolder.cxx:1509
 TQFolder.cxx:1510
 TQFolder.cxx:1511
 TQFolder.cxx:1512
 TQFolder.cxx:1513
 TQFolder.cxx:1514
 TQFolder.cxx:1515
 TQFolder.cxx:1516
 TQFolder.cxx:1517
 TQFolder.cxx:1518
 TQFolder.cxx:1519
 TQFolder.cxx:1520
 TQFolder.cxx:1521
 TQFolder.cxx:1522
 TQFolder.cxx:1523
 TQFolder.cxx:1524
 TQFolder.cxx:1525
 TQFolder.cxx:1526
 TQFolder.cxx:1527
 TQFolder.cxx:1528
 TQFolder.cxx:1529
 TQFolder.cxx:1530
 TQFolder.cxx:1531
 TQFolder.cxx:1532
 TQFolder.cxx:1533
 TQFolder.cxx:1534
 TQFolder.cxx:1535
 TQFolder.cxx:1536
 TQFolder.cxx:1537
 TQFolder.cxx:1538
 TQFolder.cxx:1539
 TQFolder.cxx:1540
 TQFolder.cxx:1541
 TQFolder.cxx:1542
 TQFolder.cxx:1543
 TQFolder.cxx:1544
 TQFolder.cxx:1545
 TQFolder.cxx:1546
 TQFolder.cxx:1547
 TQFolder.cxx:1548
 TQFolder.cxx:1549
 TQFolder.cxx:1550
 TQFolder.cxx:1551
 TQFolder.cxx:1552
 TQFolder.cxx:1553
 TQFolder.cxx:1554
 TQFolder.cxx:1555
 TQFolder.cxx:1556
 TQFolder.cxx:1557
 TQFolder.cxx:1558
 TQFolder.cxx:1559
 TQFolder.cxx:1560
 TQFolder.cxx:1561
 TQFolder.cxx:1562
 TQFolder.cxx:1563
 TQFolder.cxx:1564
 TQFolder.cxx:1565
 TQFolder.cxx:1566
 TQFolder.cxx:1567
 TQFolder.cxx:1568
 TQFolder.cxx:1569
 TQFolder.cxx:1570
 TQFolder.cxx:1571
 TQFolder.cxx:1572
 TQFolder.cxx:1573
 TQFolder.cxx:1574
 TQFolder.cxx:1575
 TQFolder.cxx:1576
 TQFolder.cxx:1577
 TQFolder.cxx:1578
 TQFolder.cxx:1579
 TQFolder.cxx:1580
 TQFolder.cxx:1581
 TQFolder.cxx:1582
 TQFolder.cxx:1583
 TQFolder.cxx:1584
 TQFolder.cxx:1585
 TQFolder.cxx:1586
 TQFolder.cxx:1587
 TQFolder.cxx:1588
 TQFolder.cxx:1589
 TQFolder.cxx:1590
 TQFolder.cxx:1591
 TQFolder.cxx:1592
 TQFolder.cxx:1593
 TQFolder.cxx:1594
 TQFolder.cxx:1595
 TQFolder.cxx:1596
 TQFolder.cxx:1597
 TQFolder.cxx:1598
 TQFolder.cxx:1599
 TQFolder.cxx:1600
 TQFolder.cxx:1601
 TQFolder.cxx:1602
 TQFolder.cxx:1603
 TQFolder.cxx:1604
 TQFolder.cxx:1605
 TQFolder.cxx:1606
 TQFolder.cxx:1607
 TQFolder.cxx:1608
 TQFolder.cxx:1609
 TQFolder.cxx:1610
 TQFolder.cxx:1611
 TQFolder.cxx:1612
 TQFolder.cxx:1613
 TQFolder.cxx:1614
 TQFolder.cxx:1615
 TQFolder.cxx:1616
 TQFolder.cxx:1617
 TQFolder.cxx:1618
 TQFolder.cxx:1619
 TQFolder.cxx:1620
 TQFolder.cxx:1621
 TQFolder.cxx:1622
 TQFolder.cxx:1623
 TQFolder.cxx:1624
 TQFolder.cxx:1625
 TQFolder.cxx:1626
 TQFolder.cxx:1627
 TQFolder.cxx:1628
 TQFolder.cxx:1629
 TQFolder.cxx:1630
 TQFolder.cxx:1631
 TQFolder.cxx:1632
 TQFolder.cxx:1633
 TQFolder.cxx:1634
 TQFolder.cxx:1635
 TQFolder.cxx:1636
 TQFolder.cxx:1637
 TQFolder.cxx:1638
 TQFolder.cxx:1639
 TQFolder.cxx:1640
 TQFolder.cxx:1641
 TQFolder.cxx:1642
 TQFolder.cxx:1643
 TQFolder.cxx:1644
 TQFolder.cxx:1645
 TQFolder.cxx:1646
 TQFolder.cxx:1647
 TQFolder.cxx:1648
 TQFolder.cxx:1649
 TQFolder.cxx:1650
 TQFolder.cxx:1651
 TQFolder.cxx:1652
 TQFolder.cxx:1653
 TQFolder.cxx:1654
 TQFolder.cxx:1655
 TQFolder.cxx:1656
 TQFolder.cxx:1657
 TQFolder.cxx:1658
 TQFolder.cxx:1659
 TQFolder.cxx:1660
 TQFolder.cxx:1661
 TQFolder.cxx:1662
 TQFolder.cxx:1663
 TQFolder.cxx:1664
 TQFolder.cxx:1665
 TQFolder.cxx:1666
 TQFolder.cxx:1667
 TQFolder.cxx:1668
 TQFolder.cxx:1669
 TQFolder.cxx:1670
 TQFolder.cxx:1671
 TQFolder.cxx:1672
 TQFolder.cxx:1673
 TQFolder.cxx:1674
 TQFolder.cxx:1675
 TQFolder.cxx:1676
 TQFolder.cxx:1677
 TQFolder.cxx:1678
 TQFolder.cxx:1679
 TQFolder.cxx:1680
 TQFolder.cxx:1681
 TQFolder.cxx:1682
 TQFolder.cxx:1683
 TQFolder.cxx:1684
 TQFolder.cxx:1685
 TQFolder.cxx:1686
 TQFolder.cxx:1687
 TQFolder.cxx:1688
 TQFolder.cxx:1689
 TQFolder.cxx:1690
 TQFolder.cxx:1691
 TQFolder.cxx:1692
 TQFolder.cxx:1693
 TQFolder.cxx:1694
 TQFolder.cxx:1695
 TQFolder.cxx:1696
 TQFolder.cxx:1697
 TQFolder.cxx:1698
 TQFolder.cxx:1699
 TQFolder.cxx:1700
 TQFolder.cxx:1701
 TQFolder.cxx:1702
 TQFolder.cxx:1703
 TQFolder.cxx:1704
 TQFolder.cxx:1705
 TQFolder.cxx:1706
 TQFolder.cxx:1707
 TQFolder.cxx:1708
 TQFolder.cxx:1709
 TQFolder.cxx:1710
 TQFolder.cxx:1711
 TQFolder.cxx:1712
 TQFolder.cxx:1713
 TQFolder.cxx:1714
 TQFolder.cxx:1715
 TQFolder.cxx:1716
 TQFolder.cxx:1717
 TQFolder.cxx:1718
 TQFolder.cxx:1719
 TQFolder.cxx:1720
 TQFolder.cxx:1721
 TQFolder.cxx:1722
 TQFolder.cxx:1723
 TQFolder.cxx:1724
 TQFolder.cxx:1725
 TQFolder.cxx:1726
 TQFolder.cxx:1727
 TQFolder.cxx:1728
 TQFolder.cxx:1729
 TQFolder.cxx:1730
 TQFolder.cxx:1731
 TQFolder.cxx:1732
 TQFolder.cxx:1733
 TQFolder.cxx:1734
 TQFolder.cxx:1735
 TQFolder.cxx:1736
 TQFolder.cxx:1737
 TQFolder.cxx:1738
 TQFolder.cxx:1739
 TQFolder.cxx:1740
 TQFolder.cxx:1741
 TQFolder.cxx:1742
 TQFolder.cxx:1743
 TQFolder.cxx:1744
 TQFolder.cxx:1745
 TQFolder.cxx:1746
 TQFolder.cxx:1747
 TQFolder.cxx:1748
 TQFolder.cxx:1749
 TQFolder.cxx:1750
 TQFolder.cxx:1751
 TQFolder.cxx:1752
 TQFolder.cxx:1753
 TQFolder.cxx:1754
 TQFolder.cxx:1755
 TQFolder.cxx:1756
 TQFolder.cxx:1757
 TQFolder.cxx:1758
 TQFolder.cxx:1759
 TQFolder.cxx:1760
 TQFolder.cxx:1761
 TQFolder.cxx:1762
 TQFolder.cxx:1763
 TQFolder.cxx:1764
 TQFolder.cxx:1765
 TQFolder.cxx:1766
 TQFolder.cxx:1767
 TQFolder.cxx:1768
 TQFolder.cxx:1769
 TQFolder.cxx:1770
 TQFolder.cxx:1771
 TQFolder.cxx:1772
 TQFolder.cxx:1773
 TQFolder.cxx:1774
 TQFolder.cxx:1775
 TQFolder.cxx:1776
 TQFolder.cxx:1777
 TQFolder.cxx:1778
 TQFolder.cxx:1779
 TQFolder.cxx:1780
 TQFolder.cxx:1781
 TQFolder.cxx:1782
 TQFolder.cxx:1783
 TQFolder.cxx:1784
 TQFolder.cxx:1785
 TQFolder.cxx:1786
 TQFolder.cxx:1787
 TQFolder.cxx:1788
 TQFolder.cxx:1789
 TQFolder.cxx:1790
 TQFolder.cxx:1791
 TQFolder.cxx:1792
 TQFolder.cxx:1793
 TQFolder.cxx:1794
 TQFolder.cxx:1795
 TQFolder.cxx:1796
 TQFolder.cxx:1797
 TQFolder.cxx:1798
 TQFolder.cxx:1799
 TQFolder.cxx:1800
 TQFolder.cxx:1801
 TQFolder.cxx:1802
 TQFolder.cxx:1803
 TQFolder.cxx:1804
 TQFolder.cxx:1805
 TQFolder.cxx:1806
 TQFolder.cxx:1807
 TQFolder.cxx:1808
 TQFolder.cxx:1809
 TQFolder.cxx:1810
 TQFolder.cxx:1811
 TQFolder.cxx:1812
 TQFolder.cxx:1813
 TQFolder.cxx:1814
 TQFolder.cxx:1815
 TQFolder.cxx:1816
 TQFolder.cxx:1817
 TQFolder.cxx:1818
 TQFolder.cxx:1819
 TQFolder.cxx:1820
 TQFolder.cxx:1821
 TQFolder.cxx:1822
 TQFolder.cxx:1823
 TQFolder.cxx:1824
 TQFolder.cxx:1825
 TQFolder.cxx:1826
 TQFolder.cxx:1827
 TQFolder.cxx:1828
 TQFolder.cxx:1829
 TQFolder.cxx:1830
 TQFolder.cxx:1831
 TQFolder.cxx:1832
 TQFolder.cxx:1833
 TQFolder.cxx:1834
 TQFolder.cxx:1835
 TQFolder.cxx:1836
 TQFolder.cxx:1837
 TQFolder.cxx:1838
 TQFolder.cxx:1839
 TQFolder.cxx:1840
 TQFolder.cxx:1841
 TQFolder.cxx:1842
 TQFolder.cxx:1843
 TQFolder.cxx:1844
 TQFolder.cxx:1845
 TQFolder.cxx:1846
 TQFolder.cxx:1847
 TQFolder.cxx:1848
 TQFolder.cxx:1849
 TQFolder.cxx:1850
 TQFolder.cxx:1851
 TQFolder.cxx:1852
 TQFolder.cxx:1853
 TQFolder.cxx:1854
 TQFolder.cxx:1855
 TQFolder.cxx:1856
 TQFolder.cxx:1857
 TQFolder.cxx:1858
 TQFolder.cxx:1859
 TQFolder.cxx:1860
 TQFolder.cxx:1861
 TQFolder.cxx:1862
 TQFolder.cxx:1863
 TQFolder.cxx:1864
 TQFolder.cxx:1865
 TQFolder.cxx:1866
 TQFolder.cxx:1867
 TQFolder.cxx:1868
 TQFolder.cxx:1869
 TQFolder.cxx:1870
 TQFolder.cxx:1871
 TQFolder.cxx:1872
 TQFolder.cxx:1873
 TQFolder.cxx:1874
 TQFolder.cxx:1875
 TQFolder.cxx:1876
 TQFolder.cxx:1877
 TQFolder.cxx:1878
 TQFolder.cxx:1879
 TQFolder.cxx:1880
 TQFolder.cxx:1881
 TQFolder.cxx:1882
 TQFolder.cxx:1883
 TQFolder.cxx:1884
 TQFolder.cxx:1885
 TQFolder.cxx:1886
 TQFolder.cxx:1887
 TQFolder.cxx:1888
 TQFolder.cxx:1889
 TQFolder.cxx:1890
 TQFolder.cxx:1891
 TQFolder.cxx:1892
 TQFolder.cxx:1893
 TQFolder.cxx:1894
 TQFolder.cxx:1895
 TQFolder.cxx:1896
 TQFolder.cxx:1897
 TQFolder.cxx:1898
 TQFolder.cxx:1899
 TQFolder.cxx:1900
 TQFolder.cxx:1901
 TQFolder.cxx:1902
 TQFolder.cxx:1903
 TQFolder.cxx:1904
 TQFolder.cxx:1905
 TQFolder.cxx:1906
 TQFolder.cxx:1907
 TQFolder.cxx:1908
 TQFolder.cxx:1909
 TQFolder.cxx:1910
 TQFolder.cxx:1911
 TQFolder.cxx:1912
 TQFolder.cxx:1913
 TQFolder.cxx:1914
 TQFolder.cxx:1915
 TQFolder.cxx:1916
 TQFolder.cxx:1917
 TQFolder.cxx:1918
 TQFolder.cxx:1919
 TQFolder.cxx:1920
 TQFolder.cxx:1921
 TQFolder.cxx:1922
 TQFolder.cxx:1923
 TQFolder.cxx:1924
 TQFolder.cxx:1925
 TQFolder.cxx:1926
 TQFolder.cxx:1927
 TQFolder.cxx:1928
 TQFolder.cxx:1929
 TQFolder.cxx:1930
 TQFolder.cxx:1931
 TQFolder.cxx:1932
 TQFolder.cxx:1933
 TQFolder.cxx:1934
 TQFolder.cxx:1935
 TQFolder.cxx:1936
 TQFolder.cxx:1937
 TQFolder.cxx:1938
 TQFolder.cxx:1939
 TQFolder.cxx:1940
 TQFolder.cxx:1941
 TQFolder.cxx:1942
 TQFolder.cxx:1943
 TQFolder.cxx:1944
 TQFolder.cxx:1945
 TQFolder.cxx:1946
 TQFolder.cxx:1947
 TQFolder.cxx:1948
 TQFolder.cxx:1949
 TQFolder.cxx:1950
 TQFolder.cxx:1951
 TQFolder.cxx:1952
 TQFolder.cxx:1953
 TQFolder.cxx:1954
 TQFolder.cxx:1955
 TQFolder.cxx:1956
 TQFolder.cxx:1957
 TQFolder.cxx:1958
 TQFolder.cxx:1959
 TQFolder.cxx:1960
 TQFolder.cxx:1961
 TQFolder.cxx:1962
 TQFolder.cxx:1963
 TQFolder.cxx:1964
 TQFolder.cxx:1965
 TQFolder.cxx:1966
 TQFolder.cxx:1967
 TQFolder.cxx:1968
 TQFolder.cxx:1969
 TQFolder.cxx:1970
 TQFolder.cxx:1971
 TQFolder.cxx:1972
 TQFolder.cxx:1973
 TQFolder.cxx:1974
 TQFolder.cxx:1975
 TQFolder.cxx:1976
 TQFolder.cxx:1977
 TQFolder.cxx:1978
 TQFolder.cxx:1979
 TQFolder.cxx:1980
 TQFolder.cxx:1981
 TQFolder.cxx:1982
 TQFolder.cxx:1983
 TQFolder.cxx:1984
 TQFolder.cxx:1985
 TQFolder.cxx:1986
 TQFolder.cxx:1987
 TQFolder.cxx:1988
 TQFolder.cxx:1989
 TQFolder.cxx:1990
 TQFolder.cxx:1991
 TQFolder.cxx:1992
 TQFolder.cxx:1993
 TQFolder.cxx:1994
 TQFolder.cxx:1995
 TQFolder.cxx:1996
 TQFolder.cxx:1997
 TQFolder.cxx:1998
 TQFolder.cxx:1999
 TQFolder.cxx:2000
 TQFolder.cxx:2001
 TQFolder.cxx:2002
 TQFolder.cxx:2003
 TQFolder.cxx:2004
 TQFolder.cxx:2005
 TQFolder.cxx:2006
 TQFolder.cxx:2007
 TQFolder.cxx:2008
 TQFolder.cxx:2009
 TQFolder.cxx:2010
 TQFolder.cxx:2011
 TQFolder.cxx:2012
 TQFolder.cxx:2013
 TQFolder.cxx:2014
 TQFolder.cxx:2015
 TQFolder.cxx:2016
 TQFolder.cxx:2017
 TQFolder.cxx:2018
 TQFolder.cxx:2019
 TQFolder.cxx:2020
 TQFolder.cxx:2021
 TQFolder.cxx:2022
 TQFolder.cxx:2023
 TQFolder.cxx:2024
 TQFolder.cxx:2025
 TQFolder.cxx:2026
 TQFolder.cxx:2027
 TQFolder.cxx:2028
 TQFolder.cxx:2029
 TQFolder.cxx:2030
 TQFolder.cxx:2031
 TQFolder.cxx:2032
 TQFolder.cxx:2033
 TQFolder.cxx:2034
 TQFolder.cxx:2035
 TQFolder.cxx:2036
 TQFolder.cxx:2037
 TQFolder.cxx:2038
 TQFolder.cxx:2039
 TQFolder.cxx:2040
 TQFolder.cxx:2041
 TQFolder.cxx:2042
 TQFolder.cxx:2043
 TQFolder.cxx:2044
 TQFolder.cxx:2045
 TQFolder.cxx:2046
 TQFolder.cxx:2047
 TQFolder.cxx:2048
 TQFolder.cxx:2049
 TQFolder.cxx:2050
 TQFolder.cxx:2051
 TQFolder.cxx:2052
 TQFolder.cxx:2053
 TQFolder.cxx:2054
 TQFolder.cxx:2055
 TQFolder.cxx:2056
 TQFolder.cxx:2057
 TQFolder.cxx:2058
 TQFolder.cxx:2059
 TQFolder.cxx:2060
 TQFolder.cxx:2061
 TQFolder.cxx:2062
 TQFolder.cxx:2063
 TQFolder.cxx:2064
 TQFolder.cxx:2065
 TQFolder.cxx:2066
 TQFolder.cxx:2067
 TQFolder.cxx:2068
 TQFolder.cxx:2069
 TQFolder.cxx:2070
 TQFolder.cxx:2071
 TQFolder.cxx:2072
 TQFolder.cxx:2073
 TQFolder.cxx:2074
 TQFolder.cxx:2075
 TQFolder.cxx:2076
 TQFolder.cxx:2077
 TQFolder.cxx:2078
 TQFolder.cxx:2079
 TQFolder.cxx:2080
 TQFolder.cxx:2081
 TQFolder.cxx:2082
 TQFolder.cxx:2083
 TQFolder.cxx:2084
 TQFolder.cxx:2085
 TQFolder.cxx:2086
 TQFolder.cxx:2087
 TQFolder.cxx:2088
 TQFolder.cxx:2089
 TQFolder.cxx:2090
 TQFolder.cxx:2091
 TQFolder.cxx:2092
 TQFolder.cxx:2093
 TQFolder.cxx:2094
 TQFolder.cxx:2095
 TQFolder.cxx:2096
 TQFolder.cxx:2097
 TQFolder.cxx:2098
 TQFolder.cxx:2099
 TQFolder.cxx:2100
 TQFolder.cxx:2101
 TQFolder.cxx:2102
 TQFolder.cxx:2103
 TQFolder.cxx:2104
 TQFolder.cxx:2105
 TQFolder.cxx:2106
 TQFolder.cxx:2107
 TQFolder.cxx:2108
 TQFolder.cxx:2109
 TQFolder.cxx:2110
 TQFolder.cxx:2111
 TQFolder.cxx:2112
 TQFolder.cxx:2113
 TQFolder.cxx:2114
 TQFolder.cxx:2115
 TQFolder.cxx:2116
 TQFolder.cxx:2117
 TQFolder.cxx:2118
 TQFolder.cxx:2119
 TQFolder.cxx:2120
 TQFolder.cxx:2121
 TQFolder.cxx:2122
 TQFolder.cxx:2123
 TQFolder.cxx:2124
 TQFolder.cxx:2125
 TQFolder.cxx:2126
 TQFolder.cxx:2127
 TQFolder.cxx:2128
 TQFolder.cxx:2129
 TQFolder.cxx:2130
 TQFolder.cxx:2131
 TQFolder.cxx:2132
 TQFolder.cxx:2133
 TQFolder.cxx:2134
 TQFolder.cxx:2135
 TQFolder.cxx:2136
 TQFolder.cxx:2137
 TQFolder.cxx:2138
 TQFolder.cxx:2139
 TQFolder.cxx:2140
 TQFolder.cxx:2141
 TQFolder.cxx:2142
 TQFolder.cxx:2143
 TQFolder.cxx:2144
 TQFolder.cxx:2145
 TQFolder.cxx:2146
 TQFolder.cxx:2147
 TQFolder.cxx:2148
 TQFolder.cxx:2149
 TQFolder.cxx:2150
 TQFolder.cxx:2151
 TQFolder.cxx:2152
 TQFolder.cxx:2153
 TQFolder.cxx:2154
 TQFolder.cxx:2155
 TQFolder.cxx:2156
 TQFolder.cxx:2157
 TQFolder.cxx:2158
 TQFolder.cxx:2159
 TQFolder.cxx:2160
 TQFolder.cxx:2161
 TQFolder.cxx:2162
 TQFolder.cxx:2163
 TQFolder.cxx:2164
 TQFolder.cxx:2165
 TQFolder.cxx:2166
 TQFolder.cxx:2167
 TQFolder.cxx:2168
 TQFolder.cxx:2169
 TQFolder.cxx:2170
 TQFolder.cxx:2171
 TQFolder.cxx:2172
 TQFolder.cxx:2173
 TQFolder.cxx:2174
 TQFolder.cxx:2175
 TQFolder.cxx:2176
 TQFolder.cxx:2177
 TQFolder.cxx:2178
 TQFolder.cxx:2179
 TQFolder.cxx:2180
 TQFolder.cxx:2181
 TQFolder.cxx:2182
 TQFolder.cxx:2183
 TQFolder.cxx:2184
 TQFolder.cxx:2185
 TQFolder.cxx:2186
 TQFolder.cxx:2187
 TQFolder.cxx:2188
 TQFolder.cxx:2189
 TQFolder.cxx:2190
 TQFolder.cxx:2191
 TQFolder.cxx:2192
 TQFolder.cxx:2193
 TQFolder.cxx:2194
 TQFolder.cxx:2195
 TQFolder.cxx:2196
 TQFolder.cxx:2197
 TQFolder.cxx:2198
 TQFolder.cxx:2199
 TQFolder.cxx:2200
 TQFolder.cxx:2201
 TQFolder.cxx:2202
 TQFolder.cxx:2203
 TQFolder.cxx:2204
 TQFolder.cxx:2205
 TQFolder.cxx:2206
 TQFolder.cxx:2207
 TQFolder.cxx:2208
 TQFolder.cxx:2209
 TQFolder.cxx:2210
 TQFolder.cxx:2211
 TQFolder.cxx:2212
 TQFolder.cxx:2213
 TQFolder.cxx:2214
 TQFolder.cxx:2215
 TQFolder.cxx:2216
 TQFolder.cxx:2217
 TQFolder.cxx:2218
 TQFolder.cxx:2219
 TQFolder.cxx:2220
 TQFolder.cxx:2221
 TQFolder.cxx:2222
 TQFolder.cxx:2223
 TQFolder.cxx:2224
 TQFolder.cxx:2225
 TQFolder.cxx:2226
 TQFolder.cxx:2227
 TQFolder.cxx:2228
 TQFolder.cxx:2229
 TQFolder.cxx:2230
 TQFolder.cxx:2231
 TQFolder.cxx:2232
 TQFolder.cxx:2233
 TQFolder.cxx:2234
 TQFolder.cxx:2235
 TQFolder.cxx:2236
 TQFolder.cxx:2237
 TQFolder.cxx:2238
 TQFolder.cxx:2239
 TQFolder.cxx:2240
 TQFolder.cxx:2241
 TQFolder.cxx:2242
 TQFolder.cxx:2243
 TQFolder.cxx:2244
 TQFolder.cxx:2245
 TQFolder.cxx:2246
 TQFolder.cxx:2247
 TQFolder.cxx:2248
 TQFolder.cxx:2249
 TQFolder.cxx:2250
 TQFolder.cxx:2251
 TQFolder.cxx:2252
 TQFolder.cxx:2253
 TQFolder.cxx:2254
 TQFolder.cxx:2255
 TQFolder.cxx:2256
 TQFolder.cxx:2257
 TQFolder.cxx:2258
 TQFolder.cxx:2259
 TQFolder.cxx:2260
 TQFolder.cxx:2261
 TQFolder.cxx:2262
 TQFolder.cxx:2263
 TQFolder.cxx:2264
 TQFolder.cxx:2265
 TQFolder.cxx:2266
 TQFolder.cxx:2267
 TQFolder.cxx:2268
 TQFolder.cxx:2269
 TQFolder.cxx:2270
 TQFolder.cxx:2271
 TQFolder.cxx:2272
 TQFolder.cxx:2273
 TQFolder.cxx:2274
 TQFolder.cxx:2275
 TQFolder.cxx:2276
 TQFolder.cxx:2277
 TQFolder.cxx:2278
 TQFolder.cxx:2279
 TQFolder.cxx:2280
 TQFolder.cxx:2281
 TQFolder.cxx:2282
 TQFolder.cxx:2283
 TQFolder.cxx:2284
 TQFolder.cxx:2285
 TQFolder.cxx:2286
 TQFolder.cxx:2287
 TQFolder.cxx:2288
 TQFolder.cxx:2289
 TQFolder.cxx:2290
 TQFolder.cxx:2291
 TQFolder.cxx:2292
 TQFolder.cxx:2293
 TQFolder.cxx:2294
 TQFolder.cxx:2295
 TQFolder.cxx:2296
 TQFolder.cxx:2297
 TQFolder.cxx:2298
 TQFolder.cxx:2299
 TQFolder.cxx:2300
 TQFolder.cxx:2301
 TQFolder.cxx:2302
 TQFolder.cxx:2303
 TQFolder.cxx:2304
 TQFolder.cxx:2305
 TQFolder.cxx:2306
 TQFolder.cxx:2307
 TQFolder.cxx:2308
 TQFolder.cxx:2309
 TQFolder.cxx:2310
 TQFolder.cxx:2311
 TQFolder.cxx:2312
 TQFolder.cxx:2313
 TQFolder.cxx:2314
 TQFolder.cxx:2315
 TQFolder.cxx:2316
 TQFolder.cxx:2317
 TQFolder.cxx:2318
 TQFolder.cxx:2319
 TQFolder.cxx:2320
 TQFolder.cxx:2321
 TQFolder.cxx:2322
 TQFolder.cxx:2323
 TQFolder.cxx:2324
 TQFolder.cxx:2325
 TQFolder.cxx:2326
 TQFolder.cxx:2327
 TQFolder.cxx:2328
 TQFolder.cxx:2329
 TQFolder.cxx:2330
 TQFolder.cxx:2331
 TQFolder.cxx:2332
 TQFolder.cxx:2333
 TQFolder.cxx:2334
 TQFolder.cxx:2335
 TQFolder.cxx:2336
 TQFolder.cxx:2337
 TQFolder.cxx:2338
 TQFolder.cxx:2339
 TQFolder.cxx:2340
 TQFolder.cxx:2341
 TQFolder.cxx:2342
 TQFolder.cxx:2343
 TQFolder.cxx:2344
 TQFolder.cxx:2345
 TQFolder.cxx:2346
 TQFolder.cxx:2347
 TQFolder.cxx:2348
 TQFolder.cxx:2349
 TQFolder.cxx:2350
 TQFolder.cxx:2351
 TQFolder.cxx:2352
 TQFolder.cxx:2353
 TQFolder.cxx:2354
 TQFolder.cxx:2355
 TQFolder.cxx:2356
 TQFolder.cxx:2357
 TQFolder.cxx:2358
 TQFolder.cxx:2359
 TQFolder.cxx:2360
 TQFolder.cxx:2361
 TQFolder.cxx:2362
 TQFolder.cxx:2363
 TQFolder.cxx:2364
 TQFolder.cxx:2365
 TQFolder.cxx:2366
 TQFolder.cxx:2367
 TQFolder.cxx:2368
 TQFolder.cxx:2369
 TQFolder.cxx:2370
 TQFolder.cxx:2371
 TQFolder.cxx:2372
 TQFolder.cxx:2373
 TQFolder.cxx:2374
 TQFolder.cxx:2375
 TQFolder.cxx:2376
 TQFolder.cxx:2377
 TQFolder.cxx:2378
 TQFolder.cxx:2379
 TQFolder.cxx:2380
 TQFolder.cxx:2381
 TQFolder.cxx:2382
 TQFolder.cxx:2383
 TQFolder.cxx:2384
 TQFolder.cxx:2385
 TQFolder.cxx:2386
 TQFolder.cxx:2387
 TQFolder.cxx:2388
 TQFolder.cxx:2389
 TQFolder.cxx:2390
 TQFolder.cxx:2391
 TQFolder.cxx:2392
 TQFolder.cxx:2393
 TQFolder.cxx:2394
 TQFolder.cxx:2395
 TQFolder.cxx:2396
 TQFolder.cxx:2397
 TQFolder.cxx:2398
 TQFolder.cxx:2399
 TQFolder.cxx:2400
 TQFolder.cxx:2401
 TQFolder.cxx:2402
 TQFolder.cxx:2403
 TQFolder.cxx:2404
 TQFolder.cxx:2405
 TQFolder.cxx:2406
 TQFolder.cxx:2407
 TQFolder.cxx:2408
 TQFolder.cxx:2409
 TQFolder.cxx:2410
 TQFolder.cxx:2411
 TQFolder.cxx:2412
 TQFolder.cxx:2413
 TQFolder.cxx:2414
 TQFolder.cxx:2415
 TQFolder.cxx:2416
 TQFolder.cxx:2417
 TQFolder.cxx:2418
 TQFolder.cxx:2419
 TQFolder.cxx:2420
 TQFolder.cxx:2421
 TQFolder.cxx:2422
 TQFolder.cxx:2423
 TQFolder.cxx:2424
 TQFolder.cxx:2425
 TQFolder.cxx:2426
 TQFolder.cxx:2427
 TQFolder.cxx:2428
 TQFolder.cxx:2429
 TQFolder.cxx:2430
 TQFolder.cxx:2431
 TQFolder.cxx:2432
 TQFolder.cxx:2433
 TQFolder.cxx:2434
 TQFolder.cxx:2435
 TQFolder.cxx:2436
 TQFolder.cxx:2437
 TQFolder.cxx:2438
 TQFolder.cxx:2439
 TQFolder.cxx:2440
 TQFolder.cxx:2441
 TQFolder.cxx:2442
 TQFolder.cxx:2443
 TQFolder.cxx:2444
 TQFolder.cxx:2445
 TQFolder.cxx:2446
 TQFolder.cxx:2447
 TQFolder.cxx:2448
 TQFolder.cxx:2449
 TQFolder.cxx:2450
 TQFolder.cxx:2451
 TQFolder.cxx:2452
 TQFolder.cxx:2453
 TQFolder.cxx:2454
 TQFolder.cxx:2455
 TQFolder.cxx:2456
 TQFolder.cxx:2457
 TQFolder.cxx:2458
 TQFolder.cxx:2459
 TQFolder.cxx:2460
 TQFolder.cxx:2461
 TQFolder.cxx:2462
 TQFolder.cxx:2463
 TQFolder.cxx:2464
 TQFolder.cxx:2465
 TQFolder.cxx:2466
 TQFolder.cxx:2467
 TQFolder.cxx:2468
 TQFolder.cxx:2469
 TQFolder.cxx:2470
 TQFolder.cxx:2471
 TQFolder.cxx:2472
 TQFolder.cxx:2473
 TQFolder.cxx:2474
 TQFolder.cxx:2475
 TQFolder.cxx:2476
 TQFolder.cxx:2477
 TQFolder.cxx:2478
 TQFolder.cxx:2479
 TQFolder.cxx:2480
 TQFolder.cxx:2481
 TQFolder.cxx:2482
 TQFolder.cxx:2483
 TQFolder.cxx:2484
 TQFolder.cxx:2485
 TQFolder.cxx:2486
 TQFolder.cxx:2487
 TQFolder.cxx:2488
 TQFolder.cxx:2489
 TQFolder.cxx:2490
 TQFolder.cxx:2491
 TQFolder.cxx:2492
 TQFolder.cxx:2493
 TQFolder.cxx:2494
 TQFolder.cxx:2495
 TQFolder.cxx:2496
 TQFolder.cxx:2497
 TQFolder.cxx:2498
 TQFolder.cxx:2499
 TQFolder.cxx:2500
 TQFolder.cxx:2501
 TQFolder.cxx:2502
 TQFolder.cxx:2503
 TQFolder.cxx:2504
 TQFolder.cxx:2505
 TQFolder.cxx:2506
 TQFolder.cxx:2507
 TQFolder.cxx:2508
 TQFolder.cxx:2509
 TQFolder.cxx:2510
 TQFolder.cxx:2511
 TQFolder.cxx:2512
 TQFolder.cxx:2513
 TQFolder.cxx:2514
 TQFolder.cxx:2515
 TQFolder.cxx:2516
 TQFolder.cxx:2517
 TQFolder.cxx:2518
 TQFolder.cxx:2519
 TQFolder.cxx:2520
 TQFolder.cxx:2521
 TQFolder.cxx:2522
 TQFolder.cxx:2523
 TQFolder.cxx:2524
 TQFolder.cxx:2525
 TQFolder.cxx:2526
 TQFolder.cxx:2527
 TQFolder.cxx:2528
 TQFolder.cxx:2529
 TQFolder.cxx:2530
 TQFolder.cxx:2531
 TQFolder.cxx:2532
 TQFolder.cxx:2533
 TQFolder.cxx:2534
 TQFolder.cxx:2535
 TQFolder.cxx:2536
 TQFolder.cxx:2537
 TQFolder.cxx:2538
 TQFolder.cxx:2539
 TQFolder.cxx:2540
 TQFolder.cxx:2541
 TQFolder.cxx:2542
 TQFolder.cxx:2543
 TQFolder.cxx:2544
 TQFolder.cxx:2545
 TQFolder.cxx:2546
 TQFolder.cxx:2547
 TQFolder.cxx:2548
 TQFolder.cxx:2549
 TQFolder.cxx:2550
 TQFolder.cxx:2551
 TQFolder.cxx:2552
 TQFolder.cxx:2553
 TQFolder.cxx:2554
 TQFolder.cxx:2555
 TQFolder.cxx:2556
 TQFolder.cxx:2557
 TQFolder.cxx:2558
 TQFolder.cxx:2559
 TQFolder.cxx:2560
 TQFolder.cxx:2561
 TQFolder.cxx:2562
 TQFolder.cxx:2563
 TQFolder.cxx:2564
 TQFolder.cxx:2565
 TQFolder.cxx:2566
 TQFolder.cxx:2567
 TQFolder.cxx:2568
 TQFolder.cxx:2569
 TQFolder.cxx:2570
 TQFolder.cxx:2571
 TQFolder.cxx:2572
 TQFolder.cxx:2573
 TQFolder.cxx:2574
 TQFolder.cxx:2575
 TQFolder.cxx:2576
 TQFolder.cxx:2577
 TQFolder.cxx:2578
 TQFolder.cxx:2579
 TQFolder.cxx:2580
 TQFolder.cxx:2581
 TQFolder.cxx:2582
 TQFolder.cxx:2583
 TQFolder.cxx:2584
 TQFolder.cxx:2585
 TQFolder.cxx:2586
 TQFolder.cxx:2587
 TQFolder.cxx:2588
 TQFolder.cxx:2589
 TQFolder.cxx:2590
 TQFolder.cxx:2591
 TQFolder.cxx:2592
 TQFolder.cxx:2593
 TQFolder.cxx:2594
 TQFolder.cxx:2595
 TQFolder.cxx:2596
 TQFolder.cxx:2597
 TQFolder.cxx:2598
 TQFolder.cxx:2599
 TQFolder.cxx:2600
 TQFolder.cxx:2601
 TQFolder.cxx:2602
 TQFolder.cxx:2603
 TQFolder.cxx:2604
 TQFolder.cxx:2605
 TQFolder.cxx:2606
 TQFolder.cxx:2607
 TQFolder.cxx:2608
 TQFolder.cxx:2609
 TQFolder.cxx:2610
 TQFolder.cxx:2611
 TQFolder.cxx:2612
 TQFolder.cxx:2613
 TQFolder.cxx:2614
 TQFolder.cxx:2615
 TQFolder.cxx:2616
 TQFolder.cxx:2617
 TQFolder.cxx:2618
 TQFolder.cxx:2619
 TQFolder.cxx:2620
 TQFolder.cxx:2621
 TQFolder.cxx:2622
 TQFolder.cxx:2623
 TQFolder.cxx:2624
 TQFolder.cxx:2625
 TQFolder.cxx:2626
 TQFolder.cxx:2627
 TQFolder.cxx:2628
 TQFolder.cxx:2629
 TQFolder.cxx:2630
 TQFolder.cxx:2631
 TQFolder.cxx:2632
 TQFolder.cxx:2633
 TQFolder.cxx:2634
 TQFolder.cxx:2635
 TQFolder.cxx:2636
 TQFolder.cxx:2637
 TQFolder.cxx:2638
 TQFolder.cxx:2639
 TQFolder.cxx:2640
 TQFolder.cxx:2641
 TQFolder.cxx:2642
 TQFolder.cxx:2643
 TQFolder.cxx:2644
 TQFolder.cxx:2645
 TQFolder.cxx:2646
 TQFolder.cxx:2647
 TQFolder.cxx:2648
 TQFolder.cxx:2649
 TQFolder.cxx:2650
 TQFolder.cxx:2651
 TQFolder.cxx:2652
 TQFolder.cxx:2653
 TQFolder.cxx:2654
 TQFolder.cxx:2655
 TQFolder.cxx:2656
 TQFolder.cxx:2657
 TQFolder.cxx:2658
 TQFolder.cxx:2659
 TQFolder.cxx:2660
 TQFolder.cxx:2661
 TQFolder.cxx:2662
 TQFolder.cxx:2663
 TQFolder.cxx:2664
 TQFolder.cxx:2665
 TQFolder.cxx:2666
 TQFolder.cxx:2667
 TQFolder.cxx:2668
 TQFolder.cxx:2669
 TQFolder.cxx:2670
 TQFolder.cxx:2671
 TQFolder.cxx:2672
 TQFolder.cxx:2673
 TQFolder.cxx:2674
 TQFolder.cxx:2675
 TQFolder.cxx:2676
 TQFolder.cxx:2677
 TQFolder.cxx:2678
 TQFolder.cxx:2679
 TQFolder.cxx:2680
 TQFolder.cxx:2681
 TQFolder.cxx:2682
 TQFolder.cxx:2683
 TQFolder.cxx:2684
 TQFolder.cxx:2685
 TQFolder.cxx:2686
 TQFolder.cxx:2687
 TQFolder.cxx:2688
 TQFolder.cxx:2689
 TQFolder.cxx:2690
 TQFolder.cxx:2691
 TQFolder.cxx:2692
 TQFolder.cxx:2693
 TQFolder.cxx:2694
 TQFolder.cxx:2695
 TQFolder.cxx:2696
 TQFolder.cxx:2697
 TQFolder.cxx:2698
 TQFolder.cxx:2699
 TQFolder.cxx:2700
 TQFolder.cxx:2701
 TQFolder.cxx:2702
 TQFolder.cxx:2703
 TQFolder.cxx:2704
 TQFolder.cxx:2705
 TQFolder.cxx:2706
 TQFolder.cxx:2707
 TQFolder.cxx:2708
 TQFolder.cxx:2709
 TQFolder.cxx:2710
 TQFolder.cxx:2711
 TQFolder.cxx:2712
 TQFolder.cxx:2713
 TQFolder.cxx:2714
 TQFolder.cxx:2715
 TQFolder.cxx:2716
 TQFolder.cxx:2717
 TQFolder.cxx:2718
 TQFolder.cxx:2719
 TQFolder.cxx:2720
 TQFolder.cxx:2721
 TQFolder.cxx:2722
 TQFolder.cxx:2723
 TQFolder.cxx:2724
 TQFolder.cxx:2725
 TQFolder.cxx:2726
 TQFolder.cxx:2727
 TQFolder.cxx:2728
 TQFolder.cxx:2729
 TQFolder.cxx:2730
 TQFolder.cxx:2731
 TQFolder.cxx:2732
 TQFolder.cxx:2733
 TQFolder.cxx:2734
 TQFolder.cxx:2735
 TQFolder.cxx:2736
 TQFolder.cxx:2737
 TQFolder.cxx:2738
 TQFolder.cxx:2739
 TQFolder.cxx:2740
 TQFolder.cxx:2741
 TQFolder.cxx:2742
 TQFolder.cxx:2743
 TQFolder.cxx:2744
 TQFolder.cxx:2745
 TQFolder.cxx:2746
 TQFolder.cxx:2747
 TQFolder.cxx:2748
 TQFolder.cxx:2749
 TQFolder.cxx:2750
 TQFolder.cxx:2751
 TQFolder.cxx:2752
 TQFolder.cxx:2753
 TQFolder.cxx:2754
 TQFolder.cxx:2755
 TQFolder.cxx:2756
 TQFolder.cxx:2757
 TQFolder.cxx:2758
 TQFolder.cxx:2759
 TQFolder.cxx:2760
 TQFolder.cxx:2761
 TQFolder.cxx:2762
 TQFolder.cxx:2763
 TQFolder.cxx:2764
 TQFolder.cxx:2765
 TQFolder.cxx:2766
 TQFolder.cxx:2767
 TQFolder.cxx:2768
 TQFolder.cxx:2769
 TQFolder.cxx:2770
 TQFolder.cxx:2771
 TQFolder.cxx:2772
 TQFolder.cxx:2773
 TQFolder.cxx:2774
 TQFolder.cxx:2775
 TQFolder.cxx:2776
 TQFolder.cxx:2777
 TQFolder.cxx:2778
 TQFolder.cxx:2779
 TQFolder.cxx:2780
 TQFolder.cxx:2781
 TQFolder.cxx:2782
 TQFolder.cxx:2783
 TQFolder.cxx:2784
 TQFolder.cxx:2785
 TQFolder.cxx:2786
 TQFolder.cxx:2787
 TQFolder.cxx:2788
 TQFolder.cxx:2789
 TQFolder.cxx:2790
 TQFolder.cxx:2791
 TQFolder.cxx:2792
 TQFolder.cxx:2793
 TQFolder.cxx:2794
 TQFolder.cxx:2795
 TQFolder.cxx:2796
 TQFolder.cxx:2797
 TQFolder.cxx:2798
 TQFolder.cxx:2799
 TQFolder.cxx:2800
 TQFolder.cxx:2801
 TQFolder.cxx:2802
 TQFolder.cxx:2803
 TQFolder.cxx:2804
 TQFolder.cxx:2805
 TQFolder.cxx:2806
 TQFolder.cxx:2807
 TQFolder.cxx:2808
 TQFolder.cxx:2809
 TQFolder.cxx:2810
 TQFolder.cxx:2811
 TQFolder.cxx:2812
 TQFolder.cxx:2813
 TQFolder.cxx:2814
 TQFolder.cxx:2815
 TQFolder.cxx:2816
 TQFolder.cxx:2817
 TQFolder.cxx:2818
 TQFolder.cxx:2819
 TQFolder.cxx:2820
 TQFolder.cxx:2821
 TQFolder.cxx:2822
 TQFolder.cxx:2823
 TQFolder.cxx:2824
 TQFolder.cxx:2825
 TQFolder.cxx:2826
 TQFolder.cxx:2827
 TQFolder.cxx:2828
 TQFolder.cxx:2829
 TQFolder.cxx:2830
 TQFolder.cxx:2831
 TQFolder.cxx:2832
 TQFolder.cxx:2833
 TQFolder.cxx:2834
 TQFolder.cxx:2835
 TQFolder.cxx:2836
 TQFolder.cxx:2837
 TQFolder.cxx:2838
 TQFolder.cxx:2839
 TQFolder.cxx:2840
 TQFolder.cxx:2841
 TQFolder.cxx:2842
 TQFolder.cxx:2843
 TQFolder.cxx:2844
 TQFolder.cxx:2845
 TQFolder.cxx:2846
 TQFolder.cxx:2847
 TQFolder.cxx:2848
 TQFolder.cxx:2849
 TQFolder.cxx:2850
 TQFolder.cxx:2851
 TQFolder.cxx:2852
 TQFolder.cxx:2853
 TQFolder.cxx:2854
 TQFolder.cxx:2855
 TQFolder.cxx:2856
 TQFolder.cxx:2857
 TQFolder.cxx:2858
 TQFolder.cxx:2859
 TQFolder.cxx:2860
 TQFolder.cxx:2861
 TQFolder.cxx:2862
 TQFolder.cxx:2863
 TQFolder.cxx:2864
 TQFolder.cxx:2865
 TQFolder.cxx:2866
 TQFolder.cxx:2867
 TQFolder.cxx:2868
 TQFolder.cxx:2869
 TQFolder.cxx:2870
 TQFolder.cxx:2871
 TQFolder.cxx:2872
 TQFolder.cxx:2873
 TQFolder.cxx:2874
 TQFolder.cxx:2875
 TQFolder.cxx:2876
 TQFolder.cxx:2877
 TQFolder.cxx:2878
 TQFolder.cxx:2879
 TQFolder.cxx:2880
 TQFolder.cxx:2881
 TQFolder.cxx:2882
 TQFolder.cxx:2883
 TQFolder.cxx:2884
 TQFolder.cxx:2885
 TQFolder.cxx:2886
 TQFolder.cxx:2887
 TQFolder.cxx:2888
 TQFolder.cxx:2889
 TQFolder.cxx:2890
 TQFolder.cxx:2891
 TQFolder.cxx:2892
 TQFolder.cxx:2893
 TQFolder.cxx:2894
 TQFolder.cxx:2895
 TQFolder.cxx:2896
 TQFolder.cxx:2897
 TQFolder.cxx:2898
 TQFolder.cxx:2899
 TQFolder.cxx:2900
 TQFolder.cxx:2901
 TQFolder.cxx:2902
 TQFolder.cxx:2903
 TQFolder.cxx:2904
 TQFolder.cxx:2905
 TQFolder.cxx:2906
 TQFolder.cxx:2907
 TQFolder.cxx:2908
 TQFolder.cxx:2909
 TQFolder.cxx:2910
 TQFolder.cxx:2911
 TQFolder.cxx:2912
 TQFolder.cxx:2913
 TQFolder.cxx:2914
 TQFolder.cxx:2915
 TQFolder.cxx:2916
 TQFolder.cxx:2917
 TQFolder.cxx:2918
 TQFolder.cxx:2919
 TQFolder.cxx:2920
 TQFolder.cxx:2921
 TQFolder.cxx:2922
 TQFolder.cxx:2923
 TQFolder.cxx:2924
 TQFolder.cxx:2925
 TQFolder.cxx:2926
 TQFolder.cxx:2927
 TQFolder.cxx:2928
 TQFolder.cxx:2929
 TQFolder.cxx:2930
 TQFolder.cxx:2931
 TQFolder.cxx:2932
 TQFolder.cxx:2933
 TQFolder.cxx:2934
 TQFolder.cxx:2935
 TQFolder.cxx:2936
 TQFolder.cxx:2937
 TQFolder.cxx:2938
 TQFolder.cxx:2939
 TQFolder.cxx:2940
 TQFolder.cxx:2941
 TQFolder.cxx:2942
 TQFolder.cxx:2943
 TQFolder.cxx:2944
 TQFolder.cxx:2945
 TQFolder.cxx:2946
 TQFolder.cxx:2947
 TQFolder.cxx:2948
 TQFolder.cxx:2949
 TQFolder.cxx:2950
 TQFolder.cxx:2951
 TQFolder.cxx:2952
 TQFolder.cxx:2953
 TQFolder.cxx:2954
 TQFolder.cxx:2955
 TQFolder.cxx:2956
 TQFolder.cxx:2957
 TQFolder.cxx:2958
 TQFolder.cxx:2959
 TQFolder.cxx:2960
 TQFolder.cxx:2961
 TQFolder.cxx:2962
 TQFolder.cxx:2963
 TQFolder.cxx:2964
 TQFolder.cxx:2965
 TQFolder.cxx:2966
 TQFolder.cxx:2967
 TQFolder.cxx:2968
 TQFolder.cxx:2969
 TQFolder.cxx:2970
 TQFolder.cxx:2971
 TQFolder.cxx:2972
 TQFolder.cxx:2973
 TQFolder.cxx:2974
 TQFolder.cxx:2975
 TQFolder.cxx:2976
 TQFolder.cxx:2977
 TQFolder.cxx:2978
 TQFolder.cxx:2979
 TQFolder.cxx:2980
 TQFolder.cxx:2981
 TQFolder.cxx:2982
 TQFolder.cxx:2983
 TQFolder.cxx:2984
 TQFolder.cxx:2985
 TQFolder.cxx:2986
 TQFolder.cxx:2987
 TQFolder.cxx:2988
 TQFolder.cxx:2989
 TQFolder.cxx:2990
 TQFolder.cxx:2991
 TQFolder.cxx:2992
 TQFolder.cxx:2993
 TQFolder.cxx:2994
 TQFolder.cxx:2995
 TQFolder.cxx:2996
 TQFolder.cxx:2997
 TQFolder.cxx:2998
 TQFolder.cxx:2999
 TQFolder.cxx:3000
 TQFolder.cxx:3001
 TQFolder.cxx:3002
 TQFolder.cxx:3003
 TQFolder.cxx:3004
 TQFolder.cxx:3005
 TQFolder.cxx:3006
 TQFolder.cxx:3007
 TQFolder.cxx:3008
 TQFolder.cxx:3009
 TQFolder.cxx:3010
 TQFolder.cxx:3011
 TQFolder.cxx:3012
 TQFolder.cxx:3013
 TQFolder.cxx:3014
 TQFolder.cxx:3015
 TQFolder.cxx:3016
 TQFolder.cxx:3017
 TQFolder.cxx:3018
 TQFolder.cxx:3019
 TQFolder.cxx:3020
 TQFolder.cxx:3021
 TQFolder.cxx:3022
 TQFolder.cxx:3023
 TQFolder.cxx:3024
 TQFolder.cxx:3025
 TQFolder.cxx:3026
 TQFolder.cxx:3027
 TQFolder.cxx:3028
 TQFolder.cxx:3029
 TQFolder.cxx:3030
 TQFolder.cxx:3031
 TQFolder.cxx:3032
 TQFolder.cxx:3033
 TQFolder.cxx:3034
 TQFolder.cxx:3035
 TQFolder.cxx:3036
 TQFolder.cxx:3037
 TQFolder.cxx:3038
 TQFolder.cxx:3039
 TQFolder.cxx:3040
 TQFolder.cxx:3041
 TQFolder.cxx:3042
 TQFolder.cxx:3043
 TQFolder.cxx:3044
 TQFolder.cxx:3045
 TQFolder.cxx:3046
 TQFolder.cxx:3047
 TQFolder.cxx:3048
 TQFolder.cxx:3049
 TQFolder.cxx:3050
 TQFolder.cxx:3051
 TQFolder.cxx:3052
 TQFolder.cxx:3053
 TQFolder.cxx:3054
 TQFolder.cxx:3055
 TQFolder.cxx:3056
 TQFolder.cxx:3057
 TQFolder.cxx:3058
 TQFolder.cxx:3059
 TQFolder.cxx:3060
 TQFolder.cxx:3061
 TQFolder.cxx:3062
 TQFolder.cxx:3063
 TQFolder.cxx:3064
 TQFolder.cxx:3065
 TQFolder.cxx:3066
 TQFolder.cxx:3067
 TQFolder.cxx:3068
 TQFolder.cxx:3069
 TQFolder.cxx:3070
 TQFolder.cxx:3071
 TQFolder.cxx:3072
 TQFolder.cxx:3073
 TQFolder.cxx:3074
 TQFolder.cxx:3075
 TQFolder.cxx:3076
 TQFolder.cxx:3077
 TQFolder.cxx:3078
 TQFolder.cxx:3079
 TQFolder.cxx:3080
 TQFolder.cxx:3081
 TQFolder.cxx:3082
 TQFolder.cxx:3083
 TQFolder.cxx:3084
 TQFolder.cxx:3085
 TQFolder.cxx:3086
 TQFolder.cxx:3087
 TQFolder.cxx:3088
 TQFolder.cxx:3089
 TQFolder.cxx:3090
 TQFolder.cxx:3091
 TQFolder.cxx:3092
 TQFolder.cxx:3093
 TQFolder.cxx:3094
 TQFolder.cxx:3095
 TQFolder.cxx:3096
 TQFolder.cxx:3097
 TQFolder.cxx:3098
 TQFolder.cxx:3099
 TQFolder.cxx:3100
 TQFolder.cxx:3101
 TQFolder.cxx:3102
 TQFolder.cxx:3103
 TQFolder.cxx:3104
 TQFolder.cxx:3105
 TQFolder.cxx:3106
 TQFolder.cxx:3107
 TQFolder.cxx:3108
 TQFolder.cxx:3109
 TQFolder.cxx:3110
 TQFolder.cxx:3111
 TQFolder.cxx:3112
 TQFolder.cxx:3113
 TQFolder.cxx:3114
 TQFolder.cxx:3115
 TQFolder.cxx:3116
 TQFolder.cxx:3117
 TQFolder.cxx:3118
 TQFolder.cxx:3119
 TQFolder.cxx:3120
 TQFolder.cxx:3121
 TQFolder.cxx:3122
 TQFolder.cxx:3123
 TQFolder.cxx:3124
 TQFolder.cxx:3125
 TQFolder.cxx:3126
 TQFolder.cxx:3127
 TQFolder.cxx:3128
 TQFolder.cxx:3129
 TQFolder.cxx:3130
 TQFolder.cxx:3131
 TQFolder.cxx:3132
 TQFolder.cxx:3133
 TQFolder.cxx:3134
 TQFolder.cxx:3135
 TQFolder.cxx:3136
 TQFolder.cxx:3137
 TQFolder.cxx:3138
 TQFolder.cxx:3139
 TQFolder.cxx:3140
 TQFolder.cxx:3141
 TQFolder.cxx:3142
 TQFolder.cxx:3143
 TQFolder.cxx:3144
 TQFolder.cxx:3145
 TQFolder.cxx:3146
 TQFolder.cxx:3147
 TQFolder.cxx:3148
 TQFolder.cxx:3149
 TQFolder.cxx:3150
 TQFolder.cxx:3151
 TQFolder.cxx:3152
 TQFolder.cxx:3153
 TQFolder.cxx:3154
 TQFolder.cxx:3155
 TQFolder.cxx:3156
 TQFolder.cxx:3157
 TQFolder.cxx:3158
 TQFolder.cxx:3159
 TQFolder.cxx:3160
 TQFolder.cxx:3161
 TQFolder.cxx:3162
 TQFolder.cxx:3163
 TQFolder.cxx:3164
 TQFolder.cxx:3165
 TQFolder.cxx:3166
 TQFolder.cxx:3167
 TQFolder.cxx:3168
 TQFolder.cxx:3169
 TQFolder.cxx:3170
 TQFolder.cxx:3171
 TQFolder.cxx:3172
 TQFolder.cxx:3173
 TQFolder.cxx:3174
 TQFolder.cxx:3175
 TQFolder.cxx:3176
 TQFolder.cxx:3177
 TQFolder.cxx:3178
 TQFolder.cxx:3179
 TQFolder.cxx:3180
 TQFolder.cxx:3181
 TQFolder.cxx:3182
 TQFolder.cxx:3183
 TQFolder.cxx:3184
 TQFolder.cxx:3185
 TQFolder.cxx:3186
 TQFolder.cxx:3187
 TQFolder.cxx:3188
 TQFolder.cxx:3189
 TQFolder.cxx:3190
 TQFolder.cxx:3191
 TQFolder.cxx:3192
 TQFolder.cxx:3193
 TQFolder.cxx:3194
 TQFolder.cxx:3195
 TQFolder.cxx:3196
 TQFolder.cxx:3197
 TQFolder.cxx:3198
 TQFolder.cxx:3199
 TQFolder.cxx:3200
 TQFolder.cxx:3201
 TQFolder.cxx:3202
 TQFolder.cxx:3203
 TQFolder.cxx:3204
 TQFolder.cxx:3205
 TQFolder.cxx:3206
 TQFolder.cxx:3207
 TQFolder.cxx:3208
 TQFolder.cxx:3209
 TQFolder.cxx:3210
 TQFolder.cxx:3211
 TQFolder.cxx:3212
 TQFolder.cxx:3213
 TQFolder.cxx:3214
 TQFolder.cxx:3215
 TQFolder.cxx:3216
 TQFolder.cxx:3217
 TQFolder.cxx:3218
 TQFolder.cxx:3219
 TQFolder.cxx:3220
 TQFolder.cxx:3221
 TQFolder.cxx:3222
 TQFolder.cxx:3223
 TQFolder.cxx:3224
 TQFolder.cxx:3225
 TQFolder.cxx:3226
 TQFolder.cxx:3227
 TQFolder.cxx:3228
 TQFolder.cxx:3229
 TQFolder.cxx:3230
 TQFolder.cxx:3231
 TQFolder.cxx:3232
 TQFolder.cxx:3233
 TQFolder.cxx:3234
 TQFolder.cxx:3235
 TQFolder.cxx:3236
 TQFolder.cxx:3237
 TQFolder.cxx:3238
 TQFolder.cxx:3239
 TQFolder.cxx:3240
 TQFolder.cxx:3241
 TQFolder.cxx:3242
 TQFolder.cxx:3243
 TQFolder.cxx:3244
 TQFolder.cxx:3245
 TQFolder.cxx:3246
 TQFolder.cxx:3247
 TQFolder.cxx:3248
 TQFolder.cxx:3249
 TQFolder.cxx:3250
 TQFolder.cxx:3251
 TQFolder.cxx:3252
 TQFolder.cxx:3253
 TQFolder.cxx:3254
 TQFolder.cxx:3255
 TQFolder.cxx:3256
 TQFolder.cxx:3257
 TQFolder.cxx:3258
 TQFolder.cxx:3259
 TQFolder.cxx:3260
 TQFolder.cxx:3261
 TQFolder.cxx:3262
 TQFolder.cxx:3263
 TQFolder.cxx:3264
 TQFolder.cxx:3265
 TQFolder.cxx:3266
 TQFolder.cxx:3267
 TQFolder.cxx:3268
 TQFolder.cxx:3269
 TQFolder.cxx:3270
 TQFolder.cxx:3271
 TQFolder.cxx:3272
 TQFolder.cxx:3273
 TQFolder.cxx:3274
 TQFolder.cxx:3275
 TQFolder.cxx:3276
 TQFolder.cxx:3277
 TQFolder.cxx:3278
 TQFolder.cxx:3279
 TQFolder.cxx:3280
 TQFolder.cxx:3281
 TQFolder.cxx:3282
 TQFolder.cxx:3283
 TQFolder.cxx:3284
 TQFolder.cxx:3285
 TQFolder.cxx:3286
 TQFolder.cxx:3287
 TQFolder.cxx:3288
 TQFolder.cxx:3289
 TQFolder.cxx:3290
 TQFolder.cxx:3291
 TQFolder.cxx:3292
 TQFolder.cxx:3293
 TQFolder.cxx:3294
 TQFolder.cxx:3295
 TQFolder.cxx:3296
 TQFolder.cxx:3297
 TQFolder.cxx:3298
 TQFolder.cxx:3299
 TQFolder.cxx:3300
 TQFolder.cxx:3301
 TQFolder.cxx:3302
 TQFolder.cxx:3303
 TQFolder.cxx:3304
 TQFolder.cxx:3305
 TQFolder.cxx:3306
 TQFolder.cxx:3307
 TQFolder.cxx:3308
 TQFolder.cxx:3309
 TQFolder.cxx:3310
 TQFolder.cxx:3311
 TQFolder.cxx:3312
 TQFolder.cxx:3313
 TQFolder.cxx:3314
 TQFolder.cxx:3315
 TQFolder.cxx:3316
 TQFolder.cxx:3317
 TQFolder.cxx:3318
 TQFolder.cxx:3319
 TQFolder.cxx:3320
 TQFolder.cxx:3321
 TQFolder.cxx:3322
 TQFolder.cxx:3323
 TQFolder.cxx:3324
 TQFolder.cxx:3325
 TQFolder.cxx:3326
 TQFolder.cxx:3327
 TQFolder.cxx:3328
 TQFolder.cxx:3329
 TQFolder.cxx:3330
 TQFolder.cxx:3331
 TQFolder.cxx:3332
 TQFolder.cxx:3333
 TQFolder.cxx:3334
 TQFolder.cxx:3335
 TQFolder.cxx:3336
 TQFolder.cxx:3337
 TQFolder.cxx:3338
 TQFolder.cxx:3339
 TQFolder.cxx:3340
 TQFolder.cxx:3341
 TQFolder.cxx:3342
 TQFolder.cxx:3343
 TQFolder.cxx:3344
 TQFolder.cxx:3345
 TQFolder.cxx:3346
 TQFolder.cxx:3347
 TQFolder.cxx:3348
 TQFolder.cxx:3349
 TQFolder.cxx:3350
 TQFolder.cxx:3351
 TQFolder.cxx:3352
 TQFolder.cxx:3353
 TQFolder.cxx:3354
 TQFolder.cxx:3355
 TQFolder.cxx:3356
 TQFolder.cxx:3357
 TQFolder.cxx:3358
 TQFolder.cxx:3359
 TQFolder.cxx:3360
 TQFolder.cxx:3361
 TQFolder.cxx:3362
 TQFolder.cxx:3363
 TQFolder.cxx:3364
 TQFolder.cxx:3365
 TQFolder.cxx:3366
 TQFolder.cxx:3367
 TQFolder.cxx:3368
 TQFolder.cxx:3369
 TQFolder.cxx:3370
 TQFolder.cxx:3371
 TQFolder.cxx:3372
 TQFolder.cxx:3373
 TQFolder.cxx:3374
 TQFolder.cxx:3375
 TQFolder.cxx:3376
 TQFolder.cxx:3377
 TQFolder.cxx:3378
 TQFolder.cxx:3379
 TQFolder.cxx:3380
 TQFolder.cxx:3381
 TQFolder.cxx:3382
 TQFolder.cxx:3383
 TQFolder.cxx:3384
 TQFolder.cxx:3385
 TQFolder.cxx:3386
 TQFolder.cxx:3387
 TQFolder.cxx:3388
 TQFolder.cxx:3389
 TQFolder.cxx:3390
 TQFolder.cxx:3391
 TQFolder.cxx:3392
 TQFolder.cxx:3393
 TQFolder.cxx:3394
 TQFolder.cxx:3395
 TQFolder.cxx:3396
 TQFolder.cxx:3397
 TQFolder.cxx:3398
 TQFolder.cxx:3399
 TQFolder.cxx:3400
 TQFolder.cxx:3401
 TQFolder.cxx:3402
 TQFolder.cxx:3403
 TQFolder.cxx:3404
 TQFolder.cxx:3405
 TQFolder.cxx:3406
 TQFolder.cxx:3407
 TQFolder.cxx:3408
 TQFolder.cxx:3409
 TQFolder.cxx:3410
 TQFolder.cxx:3411
 TQFolder.cxx:3412
 TQFolder.cxx:3413
 TQFolder.cxx:3414
 TQFolder.cxx:3415
 TQFolder.cxx:3416
 TQFolder.cxx:3417
 TQFolder.cxx:3418
 TQFolder.cxx:3419
 TQFolder.cxx:3420
 TQFolder.cxx:3421
 TQFolder.cxx:3422
 TQFolder.cxx:3423
 TQFolder.cxx:3424
 TQFolder.cxx:3425
 TQFolder.cxx:3426
 TQFolder.cxx:3427
 TQFolder.cxx:3428
 TQFolder.cxx:3429
 TQFolder.cxx:3430
 TQFolder.cxx:3431
 TQFolder.cxx:3432
 TQFolder.cxx:3433
 TQFolder.cxx:3434
 TQFolder.cxx:3435
 TQFolder.cxx:3436
 TQFolder.cxx:3437
 TQFolder.cxx:3438
 TQFolder.cxx:3439
 TQFolder.cxx:3440
 TQFolder.cxx:3441
 TQFolder.cxx:3442
 TQFolder.cxx:3443
 TQFolder.cxx:3444
 TQFolder.cxx:3445
 TQFolder.cxx:3446
 TQFolder.cxx:3447
 TQFolder.cxx:3448
 TQFolder.cxx:3449
 TQFolder.cxx:3450
 TQFolder.cxx:3451
 TQFolder.cxx:3452
 TQFolder.cxx:3453
 TQFolder.cxx:3454
 TQFolder.cxx:3455
 TQFolder.cxx:3456
 TQFolder.cxx:3457
 TQFolder.cxx:3458
 TQFolder.cxx:3459
 TQFolder.cxx:3460
 TQFolder.cxx:3461
 TQFolder.cxx:3462
 TQFolder.cxx:3463
 TQFolder.cxx:3464
 TQFolder.cxx:3465
 TQFolder.cxx:3466
 TQFolder.cxx:3467
 TQFolder.cxx:3468
 TQFolder.cxx:3469
 TQFolder.cxx:3470
 TQFolder.cxx:3471
 TQFolder.cxx:3472
 TQFolder.cxx:3473
 TQFolder.cxx:3474
 TQFolder.cxx:3475
 TQFolder.cxx:3476
 TQFolder.cxx:3477
 TQFolder.cxx:3478
 TQFolder.cxx:3479
 TQFolder.cxx:3480
 TQFolder.cxx:3481
 TQFolder.cxx:3482
 TQFolder.cxx:3483
 TQFolder.cxx:3484
 TQFolder.cxx:3485
 TQFolder.cxx:3486
 TQFolder.cxx:3487
 TQFolder.cxx:3488
 TQFolder.cxx:3489
 TQFolder.cxx:3490
 TQFolder.cxx:3491
 TQFolder.cxx:3492
 TQFolder.cxx:3493
 TQFolder.cxx:3494
 TQFolder.cxx:3495
 TQFolder.cxx:3496
 TQFolder.cxx:3497
 TQFolder.cxx:3498
 TQFolder.cxx:3499
 TQFolder.cxx:3500
 TQFolder.cxx:3501
 TQFolder.cxx:3502
 TQFolder.cxx:3503
 TQFolder.cxx:3504
 TQFolder.cxx:3505
 TQFolder.cxx:3506
 TQFolder.cxx:3507
 TQFolder.cxx:3508
 TQFolder.cxx:3509
 TQFolder.cxx:3510
 TQFolder.cxx:3511
 TQFolder.cxx:3512
 TQFolder.cxx:3513
 TQFolder.cxx:3514
 TQFolder.cxx:3515
 TQFolder.cxx:3516
 TQFolder.cxx:3517
 TQFolder.cxx:3518
 TQFolder.cxx:3519
 TQFolder.cxx:3520
 TQFolder.cxx:3521
 TQFolder.cxx:3522
 TQFolder.cxx:3523
 TQFolder.cxx:3524
 TQFolder.cxx:3525
 TQFolder.cxx:3526
 TQFolder.cxx:3527
 TQFolder.cxx:3528
 TQFolder.cxx:3529
 TQFolder.cxx:3530
 TQFolder.cxx:3531
 TQFolder.cxx:3532
 TQFolder.cxx:3533
 TQFolder.cxx:3534
 TQFolder.cxx:3535
 TQFolder.cxx:3536
 TQFolder.cxx:3537
 TQFolder.cxx:3538
 TQFolder.cxx:3539
 TQFolder.cxx:3540
 TQFolder.cxx:3541
 TQFolder.cxx:3542
 TQFolder.cxx:3543
 TQFolder.cxx:3544
 TQFolder.cxx:3545
 TQFolder.cxx:3546
 TQFolder.cxx:3547
 TQFolder.cxx:3548
 TQFolder.cxx:3549
 TQFolder.cxx:3550
 TQFolder.cxx:3551
 TQFolder.cxx:3552
 TQFolder.cxx:3553
 TQFolder.cxx:3554
 TQFolder.cxx:3555
 TQFolder.cxx:3556
 TQFolder.cxx:3557
 TQFolder.cxx:3558
 TQFolder.cxx:3559
 TQFolder.cxx:3560
 TQFolder.cxx:3561
 TQFolder.cxx:3562
 TQFolder.cxx:3563
 TQFolder.cxx:3564
 TQFolder.cxx:3565
 TQFolder.cxx:3566
 TQFolder.cxx:3567
 TQFolder.cxx:3568
 TQFolder.cxx:3569
 TQFolder.cxx:3570
 TQFolder.cxx:3571
 TQFolder.cxx:3572
 TQFolder.cxx:3573
 TQFolder.cxx:3574
 TQFolder.cxx:3575
 TQFolder.cxx:3576
 TQFolder.cxx:3577
 TQFolder.cxx:3578
 TQFolder.cxx:3579
 TQFolder.cxx:3580
 TQFolder.cxx:3581
 TQFolder.cxx:3582
 TQFolder.cxx:3583
 TQFolder.cxx:3584
 TQFolder.cxx:3585
 TQFolder.cxx:3586
 TQFolder.cxx:3587
 TQFolder.cxx:3588
 TQFolder.cxx:3589
 TQFolder.cxx:3590
 TQFolder.cxx:3591
 TQFolder.cxx:3592
 TQFolder.cxx:3593
 TQFolder.cxx:3594
 TQFolder.cxx:3595
 TQFolder.cxx:3596
 TQFolder.cxx:3597
 TQFolder.cxx:3598
 TQFolder.cxx:3599
 TQFolder.cxx:3600
 TQFolder.cxx:3601
 TQFolder.cxx:3602
 TQFolder.cxx:3603
 TQFolder.cxx:3604
 TQFolder.cxx:3605
 TQFolder.cxx:3606
 TQFolder.cxx:3607
 TQFolder.cxx:3608
 TQFolder.cxx:3609
 TQFolder.cxx:3610
 TQFolder.cxx:3611
 TQFolder.cxx:3612
 TQFolder.cxx:3613
 TQFolder.cxx:3614
 TQFolder.cxx:3615
 TQFolder.cxx:3616
 TQFolder.cxx:3617
 TQFolder.cxx:3618
 TQFolder.cxx:3619
 TQFolder.cxx:3620
 TQFolder.cxx:3621
 TQFolder.cxx:3622
 TQFolder.cxx:3623
 TQFolder.cxx:3624
 TQFolder.cxx:3625
 TQFolder.cxx:3626
 TQFolder.cxx:3627
 TQFolder.cxx:3628
 TQFolder.cxx:3629
 TQFolder.cxx:3630
 TQFolder.cxx:3631
 TQFolder.cxx:3632
 TQFolder.cxx:3633
 TQFolder.cxx:3634
 TQFolder.cxx:3635
 TQFolder.cxx:3636
 TQFolder.cxx:3637
 TQFolder.cxx:3638
 TQFolder.cxx:3639
 TQFolder.cxx:3640
 TQFolder.cxx:3641
 TQFolder.cxx:3642
 TQFolder.cxx:3643
 TQFolder.cxx:3644
 TQFolder.cxx:3645
 TQFolder.cxx:3646
 TQFolder.cxx:3647
 TQFolder.cxx:3648
 TQFolder.cxx:3649
 TQFolder.cxx:3650
 TQFolder.cxx:3651
 TQFolder.cxx:3652
 TQFolder.cxx:3653
 TQFolder.cxx:3654
 TQFolder.cxx:3655
 TQFolder.cxx:3656
 TQFolder.cxx:3657
 TQFolder.cxx:3658
 TQFolder.cxx:3659
 TQFolder.cxx:3660
 TQFolder.cxx:3661
 TQFolder.cxx:3662
 TQFolder.cxx:3663
 TQFolder.cxx:3664
 TQFolder.cxx:3665
 TQFolder.cxx:3666
 TQFolder.cxx:3667
 TQFolder.cxx:3668
 TQFolder.cxx:3669
 TQFolder.cxx:3670
 TQFolder.cxx:3671
 TQFolder.cxx:3672
 TQFolder.cxx:3673
 TQFolder.cxx:3674
 TQFolder.cxx:3675
 TQFolder.cxx:3676
 TQFolder.cxx:3677
 TQFolder.cxx:3678
 TQFolder.cxx:3679
 TQFolder.cxx:3680
 TQFolder.cxx:3681
 TQFolder.cxx:3682
 TQFolder.cxx:3683
 TQFolder.cxx:3684
 TQFolder.cxx:3685
 TQFolder.cxx:3686
 TQFolder.cxx:3687
 TQFolder.cxx:3688
 TQFolder.cxx:3689
 TQFolder.cxx:3690
 TQFolder.cxx:3691
 TQFolder.cxx:3692
 TQFolder.cxx:3693
 TQFolder.cxx:3694
 TQFolder.cxx:3695
 TQFolder.cxx:3696
 TQFolder.cxx:3697
 TQFolder.cxx:3698
 TQFolder.cxx:3699
 TQFolder.cxx:3700
 TQFolder.cxx:3701
 TQFolder.cxx:3702
 TQFolder.cxx:3703
 TQFolder.cxx:3704
 TQFolder.cxx:3705
 TQFolder.cxx:3706
 TQFolder.cxx:3707
 TQFolder.cxx:3708
 TQFolder.cxx:3709
 TQFolder.cxx:3710
 TQFolder.cxx:3711
 TQFolder.cxx:3712
 TQFolder.cxx:3713
 TQFolder.cxx:3714
 TQFolder.cxx:3715
 TQFolder.cxx:3716
 TQFolder.cxx:3717
 TQFolder.cxx:3718
 TQFolder.cxx:3719
 TQFolder.cxx:3720
 TQFolder.cxx:3721
 TQFolder.cxx:3722
 TQFolder.cxx:3723
 TQFolder.cxx:3724
 TQFolder.cxx:3725
 TQFolder.cxx:3726
 TQFolder.cxx:3727
 TQFolder.cxx:3728
 TQFolder.cxx:3729
 TQFolder.cxx:3730
 TQFolder.cxx:3731
 TQFolder.cxx:3732
 TQFolder.cxx:3733
 TQFolder.cxx:3734
 TQFolder.cxx:3735
 TQFolder.cxx:3736
 TQFolder.cxx:3737
 TQFolder.cxx:3738
 TQFolder.cxx:3739
 TQFolder.cxx:3740
 TQFolder.cxx:3741
 TQFolder.cxx:3742
 TQFolder.cxx:3743
 TQFolder.cxx:3744
 TQFolder.cxx:3745
 TQFolder.cxx:3746
 TQFolder.cxx:3747
 TQFolder.cxx:3748
 TQFolder.cxx:3749
 TQFolder.cxx:3750
 TQFolder.cxx:3751
 TQFolder.cxx:3752
 TQFolder.cxx:3753
 TQFolder.cxx:3754
 TQFolder.cxx:3755
 TQFolder.cxx:3756
 TQFolder.cxx:3757
 TQFolder.cxx:3758
 TQFolder.cxx:3759
 TQFolder.cxx:3760
 TQFolder.cxx:3761
 TQFolder.cxx:3762
 TQFolder.cxx:3763
 TQFolder.cxx:3764
 TQFolder.cxx:3765
 TQFolder.cxx:3766
 TQFolder.cxx:3767
 TQFolder.cxx:3768
 TQFolder.cxx:3769
 TQFolder.cxx:3770
 TQFolder.cxx:3771
 TQFolder.cxx:3772
 TQFolder.cxx:3773
 TQFolder.cxx:3774
 TQFolder.cxx:3775
 TQFolder.cxx:3776
 TQFolder.cxx:3777
 TQFolder.cxx:3778
 TQFolder.cxx:3779
 TQFolder.cxx:3780
 TQFolder.cxx:3781
 TQFolder.cxx:3782
 TQFolder.cxx:3783
 TQFolder.cxx:3784
 TQFolder.cxx:3785
 TQFolder.cxx:3786
 TQFolder.cxx:3787
 TQFolder.cxx:3788
 TQFolder.cxx:3789
 TQFolder.cxx:3790
 TQFolder.cxx:3791
 TQFolder.cxx:3792
 TQFolder.cxx:3793
 TQFolder.cxx:3794
 TQFolder.cxx:3795
 TQFolder.cxx:3796
 TQFolder.cxx:3797
 TQFolder.cxx:3798
 TQFolder.cxx:3799
 TQFolder.cxx:3800
 TQFolder.cxx:3801
 TQFolder.cxx:3802
 TQFolder.cxx:3803
 TQFolder.cxx:3804
 TQFolder.cxx:3805
 TQFolder.cxx:3806
 TQFolder.cxx:3807
 TQFolder.cxx:3808
 TQFolder.cxx:3809
 TQFolder.cxx:3810
 TQFolder.cxx:3811
 TQFolder.cxx:3812
 TQFolder.cxx:3813
 TQFolder.cxx:3814
 TQFolder.cxx:3815
 TQFolder.cxx:3816
 TQFolder.cxx:3817
 TQFolder.cxx:3818
 TQFolder.cxx:3819
 TQFolder.cxx:3820
 TQFolder.cxx:3821
 TQFolder.cxx:3822
 TQFolder.cxx:3823
 TQFolder.cxx:3824
 TQFolder.cxx:3825
 TQFolder.cxx:3826
 TQFolder.cxx:3827
 TQFolder.cxx:3828
 TQFolder.cxx:3829
 TQFolder.cxx:3830
 TQFolder.cxx:3831
 TQFolder.cxx:3832
 TQFolder.cxx:3833
 TQFolder.cxx:3834
 TQFolder.cxx:3835
 TQFolder.cxx:3836
 TQFolder.cxx:3837
 TQFolder.cxx:3838
 TQFolder.cxx:3839
 TQFolder.cxx:3840
 TQFolder.cxx:3841
 TQFolder.cxx:3842
 TQFolder.cxx:3843
 TQFolder.cxx:3844
 TQFolder.cxx:3845
 TQFolder.cxx:3846
 TQFolder.cxx:3847
 TQFolder.cxx:3848
 TQFolder.cxx:3849
 TQFolder.cxx:3850
 TQFolder.cxx:3851
 TQFolder.cxx:3852
 TQFolder.cxx:3853
 TQFolder.cxx:3854
 TQFolder.cxx:3855
 TQFolder.cxx:3856
 TQFolder.cxx:3857
 TQFolder.cxx:3858
 TQFolder.cxx:3859
 TQFolder.cxx:3860
 TQFolder.cxx:3861
 TQFolder.cxx:3862
 TQFolder.cxx:3863
 TQFolder.cxx:3864
 TQFolder.cxx:3865
 TQFolder.cxx:3866
 TQFolder.cxx:3867
 TQFolder.cxx:3868
 TQFolder.cxx:3869
 TQFolder.cxx:3870
 TQFolder.cxx:3871
 TQFolder.cxx:3872
 TQFolder.cxx:3873
 TQFolder.cxx:3874
 TQFolder.cxx:3875
 TQFolder.cxx:3876
 TQFolder.cxx:3877
 TQFolder.cxx:3878
 TQFolder.cxx:3879
 TQFolder.cxx:3880
 TQFolder.cxx:3881
 TQFolder.cxx:3882
 TQFolder.cxx:3883
 TQFolder.cxx:3884
 TQFolder.cxx:3885
 TQFolder.cxx:3886
 TQFolder.cxx:3887
 TQFolder.cxx:3888
 TQFolder.cxx:3889
 TQFolder.cxx:3890
 TQFolder.cxx:3891
 TQFolder.cxx:3892
 TQFolder.cxx:3893
 TQFolder.cxx:3894
 TQFolder.cxx:3895
 TQFolder.cxx:3896
 TQFolder.cxx:3897
 TQFolder.cxx:3898
 TQFolder.cxx:3899
 TQFolder.cxx:3900
 TQFolder.cxx:3901
 TQFolder.cxx:3902
 TQFolder.cxx:3903
 TQFolder.cxx:3904
 TQFolder.cxx:3905
 TQFolder.cxx:3906
 TQFolder.cxx:3907
 TQFolder.cxx:3908
 TQFolder.cxx:3909
 TQFolder.cxx:3910
 TQFolder.cxx:3911
 TQFolder.cxx:3912
 TQFolder.cxx:3913
 TQFolder.cxx:3914
 TQFolder.cxx:3915
 TQFolder.cxx:3916
 TQFolder.cxx:3917
 TQFolder.cxx:3918
 TQFolder.cxx:3919
 TQFolder.cxx:3920
 TQFolder.cxx:3921
 TQFolder.cxx:3922
 TQFolder.cxx:3923
 TQFolder.cxx:3924
 TQFolder.cxx:3925
 TQFolder.cxx:3926
 TQFolder.cxx:3927
 TQFolder.cxx:3928
 TQFolder.cxx:3929
 TQFolder.cxx:3930
 TQFolder.cxx:3931
 TQFolder.cxx:3932
 TQFolder.cxx:3933
 TQFolder.cxx:3934
 TQFolder.cxx:3935
 TQFolder.cxx:3936
 TQFolder.cxx:3937
 TQFolder.cxx:3938
 TQFolder.cxx:3939
 TQFolder.cxx:3940
 TQFolder.cxx:3941
 TQFolder.cxx:3942
 TQFolder.cxx:3943
 TQFolder.cxx:3944
 TQFolder.cxx:3945
 TQFolder.cxx:3946
 TQFolder.cxx:3947
 TQFolder.cxx:3948
 TQFolder.cxx:3949
 TQFolder.cxx:3950
 TQFolder.cxx:3951
 TQFolder.cxx:3952
 TQFolder.cxx:3953
 TQFolder.cxx:3954
 TQFolder.cxx:3955
 TQFolder.cxx:3956
 TQFolder.cxx:3957
 TQFolder.cxx:3958
 TQFolder.cxx:3959
 TQFolder.cxx:3960
 TQFolder.cxx:3961
 TQFolder.cxx:3962
 TQFolder.cxx:3963
 TQFolder.cxx:3964
 TQFolder.cxx:3965
 TQFolder.cxx:3966
 TQFolder.cxx:3967
 TQFolder.cxx:3968
 TQFolder.cxx:3969
 TQFolder.cxx:3970
 TQFolder.cxx:3971
 TQFolder.cxx:3972
 TQFolder.cxx:3973
 TQFolder.cxx:3974
 TQFolder.cxx:3975
 TQFolder.cxx:3976
 TQFolder.cxx:3977
 TQFolder.cxx:3978
 TQFolder.cxx:3979
 TQFolder.cxx:3980
 TQFolder.cxx:3981
 TQFolder.cxx:3982
 TQFolder.cxx:3983
 TQFolder.cxx:3984
 TQFolder.cxx:3985
 TQFolder.cxx:3986
 TQFolder.cxx:3987
 TQFolder.cxx:3988
 TQFolder.cxx:3989
 TQFolder.cxx:3990
 TQFolder.cxx:3991
 TQFolder.cxx:3992
 TQFolder.cxx:3993
 TQFolder.cxx:3994
 TQFolder.cxx:3995
 TQFolder.cxx:3996
 TQFolder.cxx:3997
 TQFolder.cxx:3998
 TQFolder.cxx:3999
 TQFolder.cxx:4000
 TQFolder.cxx:4001
 TQFolder.cxx:4002
 TQFolder.cxx:4003
 TQFolder.cxx:4004
 TQFolder.cxx:4005
 TQFolder.cxx:4006
 TQFolder.cxx:4007
 TQFolder.cxx:4008
 TQFolder.cxx:4009
 TQFolder.cxx:4010
 TQFolder.cxx:4011
 TQFolder.cxx:4012
 TQFolder.cxx:4013
 TQFolder.cxx:4014
 TQFolder.cxx:4015
 TQFolder.cxx:4016
 TQFolder.cxx:4017
 TQFolder.cxx:4018
 TQFolder.cxx:4019
 TQFolder.cxx:4020
 TQFolder.cxx:4021
 TQFolder.cxx:4022
 TQFolder.cxx:4023
 TQFolder.cxx:4024
 TQFolder.cxx:4025
 TQFolder.cxx:4026
 TQFolder.cxx:4027
 TQFolder.cxx:4028
 TQFolder.cxx:4029
 TQFolder.cxx:4030
 TQFolder.cxx:4031
 TQFolder.cxx:4032
 TQFolder.cxx:4033
 TQFolder.cxx:4034
 TQFolder.cxx:4035
 TQFolder.cxx:4036
 TQFolder.cxx:4037
 TQFolder.cxx:4038
 TQFolder.cxx:4039
 TQFolder.cxx:4040
 TQFolder.cxx:4041
 TQFolder.cxx:4042
 TQFolder.cxx:4043
 TQFolder.cxx:4044
 TQFolder.cxx:4045
 TQFolder.cxx:4046
 TQFolder.cxx:4047
 TQFolder.cxx:4048
 TQFolder.cxx:4049
 TQFolder.cxx:4050
 TQFolder.cxx:4051
 TQFolder.cxx:4052
 TQFolder.cxx:4053
 TQFolder.cxx:4054
 TQFolder.cxx:4055
 TQFolder.cxx:4056
 TQFolder.cxx:4057
 TQFolder.cxx:4058
 TQFolder.cxx:4059
 TQFolder.cxx:4060
 TQFolder.cxx:4061
 TQFolder.cxx:4062
 TQFolder.cxx:4063
 TQFolder.cxx:4064
 TQFolder.cxx:4065
 TQFolder.cxx:4066
 TQFolder.cxx:4067
 TQFolder.cxx:4068
 TQFolder.cxx:4069
 TQFolder.cxx:4070
 TQFolder.cxx:4071
 TQFolder.cxx:4072
 TQFolder.cxx:4073
 TQFolder.cxx:4074
 TQFolder.cxx:4075
 TQFolder.cxx:4076
 TQFolder.cxx:4077
 TQFolder.cxx:4078
 TQFolder.cxx:4079
 TQFolder.cxx:4080
 TQFolder.cxx:4081
 TQFolder.cxx:4082
 TQFolder.cxx:4083
 TQFolder.cxx:4084
 TQFolder.cxx:4085
 TQFolder.cxx:4086
 TQFolder.cxx:4087
 TQFolder.cxx:4088
 TQFolder.cxx:4089
 TQFolder.cxx:4090
 TQFolder.cxx:4091
 TQFolder.cxx:4092
 TQFolder.cxx:4093
 TQFolder.cxx:4094
 TQFolder.cxx:4095
 TQFolder.cxx:4096
 TQFolder.cxx:4097
 TQFolder.cxx:4098
 TQFolder.cxx:4099
 TQFolder.cxx:4100
 TQFolder.cxx:4101
 TQFolder.cxx:4102
 TQFolder.cxx:4103
 TQFolder.cxx:4104
 TQFolder.cxx:4105
 TQFolder.cxx:4106
 TQFolder.cxx:4107
 TQFolder.cxx:4108
 TQFolder.cxx:4109
 TQFolder.cxx:4110
 TQFolder.cxx:4111
 TQFolder.cxx:4112
 TQFolder.cxx:4113
 TQFolder.cxx:4114
 TQFolder.cxx:4115
 TQFolder.cxx:4116
 TQFolder.cxx:4117
 TQFolder.cxx:4118
 TQFolder.cxx:4119
 TQFolder.cxx:4120
 TQFolder.cxx:4121
 TQFolder.cxx:4122
 TQFolder.cxx:4123
 TQFolder.cxx:4124
 TQFolder.cxx:4125
 TQFolder.cxx:4126
 TQFolder.cxx:4127
 TQFolder.cxx:4128
 TQFolder.cxx:4129
 TQFolder.cxx:4130
 TQFolder.cxx:4131
 TQFolder.cxx:4132
 TQFolder.cxx:4133
 TQFolder.cxx:4134
 TQFolder.cxx:4135
 TQFolder.cxx:4136
 TQFolder.cxx:4137
 TQFolder.cxx:4138
 TQFolder.cxx:4139
 TQFolder.cxx:4140
 TQFolder.cxx:4141
 TQFolder.cxx:4142
 TQFolder.cxx:4143
 TQFolder.cxx:4144
 TQFolder.cxx:4145
 TQFolder.cxx:4146
 TQFolder.cxx:4147
 TQFolder.cxx:4148
 TQFolder.cxx:4149
 TQFolder.cxx:4150
 TQFolder.cxx:4151
 TQFolder.cxx:4152
 TQFolder.cxx:4153
 TQFolder.cxx:4154
 TQFolder.cxx:4155
 TQFolder.cxx:4156
 TQFolder.cxx:4157
 TQFolder.cxx:4158
 TQFolder.cxx:4159
 TQFolder.cxx:4160
 TQFolder.cxx:4161
 TQFolder.cxx:4162
 TQFolder.cxx:4163
 TQFolder.cxx:4164
 TQFolder.cxx:4165
 TQFolder.cxx:4166
 TQFolder.cxx:4167
 TQFolder.cxx:4168
 TQFolder.cxx:4169
 TQFolder.cxx:4170
 TQFolder.cxx:4171
 TQFolder.cxx:4172
 TQFolder.cxx:4173
 TQFolder.cxx:4174
 TQFolder.cxx:4175
 TQFolder.cxx:4176
 TQFolder.cxx:4177
 TQFolder.cxx:4178
 TQFolder.cxx:4179
 TQFolder.cxx:4180
 TQFolder.cxx:4181
 TQFolder.cxx:4182
 TQFolder.cxx:4183
 TQFolder.cxx:4184
 TQFolder.cxx:4185
 TQFolder.cxx:4186
 TQFolder.cxx:4187
 TQFolder.cxx:4188
 TQFolder.cxx:4189
 TQFolder.cxx:4190
 TQFolder.cxx:4191
 TQFolder.cxx:4192
 TQFolder.cxx:4193
 TQFolder.cxx:4194
 TQFolder.cxx:4195
 TQFolder.cxx:4196
 TQFolder.cxx:4197
 TQFolder.cxx:4198
 TQFolder.cxx:4199
 TQFolder.cxx:4200
 TQFolder.cxx:4201
 TQFolder.cxx:4202
 TQFolder.cxx:4203
 TQFolder.cxx:4204
 TQFolder.cxx:4205
 TQFolder.cxx:4206
 TQFolder.cxx:4207
 TQFolder.cxx:4208
 TQFolder.cxx:4209
 TQFolder.cxx:4210
 TQFolder.cxx:4211
 TQFolder.cxx:4212
 TQFolder.cxx:4213
 TQFolder.cxx:4214
 TQFolder.cxx:4215
 TQFolder.cxx:4216
 TQFolder.cxx:4217
 TQFolder.cxx:4218
 TQFolder.cxx:4219
 TQFolder.cxx:4220
 TQFolder.cxx:4221
 TQFolder.cxx:4222
 TQFolder.cxx:4223
 TQFolder.cxx:4224
 TQFolder.cxx:4225
 TQFolder.cxx:4226
 TQFolder.cxx:4227
 TQFolder.cxx:4228
 TQFolder.cxx:4229
 TQFolder.cxx:4230
 TQFolder.cxx:4231
 TQFolder.cxx:4232
 TQFolder.cxx:4233
 TQFolder.cxx:4234
 TQFolder.cxx:4235
 TQFolder.cxx:4236
 TQFolder.cxx:4237
 TQFolder.cxx:4238
 TQFolder.cxx:4239
 TQFolder.cxx:4240
 TQFolder.cxx:4241
 TQFolder.cxx:4242
 TQFolder.cxx:4243
 TQFolder.cxx:4244
 TQFolder.cxx:4245
 TQFolder.cxx:4246
 TQFolder.cxx:4247
 TQFolder.cxx:4248
 TQFolder.cxx:4249
 TQFolder.cxx:4250
 TQFolder.cxx:4251
 TQFolder.cxx:4252
 TQFolder.cxx:4253
 TQFolder.cxx:4254
 TQFolder.cxx:4255
 TQFolder.cxx:4256
 TQFolder.cxx:4257
 TQFolder.cxx:4258
 TQFolder.cxx:4259
 TQFolder.cxx:4260
 TQFolder.cxx:4261
 TQFolder.cxx:4262
 TQFolder.cxx:4263
 TQFolder.cxx:4264
 TQFolder.cxx:4265
 TQFolder.cxx:4266
 TQFolder.cxx:4267
 TQFolder.cxx:4268
 TQFolder.cxx:4269
 TQFolder.cxx:4270
 TQFolder.cxx:4271
 TQFolder.cxx:4272
 TQFolder.cxx:4273
 TQFolder.cxx:4274
 TQFolder.cxx:4275
 TQFolder.cxx:4276
 TQFolder.cxx:4277
 TQFolder.cxx:4278
 TQFolder.cxx:4279
 TQFolder.cxx:4280
 TQFolder.cxx:4281
 TQFolder.cxx:4282
 TQFolder.cxx:4283
 TQFolder.cxx:4284
 TQFolder.cxx:4285
 TQFolder.cxx:4286
 TQFolder.cxx:4287
 TQFolder.cxx:4288
 TQFolder.cxx:4289
 TQFolder.cxx:4290
 TQFolder.cxx:4291
 TQFolder.cxx:4292
 TQFolder.cxx:4293
 TQFolder.cxx:4294
 TQFolder.cxx:4295
 TQFolder.cxx:4296
 TQFolder.cxx:4297
 TQFolder.cxx:4298
 TQFolder.cxx:4299
 TQFolder.cxx:4300
 TQFolder.cxx:4301
 TQFolder.cxx:4302
 TQFolder.cxx:4303
 TQFolder.cxx:4304
 TQFolder.cxx:4305
 TQFolder.cxx:4306
 TQFolder.cxx:4307
 TQFolder.cxx:4308
 TQFolder.cxx:4309
 TQFolder.cxx:4310
 TQFolder.cxx:4311
 TQFolder.cxx:4312
 TQFolder.cxx:4313
 TQFolder.cxx:4314
 TQFolder.cxx:4315
 TQFolder.cxx:4316
 TQFolder.cxx:4317
 TQFolder.cxx:4318
 TQFolder.cxx:4319
 TQFolder.cxx:4320
 TQFolder.cxx:4321
 TQFolder.cxx:4322
 TQFolder.cxx:4323
 TQFolder.cxx:4324
 TQFolder.cxx:4325
 TQFolder.cxx:4326
 TQFolder.cxx:4327
 TQFolder.cxx:4328
 TQFolder.cxx:4329
 TQFolder.cxx:4330
 TQFolder.cxx:4331
 TQFolder.cxx:4332
 TQFolder.cxx:4333
 TQFolder.cxx:4334
 TQFolder.cxx:4335
 TQFolder.cxx:4336
 TQFolder.cxx:4337
 TQFolder.cxx:4338
 TQFolder.cxx:4339
 TQFolder.cxx:4340
 TQFolder.cxx:4341
 TQFolder.cxx:4342
 TQFolder.cxx:4343
 TQFolder.cxx:4344
 TQFolder.cxx:4345
 TQFolder.cxx:4346
 TQFolder.cxx:4347
 TQFolder.cxx:4348
 TQFolder.cxx:4349
 TQFolder.cxx:4350
 TQFolder.cxx:4351
 TQFolder.cxx:4352
 TQFolder.cxx:4353
 TQFolder.cxx:4354
 TQFolder.cxx:4355
 TQFolder.cxx:4356
 TQFolder.cxx:4357
 TQFolder.cxx:4358
 TQFolder.cxx:4359
 TQFolder.cxx:4360
 TQFolder.cxx:4361
 TQFolder.cxx:4362
 TQFolder.cxx:4363
 TQFolder.cxx:4364
 TQFolder.cxx:4365
 TQFolder.cxx:4366
 TQFolder.cxx:4367
 TQFolder.cxx:4368
 TQFolder.cxx:4369
 TQFolder.cxx:4370
 TQFolder.cxx:4371
 TQFolder.cxx:4372
 TQFolder.cxx:4373
 TQFolder.cxx:4374
 TQFolder.cxx:4375
 TQFolder.cxx:4376
 TQFolder.cxx:4377
 TQFolder.cxx:4378
 TQFolder.cxx:4379
 TQFolder.cxx:4380
 TQFolder.cxx:4381
 TQFolder.cxx:4382
 TQFolder.cxx:4383
 TQFolder.cxx:4384
 TQFolder.cxx:4385
 TQFolder.cxx:4386
 TQFolder.cxx:4387
 TQFolder.cxx:4388
 TQFolder.cxx:4389
 TQFolder.cxx:4390
 TQFolder.cxx:4391
 TQFolder.cxx:4392
 TQFolder.cxx:4393
 TQFolder.cxx:4394
 TQFolder.cxx:4395
 TQFolder.cxx:4396
 TQFolder.cxx:4397
 TQFolder.cxx:4398
 TQFolder.cxx:4399
 TQFolder.cxx:4400
 TQFolder.cxx:4401
 TQFolder.cxx:4402
 TQFolder.cxx:4403
 TQFolder.cxx:4404
 TQFolder.cxx:4405
 TQFolder.cxx:4406
 TQFolder.cxx:4407
 TQFolder.cxx:4408
 TQFolder.cxx:4409
 TQFolder.cxx:4410
 TQFolder.cxx:4411
 TQFolder.cxx:4412
 TQFolder.cxx:4413
 TQFolder.cxx:4414
 TQFolder.cxx:4415
 TQFolder.cxx:4416
 TQFolder.cxx:4417
 TQFolder.cxx:4418
 TQFolder.cxx:4419
 TQFolder.cxx:4420
 TQFolder.cxx:4421
 TQFolder.cxx:4422
 TQFolder.cxx:4423
 TQFolder.cxx:4424
 TQFolder.cxx:4425
 TQFolder.cxx:4426
 TQFolder.cxx:4427
 TQFolder.cxx:4428
 TQFolder.cxx:4429
 TQFolder.cxx:4430
 TQFolder.cxx:4431
 TQFolder.cxx:4432
 TQFolder.cxx:4433
 TQFolder.cxx:4434
 TQFolder.cxx:4435
 TQFolder.cxx:4436
 TQFolder.cxx:4437
 TQFolder.cxx:4438
 TQFolder.cxx:4439
 TQFolder.cxx:4440
 TQFolder.cxx:4441
 TQFolder.cxx:4442
 TQFolder.cxx:4443
 TQFolder.cxx:4444
 TQFolder.cxx:4445
 TQFolder.cxx:4446
 TQFolder.cxx:4447
 TQFolder.cxx:4448
 TQFolder.cxx:4449
 TQFolder.cxx:4450
 TQFolder.cxx:4451
 TQFolder.cxx:4452
 TQFolder.cxx:4453
 TQFolder.cxx:4454
 TQFolder.cxx:4455
 TQFolder.cxx:4456
 TQFolder.cxx:4457
 TQFolder.cxx:4458
 TQFolder.cxx:4459
 TQFolder.cxx:4460
 TQFolder.cxx:4461
 TQFolder.cxx:4462
 TQFolder.cxx:4463
 TQFolder.cxx:4464
 TQFolder.cxx:4465
 TQFolder.cxx:4466
 TQFolder.cxx:4467
 TQFolder.cxx:4468
 TQFolder.cxx:4469
 TQFolder.cxx:4470
 TQFolder.cxx:4471
 TQFolder.cxx:4472
 TQFolder.cxx:4473
 TQFolder.cxx:4474
 TQFolder.cxx:4475
 TQFolder.cxx:4476
 TQFolder.cxx:4477
 TQFolder.cxx:4478
 TQFolder.cxx:4479
 TQFolder.cxx:4480
 TQFolder.cxx:4481
 TQFolder.cxx:4482
 TQFolder.cxx:4483
 TQFolder.cxx:4484
 TQFolder.cxx:4485
 TQFolder.cxx:4486
 TQFolder.cxx:4487
 TQFolder.cxx:4488
 TQFolder.cxx:4489
 TQFolder.cxx:4490
 TQFolder.cxx:4491
 TQFolder.cxx:4492
 TQFolder.cxx:4493
 TQFolder.cxx:4494
 TQFolder.cxx:4495
 TQFolder.cxx:4496
 TQFolder.cxx:4497
 TQFolder.cxx:4498
 TQFolder.cxx:4499
 TQFolder.cxx:4500
 TQFolder.cxx:4501
 TQFolder.cxx:4502
 TQFolder.cxx:4503
 TQFolder.cxx:4504
 TQFolder.cxx:4505
 TQFolder.cxx:4506
 TQFolder.cxx:4507
 TQFolder.cxx:4508
 TQFolder.cxx:4509
 TQFolder.cxx:4510
 TQFolder.cxx:4511
 TQFolder.cxx:4512
 TQFolder.cxx:4513
 TQFolder.cxx:4514
 TQFolder.cxx:4515
 TQFolder.cxx:4516
 TQFolder.cxx:4517
 TQFolder.cxx:4518
 TQFolder.cxx:4519
 TQFolder.cxx:4520
 TQFolder.cxx:4521
 TQFolder.cxx:4522
 TQFolder.cxx:4523
 TQFolder.cxx:4524
 TQFolder.cxx:4525
 TQFolder.cxx:4526
 TQFolder.cxx:4527
 TQFolder.cxx:4528
 TQFolder.cxx:4529
 TQFolder.cxx:4530
 TQFolder.cxx:4531
 TQFolder.cxx:4532
 TQFolder.cxx:4533
 TQFolder.cxx:4534
 TQFolder.cxx:4535
 TQFolder.cxx:4536
 TQFolder.cxx:4537
 TQFolder.cxx:4538
 TQFolder.cxx:4539
 TQFolder.cxx:4540
 TQFolder.cxx:4541
 TQFolder.cxx:4542
 TQFolder.cxx:4543
 TQFolder.cxx:4544
 TQFolder.cxx:4545
 TQFolder.cxx:4546
 TQFolder.cxx:4547
 TQFolder.cxx:4548
 TQFolder.cxx:4549
 TQFolder.cxx:4550
 TQFolder.cxx:4551
 TQFolder.cxx:4552
 TQFolder.cxx:4553
 TQFolder.cxx:4554
 TQFolder.cxx:4555
 TQFolder.cxx:4556
 TQFolder.cxx:4557
 TQFolder.cxx:4558
 TQFolder.cxx:4559
 TQFolder.cxx:4560
 TQFolder.cxx:4561
 TQFolder.cxx:4562
 TQFolder.cxx:4563
 TQFolder.cxx:4564
 TQFolder.cxx:4565
 TQFolder.cxx:4566
 TQFolder.cxx:4567
 TQFolder.cxx:4568
 TQFolder.cxx:4569
 TQFolder.cxx:4570
 TQFolder.cxx:4571
 TQFolder.cxx:4572
 TQFolder.cxx:4573
 TQFolder.cxx:4574
 TQFolder.cxx:4575
 TQFolder.cxx:4576
 TQFolder.cxx:4577
 TQFolder.cxx:4578
 TQFolder.cxx:4579
 TQFolder.cxx:4580
 TQFolder.cxx:4581
 TQFolder.cxx:4582
 TQFolder.cxx:4583
 TQFolder.cxx:4584
 TQFolder.cxx:4585
 TQFolder.cxx:4586
 TQFolder.cxx:4587
 TQFolder.cxx:4588
 TQFolder.cxx:4589
 TQFolder.cxx:4590
 TQFolder.cxx:4591
 TQFolder.cxx:4592
 TQFolder.cxx:4593
 TQFolder.cxx:4594
 TQFolder.cxx:4595
 TQFolder.cxx:4596
 TQFolder.cxx:4597
 TQFolder.cxx:4598
 TQFolder.cxx:4599
 TQFolder.cxx:4600
 TQFolder.cxx:4601
 TQFolder.cxx:4602
 TQFolder.cxx:4603
 TQFolder.cxx:4604
 TQFolder.cxx:4605
 TQFolder.cxx:4606
 TQFolder.cxx:4607
 TQFolder.cxx:4608
 TQFolder.cxx:4609
 TQFolder.cxx:4610
 TQFolder.cxx:4611
 TQFolder.cxx:4612
 TQFolder.cxx:4613
 TQFolder.cxx:4614
 TQFolder.cxx:4615
 TQFolder.cxx:4616
 TQFolder.cxx:4617
 TQFolder.cxx:4618
 TQFolder.cxx:4619
 TQFolder.cxx:4620
 TQFolder.cxx:4621
 TQFolder.cxx:4622
 TQFolder.cxx:4623
 TQFolder.cxx:4624
 TQFolder.cxx:4625
 TQFolder.cxx:4626
 TQFolder.cxx:4627
 TQFolder.cxx:4628
 TQFolder.cxx:4629
 TQFolder.cxx:4630
 TQFolder.cxx:4631
 TQFolder.cxx:4632
 TQFolder.cxx:4633
 TQFolder.cxx:4634
 TQFolder.cxx:4635
 TQFolder.cxx:4636
 TQFolder.cxx:4637
 TQFolder.cxx:4638
 TQFolder.cxx:4639
 TQFolder.cxx:4640
 TQFolder.cxx:4641
 TQFolder.cxx:4642
 TQFolder.cxx:4643
 TQFolder.cxx:4644
 TQFolder.cxx:4645
 TQFolder.cxx:4646
 TQFolder.cxx:4647
 TQFolder.cxx:4648
 TQFolder.cxx:4649
 TQFolder.cxx:4650
 TQFolder.cxx:4651
 TQFolder.cxx:4652
 TQFolder.cxx:4653
 TQFolder.cxx:4654
 TQFolder.cxx:4655
 TQFolder.cxx:4656
 TQFolder.cxx:4657
 TQFolder.cxx:4658
 TQFolder.cxx:4659
 TQFolder.cxx:4660
 TQFolder.cxx:4661
 TQFolder.cxx:4662
 TQFolder.cxx:4663
 TQFolder.cxx:4664
 TQFolder.cxx:4665
 TQFolder.cxx:4666
 TQFolder.cxx:4667
 TQFolder.cxx:4668
 TQFolder.cxx:4669
 TQFolder.cxx:4670
 TQFolder.cxx:4671
 TQFolder.cxx:4672
 TQFolder.cxx:4673
 TQFolder.cxx:4674
 TQFolder.cxx:4675
 TQFolder.cxx:4676
 TQFolder.cxx:4677
 TQFolder.cxx:4678
 TQFolder.cxx:4679
 TQFolder.cxx:4680
 TQFolder.cxx:4681
 TQFolder.cxx:4682
 TQFolder.cxx:4683
 TQFolder.cxx:4684
 TQFolder.cxx:4685
 TQFolder.cxx:4686
 TQFolder.cxx:4687
 TQFolder.cxx:4688
 TQFolder.cxx:4689
 TQFolder.cxx:4690
 TQFolder.cxx:4691
 TQFolder.cxx:4692
 TQFolder.cxx:4693
 TQFolder.cxx:4694
 TQFolder.cxx:4695
 TQFolder.cxx:4696
 TQFolder.cxx:4697
 TQFolder.cxx:4698
 TQFolder.cxx:4699
 TQFolder.cxx:4700
 TQFolder.cxx:4701
 TQFolder.cxx:4702
 TQFolder.cxx:4703
 TQFolder.cxx:4704
 TQFolder.cxx:4705
 TQFolder.cxx:4706
 TQFolder.cxx:4707
 TQFolder.cxx:4708
 TQFolder.cxx:4709
 TQFolder.cxx:4710
 TQFolder.cxx:4711
 TQFolder.cxx:4712
 TQFolder.cxx:4713
 TQFolder.cxx:4714
 TQFolder.cxx:4715
 TQFolder.cxx:4716
 TQFolder.cxx:4717
 TQFolder.cxx:4718
 TQFolder.cxx:4719
 TQFolder.cxx:4720
 TQFolder.cxx:4721
 TQFolder.cxx:4722
 TQFolder.cxx:4723
 TQFolder.cxx:4724
 TQFolder.cxx:4725
 TQFolder.cxx:4726
 TQFolder.cxx:4727
 TQFolder.cxx:4728
 TQFolder.cxx:4729
 TQFolder.cxx:4730
 TQFolder.cxx:4731
 TQFolder.cxx:4732
 TQFolder.cxx:4733
 TQFolder.cxx:4734
 TQFolder.cxx:4735
 TQFolder.cxx:4736
 TQFolder.cxx:4737
 TQFolder.cxx:4738
 TQFolder.cxx:4739
 TQFolder.cxx:4740
 TQFolder.cxx:4741
 TQFolder.cxx:4742
 TQFolder.cxx:4743
 TQFolder.cxx:4744
 TQFolder.cxx:4745
 TQFolder.cxx:4746
 TQFolder.cxx:4747
 TQFolder.cxx:4748
 TQFolder.cxx:4749
 TQFolder.cxx:4750
 TQFolder.cxx:4751
 TQFolder.cxx:4752
 TQFolder.cxx:4753
 TQFolder.cxx:4754
 TQFolder.cxx:4755
 TQFolder.cxx:4756
 TQFolder.cxx:4757
 TQFolder.cxx:4758
 TQFolder.cxx:4759
 TQFolder.cxx:4760
 TQFolder.cxx:4761
 TQFolder.cxx:4762
 TQFolder.cxx:4763
 TQFolder.cxx:4764
 TQFolder.cxx:4765
 TQFolder.cxx:4766
 TQFolder.cxx:4767
 TQFolder.cxx:4768
 TQFolder.cxx:4769
 TQFolder.cxx:4770
 TQFolder.cxx:4771
 TQFolder.cxx:4772
 TQFolder.cxx:4773
 TQFolder.cxx:4774
 TQFolder.cxx:4775
 TQFolder.cxx:4776
 TQFolder.cxx:4777
 TQFolder.cxx:4778
 TQFolder.cxx:4779
 TQFolder.cxx:4780
 TQFolder.cxx:4781
 TQFolder.cxx:4782
 TQFolder.cxx:4783
 TQFolder.cxx:4784
 TQFolder.cxx:4785
 TQFolder.cxx:4786
 TQFolder.cxx:4787
 TQFolder.cxx:4788
 TQFolder.cxx:4789
 TQFolder.cxx:4790
 TQFolder.cxx:4791
 TQFolder.cxx:4792
 TQFolder.cxx:4793
 TQFolder.cxx:4794
 TQFolder.cxx:4795
 TQFolder.cxx:4796
 TQFolder.cxx:4797
 TQFolder.cxx:4798
 TQFolder.cxx:4799
 TQFolder.cxx:4800
 TQFolder.cxx:4801
 TQFolder.cxx:4802
 TQFolder.cxx:4803
 TQFolder.cxx:4804
 TQFolder.cxx:4805
 TQFolder.cxx:4806
 TQFolder.cxx:4807
 TQFolder.cxx:4808
 TQFolder.cxx:4809
 TQFolder.cxx:4810
 TQFolder.cxx:4811
 TQFolder.cxx:4812
 TQFolder.cxx:4813
 TQFolder.cxx:4814
 TQFolder.cxx:4815
 TQFolder.cxx:4816
 TQFolder.cxx:4817
 TQFolder.cxx:4818
 TQFolder.cxx:4819
 TQFolder.cxx:4820
 TQFolder.cxx:4821
 TQFolder.cxx:4822
 TQFolder.cxx:4823
 TQFolder.cxx:4824
 TQFolder.cxx:4825
 TQFolder.cxx:4826
 TQFolder.cxx:4827
 TQFolder.cxx:4828
 TQFolder.cxx:4829
 TQFolder.cxx:4830
 TQFolder.cxx:4831
 TQFolder.cxx:4832
 TQFolder.cxx:4833
 TQFolder.cxx:4834
 TQFolder.cxx:4835
 TQFolder.cxx:4836
 TQFolder.cxx:4837
 TQFolder.cxx:4838
 TQFolder.cxx:4839
 TQFolder.cxx:4840
 TQFolder.cxx:4841
 TQFolder.cxx:4842
 TQFolder.cxx:4843
 TQFolder.cxx:4844
 TQFolder.cxx:4845
 TQFolder.cxx:4846
 TQFolder.cxx:4847
 TQFolder.cxx:4848
 TQFolder.cxx:4849
 TQFolder.cxx:4850
 TQFolder.cxx:4851
 TQFolder.cxx:4852
 TQFolder.cxx:4853
 TQFolder.cxx:4854
 TQFolder.cxx:4855
 TQFolder.cxx:4856
 TQFolder.cxx:4857
 TQFolder.cxx:4858
 TQFolder.cxx:4859
 TQFolder.cxx:4860
 TQFolder.cxx:4861
 TQFolder.cxx:4862
 TQFolder.cxx:4863
 TQFolder.cxx:4864
 TQFolder.cxx:4865
 TQFolder.cxx:4866
 TQFolder.cxx:4867
 TQFolder.cxx:4868
 TQFolder.cxx:4869
 TQFolder.cxx:4870
 TQFolder.cxx:4871
 TQFolder.cxx:4872
 TQFolder.cxx:4873
 TQFolder.cxx:4874
 TQFolder.cxx:4875
 TQFolder.cxx:4876
 TQFolder.cxx:4877
 TQFolder.cxx:4878
 TQFolder.cxx:4879
 TQFolder.cxx:4880
 TQFolder.cxx:4881
 TQFolder.cxx:4882
 TQFolder.cxx:4883
 TQFolder.cxx:4884
 TQFolder.cxx:4885
 TQFolder.cxx:4886
 TQFolder.cxx:4887
 TQFolder.cxx:4888
 TQFolder.cxx:4889
 TQFolder.cxx:4890
 TQFolder.cxx:4891
 TQFolder.cxx:4892
 TQFolder.cxx:4893
 TQFolder.cxx:4894
 TQFolder.cxx:4895
 TQFolder.cxx:4896
 TQFolder.cxx:4897
 TQFolder.cxx:4898
 TQFolder.cxx:4899
 TQFolder.cxx:4900
 TQFolder.cxx:4901
 TQFolder.cxx:4902
 TQFolder.cxx:4903
 TQFolder.cxx:4904
 TQFolder.cxx:4905
 TQFolder.cxx:4906
 TQFolder.cxx:4907
 TQFolder.cxx:4908
 TQFolder.cxx:4909
 TQFolder.cxx:4910
 TQFolder.cxx:4911
 TQFolder.cxx:4912
 TQFolder.cxx:4913
 TQFolder.cxx:4914
 TQFolder.cxx:4915
 TQFolder.cxx:4916
 TQFolder.cxx:4917
 TQFolder.cxx:4918
 TQFolder.cxx:4919
 TQFolder.cxx:4920
 TQFolder.cxx:4921
 TQFolder.cxx:4922
 TQFolder.cxx:4923
 TQFolder.cxx:4924
 TQFolder.cxx:4925
 TQFolder.cxx:4926
 TQFolder.cxx:4927
 TQFolder.cxx:4928
 TQFolder.cxx:4929
 TQFolder.cxx:4930
 TQFolder.cxx:4931
 TQFolder.cxx:4932
 TQFolder.cxx:4933
 TQFolder.cxx:4934
 TQFolder.cxx:4935
 TQFolder.cxx:4936
 TQFolder.cxx:4937
 TQFolder.cxx:4938
 TQFolder.cxx:4939
 TQFolder.cxx:4940
 TQFolder.cxx:4941
 TQFolder.cxx:4942
 TQFolder.cxx:4943
 TQFolder.cxx:4944
 TQFolder.cxx:4945
 TQFolder.cxx:4946
 TQFolder.cxx:4947
 TQFolder.cxx:4948
 TQFolder.cxx:4949
 TQFolder.cxx:4950
 TQFolder.cxx:4951
 TQFolder.cxx:4952
 TQFolder.cxx:4953
 TQFolder.cxx:4954
 TQFolder.cxx:4955
 TQFolder.cxx:4956
 TQFolder.cxx:4957
 TQFolder.cxx:4958
 TQFolder.cxx:4959
 TQFolder.cxx:4960
 TQFolder.cxx:4961
 TQFolder.cxx:4962
 TQFolder.cxx:4963
 TQFolder.cxx:4964
 TQFolder.cxx:4965
 TQFolder.cxx:4966
 TQFolder.cxx:4967
 TQFolder.cxx:4968
 TQFolder.cxx:4969
 TQFolder.cxx:4970
 TQFolder.cxx:4971
 TQFolder.cxx:4972
 TQFolder.cxx:4973
 TQFolder.cxx:4974
 TQFolder.cxx:4975
 TQFolder.cxx:4976
 TQFolder.cxx:4977
 TQFolder.cxx:4978
 TQFolder.cxx:4979
 TQFolder.cxx:4980
 TQFolder.cxx:4981
 TQFolder.cxx:4982
 TQFolder.cxx:4983
 TQFolder.cxx:4984
 TQFolder.cxx:4985
 TQFolder.cxx:4986
 TQFolder.cxx:4987
 TQFolder.cxx:4988
 TQFolder.cxx:4989
 TQFolder.cxx:4990
 TQFolder.cxx:4991
 TQFolder.cxx:4992
 TQFolder.cxx:4993
 TQFolder.cxx:4994
 TQFolder.cxx:4995
 TQFolder.cxx:4996
 TQFolder.cxx:4997
 TQFolder.cxx:4998
 TQFolder.cxx:4999
 TQFolder.cxx:5000
 TQFolder.cxx:5001
 TQFolder.cxx:5002
 TQFolder.cxx:5003
 TQFolder.cxx:5004
 TQFolder.cxx:5005
 TQFolder.cxx:5006
 TQFolder.cxx:5007
 TQFolder.cxx:5008
 TQFolder.cxx:5009
 TQFolder.cxx:5010
 TQFolder.cxx:5011
 TQFolder.cxx:5012
 TQFolder.cxx:5013
 TQFolder.cxx:5014
 TQFolder.cxx:5015
 TQFolder.cxx:5016
 TQFolder.cxx:5017
 TQFolder.cxx:5018
 TQFolder.cxx:5019
 TQFolder.cxx:5020
 TQFolder.cxx:5021
 TQFolder.cxx:5022
 TQFolder.cxx:5023
 TQFolder.cxx:5024
 TQFolder.cxx:5025
 TQFolder.cxx:5026
 TQFolder.cxx:5027
 TQFolder.cxx:5028
 TQFolder.cxx:5029
 TQFolder.cxx:5030
 TQFolder.cxx:5031
 TQFolder.cxx:5032
 TQFolder.cxx:5033
 TQFolder.cxx:5034
 TQFolder.cxx:5035
 TQFolder.cxx:5036
 TQFolder.cxx:5037
 TQFolder.cxx:5038
 TQFolder.cxx:5039
 TQFolder.cxx:5040
 TQFolder.cxx:5041
 TQFolder.cxx:5042
 TQFolder.cxx:5043
 TQFolder.cxx:5044
 TQFolder.cxx:5045
 TQFolder.cxx:5046
 TQFolder.cxx:5047
 TQFolder.cxx:5048
 TQFolder.cxx:5049
 TQFolder.cxx:5050
 TQFolder.cxx:5051
 TQFolder.cxx:5052
 TQFolder.cxx:5053
 TQFolder.cxx:5054
 TQFolder.cxx:5055
 TQFolder.cxx:5056
 TQFolder.cxx:5057
 TQFolder.cxx:5058
 TQFolder.cxx:5059
 TQFolder.cxx:5060
 TQFolder.cxx:5061
 TQFolder.cxx:5062
 TQFolder.cxx:5063
 TQFolder.cxx:5064
 TQFolder.cxx:5065
 TQFolder.cxx:5066
 TQFolder.cxx:5067
 TQFolder.cxx:5068
 TQFolder.cxx:5069
 TQFolder.cxx:5070
 TQFolder.cxx:5071
 TQFolder.cxx:5072
 TQFolder.cxx:5073
 TQFolder.cxx:5074
 TQFolder.cxx:5075
 TQFolder.cxx:5076
 TQFolder.cxx:5077
 TQFolder.cxx:5078
 TQFolder.cxx:5079
 TQFolder.cxx:5080
 TQFolder.cxx:5081
 TQFolder.cxx:5082
 TQFolder.cxx:5083
 TQFolder.cxx:5084
 TQFolder.cxx:5085
 TQFolder.cxx:5086
 TQFolder.cxx:5087
 TQFolder.cxx:5088
 TQFolder.cxx:5089
 TQFolder.cxx:5090
 TQFolder.cxx:5091
 TQFolder.cxx:5092
 TQFolder.cxx:5093
 TQFolder.cxx:5094
 TQFolder.cxx:5095
 TQFolder.cxx:5096
 TQFolder.cxx:5097
 TQFolder.cxx:5098
 TQFolder.cxx:5099
 TQFolder.cxx:5100
 TQFolder.cxx:5101
 TQFolder.cxx:5102
 TQFolder.cxx:5103
 TQFolder.cxx:5104
 TQFolder.cxx:5105
 TQFolder.cxx:5106
 TQFolder.cxx:5107
 TQFolder.cxx:5108
 TQFolder.cxx:5109
 TQFolder.cxx:5110
 TQFolder.cxx:5111
 TQFolder.cxx:5112
 TQFolder.cxx:5113
 TQFolder.cxx:5114
 TQFolder.cxx:5115
 TQFolder.cxx:5116
 TQFolder.cxx:5117
 TQFolder.cxx:5118
 TQFolder.cxx:5119
 TQFolder.cxx:5120
 TQFolder.cxx:5121
 TQFolder.cxx:5122
 TQFolder.cxx:5123
 TQFolder.cxx:5124
 TQFolder.cxx:5125
 TQFolder.cxx:5126
 TQFolder.cxx:5127
 TQFolder.cxx:5128
 TQFolder.cxx:5129
 TQFolder.cxx:5130
 TQFolder.cxx:5131
 TQFolder.cxx:5132
 TQFolder.cxx:5133
 TQFolder.cxx:5134
 TQFolder.cxx:5135
 TQFolder.cxx:5136
 TQFolder.cxx:5137
 TQFolder.cxx:5138
 TQFolder.cxx:5139
 TQFolder.cxx:5140
 TQFolder.cxx:5141
 TQFolder.cxx:5142
 TQFolder.cxx:5143
 TQFolder.cxx:5144
 TQFolder.cxx:5145
 TQFolder.cxx:5146
 TQFolder.cxx:5147
 TQFolder.cxx:5148
 TQFolder.cxx:5149
 TQFolder.cxx:5150
 TQFolder.cxx:5151
 TQFolder.cxx:5152
 TQFolder.cxx:5153
 TQFolder.cxx:5154
 TQFolder.cxx:5155
 TQFolder.cxx:5156
 TQFolder.cxx:5157
 TQFolder.cxx:5158
 TQFolder.cxx:5159
 TQFolder.cxx:5160
 TQFolder.cxx:5161
 TQFolder.cxx:5162
 TQFolder.cxx:5163
 TQFolder.cxx:5164
 TQFolder.cxx:5165
 TQFolder.cxx:5166
 TQFolder.cxx:5167
 TQFolder.cxx:5168
 TQFolder.cxx:5169
 TQFolder.cxx:5170
 TQFolder.cxx:5171
 TQFolder.cxx:5172
 TQFolder.cxx:5173
 TQFolder.cxx:5174
 TQFolder.cxx:5175
 TQFolder.cxx:5176
 TQFolder.cxx:5177
 TQFolder.cxx:5178
 TQFolder.cxx:5179
 TQFolder.cxx:5180
 TQFolder.cxx:5181
 TQFolder.cxx:5182
 TQFolder.cxx:5183
 TQFolder.cxx:5184
 TQFolder.cxx:5185
 TQFolder.cxx:5186
 TQFolder.cxx:5187
 TQFolder.cxx:5188
 TQFolder.cxx:5189
 TQFolder.cxx:5190
 TQFolder.cxx:5191
 TQFolder.cxx:5192
 TQFolder.cxx:5193
 TQFolder.cxx:5194
 TQFolder.cxx:5195
 TQFolder.cxx:5196
 TQFolder.cxx:5197
 TQFolder.cxx:5198
 TQFolder.cxx:5199
 TQFolder.cxx:5200
 TQFolder.cxx:5201
 TQFolder.cxx:5202
 TQFolder.cxx:5203
 TQFolder.cxx:5204
 TQFolder.cxx:5205
 TQFolder.cxx:5206
 TQFolder.cxx:5207
 TQFolder.cxx:5208
 TQFolder.cxx:5209
 TQFolder.cxx:5210
 TQFolder.cxx:5211
 TQFolder.cxx:5212
 TQFolder.cxx:5213
 TQFolder.cxx:5214
 TQFolder.cxx:5215
 TQFolder.cxx:5216
 TQFolder.cxx:5217
 TQFolder.cxx:5218
 TQFolder.cxx:5219
 TQFolder.cxx:5220
 TQFolder.cxx:5221
 TQFolder.cxx:5222
 TQFolder.cxx:5223
 TQFolder.cxx:5224
 TQFolder.cxx:5225
 TQFolder.cxx:5226
 TQFolder.cxx:5227
 TQFolder.cxx:5228
 TQFolder.cxx:5229
 TQFolder.cxx:5230
 TQFolder.cxx:5231
 TQFolder.cxx:5232
 TQFolder.cxx:5233
 TQFolder.cxx:5234
 TQFolder.cxx:5235
 TQFolder.cxx:5236
 TQFolder.cxx:5237
 TQFolder.cxx:5238
 TQFolder.cxx:5239
 TQFolder.cxx:5240
 TQFolder.cxx:5241
 TQFolder.cxx:5242
 TQFolder.cxx:5243
 TQFolder.cxx:5244
 TQFolder.cxx:5245
 TQFolder.cxx:5246
 TQFolder.cxx:5247
 TQFolder.cxx:5248
 TQFolder.cxx:5249
 TQFolder.cxx:5250
 TQFolder.cxx:5251
 TQFolder.cxx:5252
 TQFolder.cxx:5253
 TQFolder.cxx:5254
 TQFolder.cxx:5255
 TQFolder.cxx:5256
 TQFolder.cxx:5257
 TQFolder.cxx:5258
 TQFolder.cxx:5259
 TQFolder.cxx:5260
 TQFolder.cxx:5261
 TQFolder.cxx:5262
 TQFolder.cxx:5263
 TQFolder.cxx:5264
 TQFolder.cxx:5265
 TQFolder.cxx:5266
 TQFolder.cxx:5267
 TQFolder.cxx:5268
 TQFolder.cxx:5269
 TQFolder.cxx:5270
 TQFolder.cxx:5271
 TQFolder.cxx:5272
 TQFolder.cxx:5273
 TQFolder.cxx:5274
 TQFolder.cxx:5275
 TQFolder.cxx:5276
 TQFolder.cxx:5277
 TQFolder.cxx:5278
 TQFolder.cxx:5279
 TQFolder.cxx:5280
 TQFolder.cxx:5281
 TQFolder.cxx:5282
 TQFolder.cxx:5283
 TQFolder.cxx:5284
 TQFolder.cxx:5285
 TQFolder.cxx:5286
 TQFolder.cxx:5287
 TQFolder.cxx:5288
 TQFolder.cxx:5289
 TQFolder.cxx:5290
 TQFolder.cxx:5291
 TQFolder.cxx:5292
 TQFolder.cxx:5293
 TQFolder.cxx:5294
 TQFolder.cxx:5295
 TQFolder.cxx:5296
 TQFolder.cxx:5297
 TQFolder.cxx:5298
 TQFolder.cxx:5299
 TQFolder.cxx:5300
 TQFolder.cxx:5301
 TQFolder.cxx:5302
 TQFolder.cxx:5303
 TQFolder.cxx:5304
 TQFolder.cxx:5305
 TQFolder.cxx:5306
 TQFolder.cxx:5307
 TQFolder.cxx:5308
 TQFolder.cxx:5309
 TQFolder.cxx:5310
 TQFolder.cxx:5311
 TQFolder.cxx:5312
 TQFolder.cxx:5313
 TQFolder.cxx:5314
 TQFolder.cxx:5315
 TQFolder.cxx:5316
 TQFolder.cxx:5317
 TQFolder.cxx:5318
 TQFolder.cxx:5319
 TQFolder.cxx:5320
 TQFolder.cxx:5321
 TQFolder.cxx:5322
 TQFolder.cxx:5323
 TQFolder.cxx:5324
 TQFolder.cxx:5325
 TQFolder.cxx:5326
 TQFolder.cxx:5327
 TQFolder.cxx:5328
 TQFolder.cxx:5329
 TQFolder.cxx:5330
 TQFolder.cxx:5331
 TQFolder.cxx:5332
 TQFolder.cxx:5333
 TQFolder.cxx:5334
 TQFolder.cxx:5335
 TQFolder.cxx:5336
 TQFolder.cxx:5337
 TQFolder.cxx:5338
 TQFolder.cxx:5339
 TQFolder.cxx:5340
 TQFolder.cxx:5341
 TQFolder.cxx:5342
 TQFolder.cxx:5343
 TQFolder.cxx:5344
 TQFolder.cxx:5345
 TQFolder.cxx:5346
 TQFolder.cxx:5347
 TQFolder.cxx:5348
 TQFolder.cxx:5349
 TQFolder.cxx:5350
 TQFolder.cxx:5351
 TQFolder.cxx:5352
 TQFolder.cxx:5353
 TQFolder.cxx:5354
 TQFolder.cxx:5355
 TQFolder.cxx:5356
 TQFolder.cxx:5357
 TQFolder.cxx:5358
 TQFolder.cxx:5359
 TQFolder.cxx:5360
 TQFolder.cxx:5361
 TQFolder.cxx:5362
 TQFolder.cxx:5363
 TQFolder.cxx:5364
 TQFolder.cxx:5365
 TQFolder.cxx:5366
 TQFolder.cxx:5367
 TQFolder.cxx:5368
 TQFolder.cxx:5369
 TQFolder.cxx:5370
 TQFolder.cxx:5371
 TQFolder.cxx:5372
 TQFolder.cxx:5373
 TQFolder.cxx:5374
 TQFolder.cxx:5375
 TQFolder.cxx:5376
 TQFolder.cxx:5377
 TQFolder.cxx:5378
 TQFolder.cxx:5379
 TQFolder.cxx:5380
 TQFolder.cxx:5381
 TQFolder.cxx:5382
 TQFolder.cxx:5383
 TQFolder.cxx:5384
 TQFolder.cxx:5385
 TQFolder.cxx:5386
 TQFolder.cxx:5387
 TQFolder.cxx:5388
 TQFolder.cxx:5389
 TQFolder.cxx:5390
 TQFolder.cxx:5391
 TQFolder.cxx:5392
 TQFolder.cxx:5393
 TQFolder.cxx:5394
 TQFolder.cxx:5395
 TQFolder.cxx:5396
 TQFolder.cxx:5397
 TQFolder.cxx:5398
 TQFolder.cxx:5399
 TQFolder.cxx:5400
 TQFolder.cxx:5401
 TQFolder.cxx:5402
 TQFolder.cxx:5403
 TQFolder.cxx:5404
 TQFolder.cxx:5405
 TQFolder.cxx:5406
 TQFolder.cxx:5407
 TQFolder.cxx:5408
 TQFolder.cxx:5409
 TQFolder.cxx:5410
 TQFolder.cxx:5411
 TQFolder.cxx:5412
 TQFolder.cxx:5413
 TQFolder.cxx:5414
 TQFolder.cxx:5415
 TQFolder.cxx:5416
 TQFolder.cxx:5417
 TQFolder.cxx:5418
 TQFolder.cxx:5419
 TQFolder.cxx:5420
 TQFolder.cxx:5421
 TQFolder.cxx:5422
 TQFolder.cxx:5423
 TQFolder.cxx:5424
 TQFolder.cxx:5425
 TQFolder.cxx:5426
 TQFolder.cxx:5427
 TQFolder.cxx:5428
 TQFolder.cxx:5429
 TQFolder.cxx:5430
 TQFolder.cxx:5431
 TQFolder.cxx:5432
 TQFolder.cxx:5433
 TQFolder.cxx:5434
 TQFolder.cxx:5435
 TQFolder.cxx:5436
 TQFolder.cxx:5437
 TQFolder.cxx:5438
 TQFolder.cxx:5439
 TQFolder.cxx:5440
 TQFolder.cxx:5441
 TQFolder.cxx:5442
 TQFolder.cxx:5443
 TQFolder.cxx:5444
 TQFolder.cxx:5445
 TQFolder.cxx:5446
 TQFolder.cxx:5447
 TQFolder.cxx:5448
 TQFolder.cxx:5449
 TQFolder.cxx:5450
 TQFolder.cxx:5451
 TQFolder.cxx:5452
 TQFolder.cxx:5453
 TQFolder.cxx:5454
 TQFolder.cxx:5455
 TQFolder.cxx:5456
 TQFolder.cxx:5457
 TQFolder.cxx:5458
 TQFolder.cxx:5459
 TQFolder.cxx:5460
 TQFolder.cxx:5461
 TQFolder.cxx:5462
 TQFolder.cxx:5463
 TQFolder.cxx:5464
 TQFolder.cxx:5465
 TQFolder.cxx:5466
 TQFolder.cxx:5467
 TQFolder.cxx:5468
 TQFolder.cxx:5469
 TQFolder.cxx:5470
 TQFolder.cxx:5471
 TQFolder.cxx:5472
 TQFolder.cxx:5473
 TQFolder.cxx:5474
 TQFolder.cxx:5475
 TQFolder.cxx:5476
 TQFolder.cxx:5477
 TQFolder.cxx:5478
 TQFolder.cxx:5479
 TQFolder.cxx:5480
 TQFolder.cxx:5481
 TQFolder.cxx:5482
 TQFolder.cxx:5483
 TQFolder.cxx:5484
 TQFolder.cxx:5485
 TQFolder.cxx:5486
 TQFolder.cxx:5487
 TQFolder.cxx:5488
 TQFolder.cxx:5489
 TQFolder.cxx:5490
 TQFolder.cxx:5491
 TQFolder.cxx:5492
 TQFolder.cxx:5493
 TQFolder.cxx:5494
 TQFolder.cxx:5495
 TQFolder.cxx:5496
 TQFolder.cxx:5497
 TQFolder.cxx:5498
 TQFolder.cxx:5499
 TQFolder.cxx:5500
 TQFolder.cxx:5501
 TQFolder.cxx:5502
 TQFolder.cxx:5503
 TQFolder.cxx:5504
 TQFolder.cxx:5505
 TQFolder.cxx:5506
 TQFolder.cxx:5507
 TQFolder.cxx:5508
 TQFolder.cxx:5509
 TQFolder.cxx:5510
 TQFolder.cxx:5511
 TQFolder.cxx:5512
 TQFolder.cxx:5513
 TQFolder.cxx:5514
 TQFolder.cxx:5515
 TQFolder.cxx:5516
 TQFolder.cxx:5517
 TQFolder.cxx:5518
 TQFolder.cxx:5519
 TQFolder.cxx:5520
 TQFolder.cxx:5521
 TQFolder.cxx:5522
 TQFolder.cxx:5523
 TQFolder.cxx:5524
 TQFolder.cxx:5525
 TQFolder.cxx:5526
 TQFolder.cxx:5527
 TQFolder.cxx:5528
 TQFolder.cxx:5529
 TQFolder.cxx:5530
 TQFolder.cxx:5531
 TQFolder.cxx:5532
 TQFolder.cxx:5533
 TQFolder.cxx:5534
 TQFolder.cxx:5535
 TQFolder.cxx:5536
 TQFolder.cxx:5537
 TQFolder.cxx:5538
 TQFolder.cxx:5539
 TQFolder.cxx:5540
 TQFolder.cxx:5541
 TQFolder.cxx:5542
 TQFolder.cxx:5543
 TQFolder.cxx:5544
 TQFolder.cxx:5545
 TQFolder.cxx:5546
 TQFolder.cxx:5547