// @(#)root/net:$Id$
// Author: G. Ganis  10/5/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TApplicationServer                                                   //
//                                                                      //
// TApplicationServer is the remote application run by the roots main   //
// program. The input is taken from the socket connection to the client.//
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "RConfigure.h"
#include "RConfig.h"
#include "Riostream.h"

#ifdef WIN32
   #include <io.h>
   typedef long off_t;
#endif
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

#if (defined(__FreeBSD__) && (__FreeBSD__ < 4)) || \
    (defined(__APPLE__) && (!defined(MAC_OS_X_VERSION_10_3) || \
     (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3)))
#include <sys/file.h>
#define lockf(fd, op, sz)   flock((fd), (op))
#ifndef F_LOCK
#define F_LOCK             (LOCK_EX | LOCK_NB)
#endif
#ifndef F_ULOCK
#define F_ULOCK             LOCK_UN
#endif
#endif

#include "RRemoteProtocol.h"

#include "TApplicationServer.h"
#include "TBenchmark.h"
#include "TEnv.h"
#include "TError.h"
#include "TException.h"
#include "TInterpreter.h"
#include "TMD5.h"
#include "TMessage.h"
#include "TROOT.h"
#include "TSocket.h"
#include "TSystem.h"
#include "TRemoteObject.h"
#include "TUrl.h"
#include "TObjString.h"
#include "compiledata.h"
#include "TClass.h"


//----- Interrupt signal handler -----------------------------------------------
//______________________________________________________________________________
class TASInterruptHandler : public TSignalHandler {
   TApplicationServer  *fServ;
public:
   TASInterruptHandler(TApplicationServer *s)
      : TSignalHandler(kSigUrgent, kFALSE) { fServ = s; }
   Bool_t  Notify();
};

//______________________________________________________________________________
Bool_t TASInterruptHandler::Notify()
{
   // Handle this interrupt

   fServ->HandleUrgentData();
   if (TROOT::Initialized()) {
      Throw(GetSignal());
   }
   return kTRUE;
}

//----- SigPipe signal handler -------------------------------------------------
//______________________________________________________________________________
class TASSigPipeHandler : public TSignalHandler {
   TApplicationServer  *fServ;
public:
   TASSigPipeHandler(TApplicationServer *s) : TSignalHandler(kSigPipe, kFALSE)
      { fServ = s; }
   Bool_t  Notify();
};

//______________________________________________________________________________
Bool_t TASSigPipeHandler::Notify()
{
   // Handle this signal

   fServ->HandleSigPipe();
   return kTRUE;
}

//----- Input handler for messages from client -----------------------
//______________________________________________________________________________
class TASInputHandler : public TFileHandler {
   TApplicationServer  *fServ;
public:
   TASInputHandler(TApplicationServer *s, Int_t fd) : TFileHandler(fd, 1)
      { fServ = s; }
   Bool_t Notify();
   Bool_t ReadNotify() { return Notify(); }
};

//______________________________________________________________________________
Bool_t TASInputHandler::Notify()
{
   // Handle this input

   fServ->HandleSocketInput();
   return kTRUE;
}

TString TASLogHandler::fgPfx = ""; // Default prefix to be prepended to messages
//______________________________________________________________________________
TASLogHandler::TASLogHandler(const char *cmd, TSocket *s, const char *pfx)
              : TFileHandler(-1, 1), fSocket(s), fPfx(pfx)
{
   // Execute 'cmd' in a pipe and handle output messages from the related file

   ResetBit(kFileIsPipe);
   fFile = 0;
   if (s && cmd) {
      fFile = gSystem->OpenPipe(cmd, "r");
      if (fFile) {
         SetFd(fileno(fFile));
         // Notify what already in the file
         Notify();
         // Used in the destructor
         SetBit(kFileIsPipe);
      } else {
         fSocket = 0;
         Error("TASLogHandler", "executing command in pipe");
      }
   } else {
      Error("TASLogHandler",
            "undefined command (%p) or socket (%p)", (int *)cmd, s);
   }
}
//______________________________________________________________________________
TASLogHandler::TASLogHandler(FILE *f, TSocket *s, const char *pfx)
              : TFileHandler(-1, 1), fSocket(s), fPfx(pfx)
{
   // Handle available message from the open file 'f'

   ResetBit(kFileIsPipe);
   fFile = 0;
   if (s && f) {
      fFile = f;
      SetFd(fileno(fFile));
      // Notify what already in the file
      Notify();
   } else {
      Error("TASLogHandler", "undefined file (%p) or socket (%p)", f, s);
   }
}
//______________________________________________________________________________
TASLogHandler::~TASLogHandler()
{
   // Handle available message in the open file

   if (TestBit(kFileIsPipe) && fFile)
      gSystem->ClosePipe(fFile);
   fFile = 0;
   fSocket = 0;
   ResetBit(kFileIsPipe);
}
//______________________________________________________________________________
Bool_t TASLogHandler::Notify()
{
   // Handle available message in the open file

   if (IsValid()) {
      TMessage m(kMESS_ANY);
      // Read buffer
      char line[4096];
      char *plf = 0;
      while (fgets(line, sizeof(line), fFile)) {
         if ((plf = strchr(line, '\n')))
            *plf = 0;
         // Send the message one level up
         m.Reset(kMESS_ANY);
         m << (Int_t)kRRT_Message;
         if (fPfx.Length() > 0) {
            // Prepend prefix specific to this instance
            m << TString(Form("%s: %s", fPfx.Data(), line));
         } else if (fgPfx.Length() > 0) {
            // Prepend default prefix
            m << TString(Form("%s: %s", fgPfx.Data(), line));
         } else {
            // Nothing to prepend
            m << TString(line);
         }
         fSocket->Send(m);
      }
   }
   return kTRUE;
}
//______________________________________________________________________________
void TASLogHandler::SetDefaultPrefix(const char *pfx)
{
   // Static method to set the default prefix

   fgPfx = pfx;
}

//______________________________________________________________________________
TASLogHandlerGuard::TASLogHandlerGuard(const char *cmd, TSocket *s,
                                       const char *pfx, Bool_t on)
{
   // Init a guard for executing a command in a pipe

   fExecHandler = 0;
   if (cmd && on) {
      fExecHandler = new TASLogHandler(cmd, s, pfx);
      if (fExecHandler->IsValid()) {
         gSystem->AddFileHandler(fExecHandler);
      } else {
         Error("TASLogHandlerGuard","invalid handler");
      }
   } else {
      if (on)
         Error("TASLogHandlerGuard","undefined command");
   }
}

//______________________________________________________________________________
TASLogHandlerGuard::TASLogHandlerGuard(FILE *f, TSocket *s,
                                       const char *pfx, Bool_t on)
{
   // Init a guard for executing a command in a pipe

   fExecHandler = 0;
   if (f && on) {
      fExecHandler = new TASLogHandler(f, s, pfx);
      if (fExecHandler->IsValid()) {
         gSystem->AddFileHandler(fExecHandler);
      } else {
         Error("TASLogHandlerGuard","invalid handler");
      }
   } else {
      if (on)
         Error("TASLogHandlerGuard","undefined file");
   }
}

//______________________________________________________________________________
TASLogHandlerGuard::~TASLogHandlerGuard()
{
   // Close a guard for executing a command in a pipe

   if (fExecHandler && fExecHandler->IsValid()) {
      gSystem->RemoveFileHandler(fExecHandler);
      SafeDelete(fExecHandler);
   }
}

ClassImp(TApplicationServer)

//______________________________________________________________________________
TApplicationServer::TApplicationServer(Int_t *argc, char **argv,
                                       FILE *flog, const char *logfile)
       : TApplication("server", argc, argv, 0, -1)
{
   // Main constructor. Create an application environment. The TApplicationServer
   // environment provides an eventloop via inheritance of TApplication.

   // Parse options
   GetOptions(argc, argv);

   // Abort on higher than kSysError's and set error handler
   gErrorAbortLevel = kSysError + 1;
   SetErrorHandler(ErrorHandler);

   fInterrupt       = kFALSE;
   fSocket          = 0;
   fWorkingDir      = 0;

   fLogFilePath     = logfile;
   fLogFile         = flog;
   fLogFileDes      = -1;
   if (!fLogFile || (fLogFileDes = fileno(fLogFile)) < 0)
      // For some reason we failed setting a redirection; we cannot continue
      Terminate(0);
   fRealTimeLog     = kFALSE;
   fSentCanvases    = 0;

   // Default prefix for notifications
   TASLogHandler::SetDefaultPrefix(Form("roots:%s", gSystem->HostName()));

   // Now we contact back the client: if we fail we set ourselves
   // as invalid
   fIsValid = kFALSE;

   if (!(fSocket = new TSocket(GetHost(), GetPort()))) {
      Terminate(0);
      return;
   }
   Int_t sock = fSocket->GetDescriptor();

   if (Setup() != 0) {
      Error("TApplicationServer", "failed to setup - quitting");
      SendLogFile(-98);
      Terminate(0);
   }

   // Everybody expects std::iostream to be available, so load it...
   ProcessLine("#include <iostream>", kTRUE);
   ProcessLine("#include <string>",kTRUE); // for std::string std::iostream.

   // Load user functions
   const char *logon;
   logon = gEnv->GetValue("Rint.Load", (char *)0);
   if (logon) {
      char *mac = gSystem->Which(TROOT::GetMacroPath(), logon, kReadPermission);
      if (mac)
         ProcessLine(Form(".L %s", logon), kTRUE);
      delete [] mac;
   }

   // Execute logon macro
   ExecLogon();

   // Init benchmarking
   gBenchmark = new TBenchmark();

   // Save current interpreter context
   gInterpreter->SaveContext();
   gInterpreter->SaveGlobalsContext();

   // Install interrupt and message input handlers
   gSystem->AddSignalHandler(new TASInterruptHandler(this));
   gSystem->AddFileHandler(new TASInputHandler(this, sock));

   // We are done
   fIsValid = kTRUE;

   // Startup notification
   BrowseDirectory(0);
   SendLogFile();
}

//______________________________________________________________________________
Int_t TApplicationServer::Setup()
{
   // Print the Remote Server logo on standard output.
   // Return 0 on success, -1 on failure

   char str[512];
   snprintf(str, 512, "**** Remote session @ %s started ****", gSystem->HostName());
   if (fSocket->Send(str) != 1+static_cast<Int_t>(strlen(str))) {
      Error("Setup", "failed to send startup message");
      return -1;
   }

   // Send our protocol level to the client
   if (fSocket->Send(kRRemote_Protocol, kROOTD_PROTOCOL) != 2*sizeof(Int_t)) {
      Error("Setup", "failed to send local protocol");
      return -1;
   }

   // Send the host name and full path to log file
   TMessage msg(kMESS_ANY);
   msg << TString(gSystem->HostName()) << fLogFilePath;
   fSocket->Send(msg);

   // Set working directory
   fWorkDir = gSystem->WorkingDirectory();
   if (strlen(fUrl.GetFile()) > 0) {
      fWorkDir = fUrl.GetFile();
      char *workdir = gSystem->ExpandPathName(fWorkDir.Data());
      fWorkDir = workdir;
      delete [] workdir;
   }

   // Go to working dir
   if (gSystem->AccessPathName(fWorkDir)) {
      gSystem->mkdir(fWorkDir, kTRUE);
      if (!gSystem->ChangeDirectory(fWorkDir)) {
         SysError("Setup", "can not change to directory %s",
                  fWorkDir.Data());
      }
   } else {
      if (!gSystem->ChangeDirectory(fWorkDir)) {
         gSystem->Unlink(fWorkDir);
         gSystem->mkdir(fWorkDir, kTRUE);
         if (!gSystem->ChangeDirectory(fWorkDir)) {
            SysError("Setup", "can not change to directory %s",
                     fWorkDir.Data());
         }
      }
   }

#if 0 // G.Ganis May 11, 2007
   // This needs to be fixed: we disable for the time being
   // Socket options: incoming OOB should generate a SIGURG
   if (fSocket->SetOption(kProcessGroup, (-1)*gSystem->GetPid()) != 0)
      SysWarning("Setup", "failed to enable SIGURG generation on incoming OOB");
#endif

   // Send messages off immediately to reduce latency
   if (fSocket->SetOption(kNoDelay, 1) != 0) {}
      //SysWarning("Setup", "failed to set no-delay option on input socket");

   // Check every two hours if client is still alive
   if (fSocket->SetOption(kKeepAlive, 1) != 0) {}
      //SysWarning("Setup", "failed to set keepalive option on input socket");

   // Install SigPipe handler to handle kKeepAlive failure
   gSystem->AddSignalHandler(new TASSigPipeHandler(this));

   // Done
   return 0;
}

//______________________________________________________________________________
TApplicationServer::~TApplicationServer()
{
   // Cleanup. Not really necessary since after this dtor there is no
   // live anyway.

   fSentCanvases->SetOwner(kFALSE);
   SafeDelete(fSentCanvases);
   SafeDelete(fSocket);
   close(fLogFileDes);
}

//______________________________________________________________________________
void TApplicationServer::GetOptions(Int_t *argc, char **argv)
{
   // Get and handle command line options. Fixed format:
   // "protocol  url"

   if (*argc < 4) {
      Fatal("GetOptions", "must be started with 4 arguments");
      gSystem->Exit(1);
   }

   // Protocol run by the client
   fProtocol = TString(argv[1]).Atoi();

   // Client URL
   fUrl.SetUrl(argv[2]);

   // Debug level
   gDebug = 0;
   TString argdbg(argv[3]);
   if (argdbg.BeginsWith("-d=")) {
      argdbg.ReplaceAll("-d=","");
      gDebug = argdbg.Atoi();
   }
}

//______________________________________________________________________________
void TApplicationServer::Run(Bool_t retrn)
{
   // Main server eventloop.

   // Setup the server
   if (fIsValid) {
      // Run the main event loop
      TApplication::Run(retrn);
   } else {
      Error("Run", "invalid instance: cannot Run()");
      gSystem->Exit(1);
   }
}

//______________________________________________________________________________
void TApplicationServer::HandleSocketInput()
{
   // Handle input coming from the client or from the master server.

   TMessage *mess;
   char      str[2048];
   Int_t     what;

   if (fSocket->Recv(mess) <= 0) {
      // Pending: do something more intelligent here
      // but at least get a message in the log file
      Error("HandleSocketInput", "retrieving message from input socket");
      Terminate(0);
      return;
   }

   what = mess->What();
   if (gDebug > 0)
      Info("HandleSocketInput", "got message of type %d", what);

   switch (what) {

      case kMESS_CINT:
         {  TASLogHandlerGuard hg(fLogFile, fSocket, "", fRealTimeLog);
            mess->ReadString(str, sizeof(str));
            if (gDebug > 1)
               Info("HandleSocketInput:kMESS_CINT", "processing: %s...", str);
            ProcessLine(str);
         }
         SendCanvases();
         SendLogFile();
         break;

      case kMESS_STRING:
         mess->ReadString(str, sizeof(str));
         break;

      case kMESS_OBJECT:
         mess->ReadObject(mess->GetClass());
         break;

      case kMESS_ANY:
         {
            Int_t type;
            (*mess) >> type;
            switch (type) {
               case kRRT_Reset:
                  mess->ReadString(str, sizeof(str));
                  Reset(str);
                  break;

               case kRRT_CheckFile:
                  // Handle file checking request
                  HandleCheckFile(mess);
                  break;

               case kRRT_File:
                  // A file follows
                  mess->ReadString(str, sizeof(str));
                  {  char   name[2048], i1[20], i2[40];
                     sscanf(str, "%2047s %19s %39s", name, i1, i2);
                     Int_t  bin = atoi(i1);
                     Long_t size = atol(i2);
                     ReceiveFile(name, bin ? kTRUE : kFALSE, size);
                  }
                  break;

               case kRRT_Terminate:
                  // Terminate the session (will not return from here)
                  Int_t status;
                  (*mess) >> status;
                  Terminate(status);
                  break;

               default:
                  break;
            }
         }
         SendLogFile();
         break;
      default:
         Warning("HandleSocketInput","message type unknown (%d)", what);
         SendLogFile();
         break;
   }

   delete mess;
}

//______________________________________________________________________________
void TApplicationServer::HandleUrgentData()
{
   // Handle Out-Of-Band data sent by the master or client.

   char  oob_byte;
   Int_t n, nch, wasted = 0;

   const Int_t kBufSize = 1024;
   char waste[kBufSize];

   // Real-time notification of messages
   TASLogHandlerGuard hg(fLogFile, fSocket, "", fRealTimeLog);

   Info("HandleUrgentData", "handling oob...");

   // Receive the OOB byte
   while ((n = fSocket->RecvRaw(&oob_byte, 1, kOob)) < 0) {
      if (n == -2) {   // EWOULDBLOCK
         //
         // The OOB data has not yet arrived: flush the input stream
         //
         // In some systems (Solaris) regular recv() does not return upon
         // receipt of the oob byte, which makes the below call to recv()
         // block indefinitely if there are no other data in the queue.
         // FIONREAD ioctl can be used to check if there are actually any
         // data to be flushed.  If not, wait for a while for the oob byte
         // to arrive and try to read it again.
         //
         fSocket->GetOption(kBytesToRead, nch);
         if (nch == 0) {
            gSystem->Sleep(1000);
            continue;
         }

         if (nch > kBufSize) nch = kBufSize;
         n = fSocket->RecvRaw(waste, nch);
         if (n <= 0) {
            Error("HandleUrgentData", "error receiving waste");
            break;
         }
         wasted = 1;
      } else {
         Error("HandleUrgentData", "error receiving OOB (n = %d)",n);
         return;
      }
   }

   Info("HandleUrgentData", "got OOB byte: %d\n", oob_byte);

   switch (oob_byte) {

      case kRRI_Hard:
         Info("HandleUrgentData", "*** Hard Interrupt");

         // Flush input socket
         while (1) {
            Int_t atmark;

            fSocket->GetOption(kAtMark, atmark);

            if (atmark) {
               // Send the OOB byte back so that the client knows where
               // to stop flushing its input stream of obsolete messages
               n = fSocket->SendRaw(&oob_byte, 1, kOob);
               if (n <= 0)
                  Error("HandleUrgentData", "error sending OOB");
               break;
            }

            // find out number of bytes to read before atmark
            fSocket->GetOption(kBytesToRead, nch);
            if (nch == 0) {
               gSystem->Sleep(1000);
               continue;
            }

            if (nch > kBufSize) nch = kBufSize;
            n = fSocket->RecvRaw(waste, nch);
            if (n <= 0) {
               Error("HandleUrgentData", "error receiving waste (2)");
               break;
            }
         }

         SendLogFile();

         break;

      case kRRI_Soft:
         Info("HandleUrgentData", "Soft Interrupt");

         if (wasted) {
            Error("HandleUrgentData", "soft interrupt flushed stream");
            break;
         }

         Interrupt();

         SendLogFile();

         break;

      case kRRI_Shutdown:
         Info("HandleUrgentData", "Shutdown Interrupt");

         Terminate(0);

         break;

      default:
         Error("HandleUrgentData", "unexpected OOB byte");
         break;
   }
}

//______________________________________________________________________________
void TApplicationServer::HandleSigPipe()
{
   // Called when the client is not alive anymore (i.e. when kKeepAlive
   // has failed).

   // Real-time notification of messages
   TASLogHandlerGuard hg(fLogFile, fSocket, "", fRealTimeLog);

   Info("HandleSigPipe", "client died");
   Terminate(0);  // will not return from here....
}

//______________________________________________________________________________
void TApplicationServer::Reset(const char *dir)
{
   // Reset environment to be ready for execution of next command.

   // First go to new directory.
   gDirectory->cd(dir);

   // Clear interpreter environment.
   gROOT->Reset();

   // Make sure current directory is empty (don't delete anything when
   // we happen to be in the ROOT memory only directory!?)
   if (gDirectory != gROOT) {
      gDirectory->Delete();
   }
}

//______________________________________________________________________________
Int_t TApplicationServer::ReceiveFile(const char *file, Bool_t bin, Long64_t size)
{
   // Receive a file, either sent by a client or a master server.
   // If bin is true it is a binary file, other wise it is an ASCII
   // file and we need to check for Windows \r tokens. Returns -1 in
   // case of error, 0 otherwise.

   if (size <= 0) return 0;

   // open file, overwrite already existing file
   Int_t fd = open(file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
   if (fd < 0) {
      SysError("ReceiveFile", "error opening file %s", file);
      return -1;
   }

   const Int_t kMAXBUF = 16384;  //32768  //16384  //65536;
   char buf[kMAXBUF], cpy[kMAXBUF];

   Int_t    left, r;
   Long64_t filesize = 0;

   while (filesize < size) {
      left = Int_t(size - filesize);
      if (left > kMAXBUF)
         left = kMAXBUF;
      r = fSocket->RecvRaw(&buf, left);
      if (r > 0) {
         char *p = buf;

         filesize += r;
         while (r) {
            Int_t w;

            if (!bin) {
               Int_t k = 0, i = 0, j = 0;
               char *q;
               while (i < r) {
                  if (p[i] == '\r') {
                     i++;
                     k++;
                  }
                  cpy[j++] = buf[i++];
               }
               q = cpy;
               r -= k;
               w = write(fd, q, r);
            } else {
               w = write(fd, p, r);
            }

            if (w < 0) {
               SysError("ReceiveFile", "error writing to file %s", file);
               close(fd);
               return -1;
            }
            r -= w;
            p += w;
         }
      } else if (r < 0) {
         Error("ReceiveFile", "error during receiving file %s", file);
         close(fd);
         return -1;
      }
   }

   close(fd);

   chmod(file, 0644);

   return 0;
}

//______________________________________________________________________________
void TApplicationServer::SendLogFile(Int_t status, Int_t start, Int_t end)
{
   // Send log file to master.
   // If start > -1 send only bytes in the range from start to end,
   // if end <= start send everything from start.

   // Determine the number of bytes left to be read from the log file.
   fflush(stdout);

   off_t ltot=0, lnow=0;
   Int_t left = -1;
   Bool_t adhoc = kFALSE;

   if (fLogFileDes > -1) {
      ltot = lseek(fileno(stdout), (off_t) 0, SEEK_END);
      lnow = lseek(fLogFileDes, (off_t) 0, SEEK_CUR);
      if (lnow == -1) {
         SysError("SendLogFile", "lseek failed");
         lnow = 0;
      }

      if (start > -1) {
         lseek(fLogFileDes, (off_t) start, SEEK_SET);
         if (end <= start || end > ltot)
            end = ltot;
         left = (Int_t)(end - start);
         if (end < ltot)
            left++;
         adhoc = kTRUE;
      } else {
         left = (Int_t)(ltot - lnow);
      }
   }

   TMessage m(kMESS_ANY);

   if (left > 0) {

      m << (Int_t)kRRT_LogFile << left;
      fSocket->Send(m);

      const Int_t kMAXBUF = 32768;  //16384  //65536;
      char buf[kMAXBUF];
      Int_t wanted = (left > kMAXBUF) ? kMAXBUF : left;
      Int_t len;
      do {
         while ((len = read(fLogFileDes, buf, wanted)) < 0 &&
                TSystem::GetErrno() == EINTR)
            TSystem::ResetErrno();

         if (len < 0) {
            SysError("SendLogFile", "error reading log file");
            break;
         }

         if (end == ltot && len == wanted)
            buf[len-1] = '\n';

         if (fSocket->SendRaw(buf, len) < 0) {
            SysError("SendLogFile", "error sending log file");
            break;
         }

         // Update counters
         left -= len;
         wanted = (left > kMAXBUF) ? kMAXBUF : left;

      } while (len > 0 && left > 0);
   }

   // Restore initial position if partial send
   if (adhoc)
      lseek(fLogFileDes, lnow, SEEK_SET);

   m.Reset();
   m << (Int_t)kRRT_LogDone << status;

   fSocket->Send(m);
}

//______________________________________________________________________________
Int_t TApplicationServer::SendCanvases()
{
   // Send any created canvas to client

   Int_t nc = 0;

   // Send back new canvases
   TMessage mess(kMESS_OBJECT);
   TIter next(gROOT->GetListOfCanvases());
   TObject *o = 0;
   while ((o = next())) {
      if (!fSentCanvases)
         fSentCanvases = new TList;
      Bool_t sentalready = kFALSE;
      // We cannot use FindObject here because there may be invalid
      // objects in the send list (i.e. deleted canvases)
      TObjLink *lnk = fSentCanvases->FirstLink();
      while (lnk) {
         TObject *sc = lnk->GetObject();
         lnk = lnk->Next();
         if ((sc->TestBit(kNotDeleted)) && sc == o)
            sentalready = kTRUE;
      }
      if (!sentalready) {
         if (gDebug > 0)
            Info("SendCanvases","new canvas found: %p", o);
         mess.Reset(kMESS_OBJECT);
         mess.WriteObject(o);
         fSocket->Send(mess);
         nc++;
         fSentCanvases->Add(o);
      }
   }
   return nc;
}

//______________________________________________________________________________
Int_t TApplicationServer::BrowseDirectory(const char *dirname)
{
   // Browse directory and send back its content to client.

   Int_t nc = 0;

   TMessage mess(kMESS_OBJECT);
   if (!fWorkingDir || !dirname || !*dirname) {
      if (!fWorkingDir)
         fWorkingDir = new TRemoteObject(fWorkDir, fWorkDir, "TSystemDirectory");
      fWorkingDir->Browse();
      mess.Reset(kMESS_OBJECT);
      mess.WriteObject(fWorkingDir);
      fSocket->Send(mess);
      nc++;
   }
   else if (fWorkingDir) {
      TRemoteObject dir(dirname, dirname, "TSystemDirectory");
      TList *list = dir.Browse();
      mess.Reset(kMESS_OBJECT);
      mess.WriteObject(list);
      fSocket->Send(mess);
      nc++;
   }
   return nc;
}

//______________________________________________________________________________
Int_t TApplicationServer::BrowseFile(const char *fname)
{
   // Browse root file and send back its content;
   // if fname is null, send the full list of files.

   Int_t nc = 0;

   TList *list = new TList;
   TMessage mess(kMESS_OBJECT);
   if (!fname || !*fname) {
      // fname is null, so send the list of files.
      TIter next(gROOT->GetListOfFiles());
      TNamed *fh = 0;
      TRemoteObject *robj;
      while ((fh = (TNamed *)next())) {
         robj = new TRemoteObject(fh->GetName(), fh->GetTitle(), "TFile");
         list->Add(robj);
      }
      if (list->GetEntries() > 0) {
         mess.Reset(kMESS_OBJECT);
         mess.WriteObject(list);
         fSocket->Send(mess);
         nc++;
      }
   }
   else {
      // get Root file content and send the list of objects
      TDirectory *fh = (TDirectory *)gROOT->GetListOfFiles()->FindObject(fname);
      if (fh) {
         fh->cd();
         TRemoteObject dir(fh->GetName(), fh->GetTitle(), "TFile");
         TList *keylist = (TList *)gROOT->ProcessLine(Form("((TFile *)0x%lx)->GetListOfKeys();", (ULong_t)fh));
         TIter nextk(keylist);
         TNamed *key = 0;
         TRemoteObject *robj;
         while ((key = (TNamed *)nextk())) {
            robj = new TRemoteObject(key->GetName(), key->GetTitle(), "TKey");
            const char *classname = (const char *)gROOT->ProcessLine(Form("((TKey *)0x%lx)->GetClassName();", (ULong_t)key));
            robj->SetKeyClassName(classname);
            Bool_t isFolder = (Bool_t)gROOT->ProcessLine(Form("((TKey *)0x%lx)->IsFolder();", (ULong_t)key));
            robj->SetFolder(isFolder);
            robj->SetRemoteAddress((Long_t) key);
            list->Add(robj);
         }
         if (list->GetEntries() > 0) {
            mess.Reset(kMESS_OBJECT);
            mess.WriteObject(list);
            fSocket->Send(mess);
            nc++;
         }
      }
   }
   return nc;
}

//______________________________________________________________________________
Int_t TApplicationServer::BrowseKey(const char *keyname)
{
   // Read key object and send it back to client.

   Int_t nc = 0;

   TMessage mess(kMESS_OBJECT);
   TNamed *obj = (TNamed *)gROOT->ProcessLine(Form("gFile->GetKey(\"%s\")->ReadObj();", keyname));
   if (obj) {
      mess.Reset(kMESS_OBJECT);
      mess.WriteObject(obj);
      fSocket->Send(mess);
      nc++;
   }
   return nc;
}

//______________________________________________________________________________
void TApplicationServer::Terminate(Int_t status)
{
   // Terminate the proof server.

   // Close and remove the log file; remove the cleanup script
   if (fLogFile) {
      fclose(fLogFile);
      // Delete the log file unless we are in debug mode
      if (gDebug <= 0)
         gSystem->Unlink(fLogFilePath);
      TString cleanup = fLogFilePath;
      cleanup.ReplaceAll(".log", ".cleanup");
      gSystem->Unlink(cleanup);
   }

   // Remove input handler to avoid spurious signals in socket
   // selection for closing activities executed upon exit()
   TIter next(gSystem->GetListOfFileHandlers());
   TObject *fh = 0;
   while ((fh = next())) {
      TASInputHandler *ih = dynamic_cast<TASInputHandler *>(fh);
      if (ih)
         gSystem->RemoveFileHandler(ih);
   }

   // Stop processing events
   gSystem->Exit(status);
}

//______________________________________________________________________________
void TApplicationServer::HandleCheckFile(TMessage *mess)
{
   // Handle file checking request.

   TString filenam;
   TMD5    md5;
   TMessage m(kMESS_ANY);

   // Parse message
   (*mess) >> filenam >> md5;

   // check file in working directory
   TMD5 *md5local = TMD5::FileChecksum(filenam);
   if (md5local && md5 == (*md5local)) {
      // We have an updated copy of the file
      m << (Int_t) kRRT_CheckFile << (Bool_t) kTRUE;
      fSocket->Send(m);
      if (gDebug > 0)
         Info("HandleCheckFile", "up-to-date version of %s available", filenam.Data());
   } else {
      m << (Int_t) kRRT_CheckFile << (Bool_t) kFALSE;
      fSocket->Send(m);
      if (gDebug > 0)
         Info("HandleCheckFile", "file %s needs to be uploaded", filenam.Data());
   }
   delete md5local;
}

//______________________________________________________________________________
void TApplicationServer::ErrorHandler(Int_t level, Bool_t abort, const char *location,
                              const char *msg)
{
   // The error handler function. It prints the message on stderr and
   // if abort is set it aborts the application.

   if (gErrorIgnoreLevel == kUnset) {
      gErrorIgnoreLevel = 0;
      if (gEnv) {
         TString slevel = gEnv->GetValue("Root.ErrorIgnoreLevel", "Print");
         if (!slevel.CompareTo("Print", TString::kIgnoreCase))
            gErrorIgnoreLevel = kPrint;
         else if (!slevel.CompareTo("Info", TString::kIgnoreCase))
            gErrorIgnoreLevel = kInfo;
         else if (!slevel.CompareTo("Warning", TString::kIgnoreCase))
            gErrorIgnoreLevel = kWarning;
         else if (!slevel.CompareTo("Error", TString::kIgnoreCase))
            gErrorIgnoreLevel = kError;
         else if (!slevel.CompareTo("Break", TString::kIgnoreCase))
            gErrorIgnoreLevel = kBreak;
         else if (!slevel.CompareTo("SysError", TString::kIgnoreCase))
            gErrorIgnoreLevel = kSysError;
         else if (!slevel.CompareTo("Fatal", TString::kIgnoreCase))
            gErrorIgnoreLevel = kFatal;
      }
   }

   if (level < gErrorIgnoreLevel)
      return;

   static TString syslogService;

   if (syslogService.IsNull()) {
      syslogService = "server";
      gSystem->Openlog(syslogService, kLogPid | kLogCons, kLogLocal5);
   }

   const char *type   = 0;
   ELogLevel loglevel = kLogInfo;

   if (level >= kPrint) {
      loglevel = kLogInfo;
      type = "Print";
   }
   if (level >= kInfo) {
      loglevel = kLogInfo;
      type = "Info";
   }
   if (level >= kWarning) {
      loglevel = kLogWarning;
      type = "Warning";
   }
   if (level >= kError) {
      loglevel = kLogErr;
      type = "Error";
   }
   if (level >= kBreak) {
      loglevel = kLogErr;
      type = "*** Break ***";
   }
   if (level >= kSysError) {
      loglevel = kLogErr;
      type = "SysError";
   }
   if (level >= kFatal) {
      loglevel = kLogErr;
      type = "Fatal";
   }

   TString node = "server";
   TString buf;

   if (!location || !location[0] ||
       (level >= kPrint && level < kInfo) ||
       (level >= kBreak && level < kSysError)) {
      fprintf(stderr, "%s on %s: %s\n", type, node.Data(), msg);
      buf.Form("%s:%s:%s", node.Data(), type, msg);
   } else {
      fprintf(stderr, "%s in <%s> on %s: %s\n", type, location, node.Data(), msg);
      buf.Form("%s:%s:<%s>:%s", node.Data(), type, location, msg);
   }
   fflush(stderr);

   gSystem->Syslog(loglevel, buf);

   if (abort) {
      fprintf(stderr, "aborting\n");
      fflush(stderr);
      gSystem->StackTrace();
      gSystem->Abort();
   }
}

//______________________________________________________________________________
Long_t TApplicationServer::ProcessLine(const char *line, Bool_t, Int_t *)
{
   // Parse a command line received from the client, making sure that the files
   // needed for the execution, if any, are available. The line is either a C++
   // statement or an interpreter command starting with a ".".
   // Return the return value of the command casted to a long.

   if (!line || !*line) return 0;

   // If load or execute request we must make sure that we have the files.
   // If not we ask the client to send them, blocking until we have everything.
   if (!strncmp(line, ".L", 2) || !strncmp(line, ".U", 2) ||
       !strncmp(line, ".X", 2) || !strncmp(line, ".x", 2)) {
      TString aclicMode;
      TString arguments;
      TString io;
      TString fname = gSystem->SplitAclicMode(line+3, aclicMode, arguments, io);

      char *imp = gSystem->Which(TROOT::GetMacroPath(), fname, kReadPermission);
      if (!imp) {

         // Make sure that we can write in the directory where we are
         if (gSystem->AccessPathName(gSystem->WorkingDirectory(), kWritePermission)) {
            Error("ProcessLine","no write permission in %s", gSystem->WorkingDirectory());
            return 0;
         }

         if (gDebug > 0)
            Info("ProcessLine", "macro %s not found in path %s: asking the client",
                                fname.Data(), TROOT::GetMacroPath());
         TMessage m(kMESS_ANY);
         m << (Int_t) kRRT_SendFile << TString(gSystem->BaseName(fname));
         fSocket->Send(m);

         // Wait for the reply(ies)
         Int_t type;
         Bool_t filefollows = kTRUE;

         while (filefollows) {

            // Get a message
            TMessage *rm = 0;
            if (fSocket->Recv(rm) <= 0) {
               Error("ProcessLine","ask-file: received empty message from client");
               return 0;
            }
            if (rm->What() != kMESS_ANY) {
               Error("ProcessLine","ask-file: wrong message received (what: %d)", rm->What());
               return 0;
            }
            (*rm) >> type;
            if (type != kRRT_SendFile) {
               Error("ProcessLine","ask-file: wrong sub-type received (type: %d)", type);
               return 0;
            }
            (*rm) >> filefollows;
            if (filefollows) {
               // Read the file specifications
               if (fSocket->Recv(rm) <= 0) {
                  Error("ProcessLine","file: received empty message from client");
                  return 0;
               }
               if (rm->What() != kMESS_ANY) {
                  Error("ProcessLine","file: wrong message received (what: %d)", rm->What());
                  return 0;
               }
               (*rm) >> type;
               if (type != kRRT_File) {
                  Error("ProcessLine","file: wrong sub-type received (type: %d)", type);
                  return 0;
               }
               // A file follows
               char str[2048];
               rm->ReadString(str, sizeof(str));
               char   name[2048], i1[20], i2[40];
               sscanf(str, "%2047s %19s %39s", name, i1, i2);
               Int_t  bin = atoi(i1);
               Long_t size = atol(i2);
               ReceiveFile(name, bin ? kTRUE : kFALSE, size);
            }
         }
      }
      delete [] imp;
   }

   // Process the line now
   return TApplication::ProcessLine(line);
}

//______________________________________________________________________________
void TApplicationServer::ExecLogon()
{
   // Execute logon macro's. There are three levels of logon macros that
   // will be executed: the system logon etc/system.rootlogon.C, the global
   // user logon ~/.rootlogon.C and the local ./.rootlogon.C. For backward
   // compatibility also the logon macro as specified by the Rint.Logon
   // environment setting, by default ./rootlogon.C, will be executed.
   // No logon macros will be executed when the system is started with
   // the -n option.

   if (NoLogOpt()) return;

   TString name = ".rootlogon.C";
   TString sname = "system";
   sname += name;
#ifdef ROOTETCDIR
   char *s = gSystem->ConcatFileName(ROOTETCDIR, sname);
#else
   TString etc = gRootDir;
#ifdef WIN32
   etc += "\\etc";
#else
   etc += "/etc";
#endif
   char *s = gSystem->ConcatFileName(etc, sname);
#endif
   if (!gSystem->AccessPathName(s, kReadPermission)) {
      ProcessFile(s);
   }
   delete [] s;
   s = gSystem->ConcatFileName(gSystem->HomeDirectory(), name);
   if (!gSystem->AccessPathName(s, kReadPermission)) {
      ProcessFile(s);
   }
   delete [] s;
   // avoid executing ~/.rootlogon.C twice
   if (strcmp(gSystem->HomeDirectory(), gSystem->WorkingDirectory())) {
      if (!gSystem->AccessPathName(name, kReadPermission))
         ProcessFile(name);
   }

   // execute also the logon macro specified by "Rint.Logon"
   const char *logon = gEnv->GetValue("Rint.Logon", (char*)0);
   if (logon) {
      char *mac = gSystem->Which(TROOT::GetMacroPath(), logon, kReadPermission);
      if (mac)
         ProcessFile(logon);
      delete [] mac;
   }
}
 TApplicationServer.cxx:1
 TApplicationServer.cxx:2
 TApplicationServer.cxx:3
 TApplicationServer.cxx:4
 TApplicationServer.cxx:5
 TApplicationServer.cxx:6
 TApplicationServer.cxx:7
 TApplicationServer.cxx:8
 TApplicationServer.cxx:9
 TApplicationServer.cxx:10
 TApplicationServer.cxx:11
 TApplicationServer.cxx:12
 TApplicationServer.cxx:13
 TApplicationServer.cxx:14
 TApplicationServer.cxx:15
 TApplicationServer.cxx:16
 TApplicationServer.cxx:17
 TApplicationServer.cxx:18
 TApplicationServer.cxx:19
 TApplicationServer.cxx:20
 TApplicationServer.cxx:21
 TApplicationServer.cxx:22
 TApplicationServer.cxx:23
 TApplicationServer.cxx:24
 TApplicationServer.cxx:25
 TApplicationServer.cxx:26
 TApplicationServer.cxx:27
 TApplicationServer.cxx:28
 TApplicationServer.cxx:29
 TApplicationServer.cxx:30
 TApplicationServer.cxx:31
 TApplicationServer.cxx:32
 TApplicationServer.cxx:33
 TApplicationServer.cxx:34
 TApplicationServer.cxx:35
 TApplicationServer.cxx:36
 TApplicationServer.cxx:37
 TApplicationServer.cxx:38
 TApplicationServer.cxx:39
 TApplicationServer.cxx:40
 TApplicationServer.cxx:41
 TApplicationServer.cxx:42
 TApplicationServer.cxx:43
 TApplicationServer.cxx:44
 TApplicationServer.cxx:45
 TApplicationServer.cxx:46
 TApplicationServer.cxx:47
 TApplicationServer.cxx:48
 TApplicationServer.cxx:49
 TApplicationServer.cxx:50
 TApplicationServer.cxx:51
 TApplicationServer.cxx:52
 TApplicationServer.cxx:53
 TApplicationServer.cxx:54
 TApplicationServer.cxx:55
 TApplicationServer.cxx:56
 TApplicationServer.cxx:57
 TApplicationServer.cxx:58
 TApplicationServer.cxx:59
 TApplicationServer.cxx:60
 TApplicationServer.cxx:61
 TApplicationServer.cxx:62
 TApplicationServer.cxx:63
 TApplicationServer.cxx:64
 TApplicationServer.cxx:65
 TApplicationServer.cxx:66
 TApplicationServer.cxx:67
 TApplicationServer.cxx:68
 TApplicationServer.cxx:69
 TApplicationServer.cxx:70
 TApplicationServer.cxx:71
 TApplicationServer.cxx:72
 TApplicationServer.cxx:73
 TApplicationServer.cxx:74
 TApplicationServer.cxx:75
 TApplicationServer.cxx:76
 TApplicationServer.cxx:77
 TApplicationServer.cxx:78
 TApplicationServer.cxx:79
 TApplicationServer.cxx:80
 TApplicationServer.cxx:81
 TApplicationServer.cxx:82
 TApplicationServer.cxx:83
 TApplicationServer.cxx:84
 TApplicationServer.cxx:85
 TApplicationServer.cxx:86
 TApplicationServer.cxx:87
 TApplicationServer.cxx:88
 TApplicationServer.cxx:89
 TApplicationServer.cxx:90
 TApplicationServer.cxx:91
 TApplicationServer.cxx:92
 TApplicationServer.cxx:93
 TApplicationServer.cxx:94
 TApplicationServer.cxx:95
 TApplicationServer.cxx:96
 TApplicationServer.cxx:97
 TApplicationServer.cxx:98
 TApplicationServer.cxx:99
 TApplicationServer.cxx:100
 TApplicationServer.cxx:101
 TApplicationServer.cxx:102
 TApplicationServer.cxx:103
 TApplicationServer.cxx:104
 TApplicationServer.cxx:105
 TApplicationServer.cxx:106
 TApplicationServer.cxx:107
 TApplicationServer.cxx:108
 TApplicationServer.cxx:109
 TApplicationServer.cxx:110
 TApplicationServer.cxx:111
 TApplicationServer.cxx:112
 TApplicationServer.cxx:113
 TApplicationServer.cxx:114
 TApplicationServer.cxx:115
 TApplicationServer.cxx:116
 TApplicationServer.cxx:117
 TApplicationServer.cxx:118
 TApplicationServer.cxx:119
 TApplicationServer.cxx:120
 TApplicationServer.cxx:121
 TApplicationServer.cxx:122
 TApplicationServer.cxx:123
 TApplicationServer.cxx:124
 TApplicationServer.cxx:125
 TApplicationServer.cxx:126
 TApplicationServer.cxx:127
 TApplicationServer.cxx:128
 TApplicationServer.cxx:129
 TApplicationServer.cxx:130
 TApplicationServer.cxx:131
 TApplicationServer.cxx:132
 TApplicationServer.cxx:133
 TApplicationServer.cxx:134
 TApplicationServer.cxx:135
 TApplicationServer.cxx:136
 TApplicationServer.cxx:137
 TApplicationServer.cxx:138
 TApplicationServer.cxx:139
 TApplicationServer.cxx:140
 TApplicationServer.cxx:141
 TApplicationServer.cxx:142
 TApplicationServer.cxx:143
 TApplicationServer.cxx:144
 TApplicationServer.cxx:145
 TApplicationServer.cxx:146
 TApplicationServer.cxx:147
 TApplicationServer.cxx:148
 TApplicationServer.cxx:149
 TApplicationServer.cxx:150
 TApplicationServer.cxx:151
 TApplicationServer.cxx:152
 TApplicationServer.cxx:153
 TApplicationServer.cxx:154
 TApplicationServer.cxx:155
 TApplicationServer.cxx:156
 TApplicationServer.cxx:157
 TApplicationServer.cxx:158
 TApplicationServer.cxx:159
 TApplicationServer.cxx:160
 TApplicationServer.cxx:161
 TApplicationServer.cxx:162
 TApplicationServer.cxx:163
 TApplicationServer.cxx:164
 TApplicationServer.cxx:165
 TApplicationServer.cxx:166
 TApplicationServer.cxx:167
 TApplicationServer.cxx:168
 TApplicationServer.cxx:169
 TApplicationServer.cxx:170
 TApplicationServer.cxx:171
 TApplicationServer.cxx:172
 TApplicationServer.cxx:173
 TApplicationServer.cxx:174
 TApplicationServer.cxx:175
 TApplicationServer.cxx:176
 TApplicationServer.cxx:177
 TApplicationServer.cxx:178
 TApplicationServer.cxx:179
 TApplicationServer.cxx:180
 TApplicationServer.cxx:181
 TApplicationServer.cxx:182
 TApplicationServer.cxx:183
 TApplicationServer.cxx:184
 TApplicationServer.cxx:185
 TApplicationServer.cxx:186
 TApplicationServer.cxx:187
 TApplicationServer.cxx:188
 TApplicationServer.cxx:189
 TApplicationServer.cxx:190
 TApplicationServer.cxx:191
 TApplicationServer.cxx:192
 TApplicationServer.cxx:193
 TApplicationServer.cxx:194
 TApplicationServer.cxx:195
 TApplicationServer.cxx:196
 TApplicationServer.cxx:197
 TApplicationServer.cxx:198
 TApplicationServer.cxx:199
 TApplicationServer.cxx:200
 TApplicationServer.cxx:201
 TApplicationServer.cxx:202
 TApplicationServer.cxx:203
 TApplicationServer.cxx:204
 TApplicationServer.cxx:205
 TApplicationServer.cxx:206
 TApplicationServer.cxx:207
 TApplicationServer.cxx:208
 TApplicationServer.cxx:209
 TApplicationServer.cxx:210
 TApplicationServer.cxx:211
 TApplicationServer.cxx:212
 TApplicationServer.cxx:213
 TApplicationServer.cxx:214
 TApplicationServer.cxx:215
 TApplicationServer.cxx:216
 TApplicationServer.cxx:217
 TApplicationServer.cxx:218
 TApplicationServer.cxx:219
 TApplicationServer.cxx:220
 TApplicationServer.cxx:221
 TApplicationServer.cxx:222
 TApplicationServer.cxx:223
 TApplicationServer.cxx:224
 TApplicationServer.cxx:225
 TApplicationServer.cxx:226
 TApplicationServer.cxx:227
 TApplicationServer.cxx:228
 TApplicationServer.cxx:229
 TApplicationServer.cxx:230
 TApplicationServer.cxx:231
 TApplicationServer.cxx:232
 TApplicationServer.cxx:233
 TApplicationServer.cxx:234
 TApplicationServer.cxx:235
 TApplicationServer.cxx:236
 TApplicationServer.cxx:237
 TApplicationServer.cxx:238
 TApplicationServer.cxx:239
 TApplicationServer.cxx:240
 TApplicationServer.cxx:241
 TApplicationServer.cxx:242
 TApplicationServer.cxx:243
 TApplicationServer.cxx:244
 TApplicationServer.cxx:245
 TApplicationServer.cxx:246
 TApplicationServer.cxx:247
 TApplicationServer.cxx:248
 TApplicationServer.cxx:249
 TApplicationServer.cxx:250
 TApplicationServer.cxx:251
 TApplicationServer.cxx:252
 TApplicationServer.cxx:253
 TApplicationServer.cxx:254
 TApplicationServer.cxx:255
 TApplicationServer.cxx:256
 TApplicationServer.cxx:257
 TApplicationServer.cxx:258
 TApplicationServer.cxx:259
 TApplicationServer.cxx:260
 TApplicationServer.cxx:261
 TApplicationServer.cxx:262
 TApplicationServer.cxx:263
 TApplicationServer.cxx:264
 TApplicationServer.cxx:265
 TApplicationServer.cxx:266
 TApplicationServer.cxx:267
 TApplicationServer.cxx:268
 TApplicationServer.cxx:269
 TApplicationServer.cxx:270
 TApplicationServer.cxx:271
 TApplicationServer.cxx:272
 TApplicationServer.cxx:273
 TApplicationServer.cxx:274
 TApplicationServer.cxx:275
 TApplicationServer.cxx:276
 TApplicationServer.cxx:277
 TApplicationServer.cxx:278
 TApplicationServer.cxx:279
 TApplicationServer.cxx:280
 TApplicationServer.cxx:281
 TApplicationServer.cxx:282
 TApplicationServer.cxx:283
 TApplicationServer.cxx:284
 TApplicationServer.cxx:285
 TApplicationServer.cxx:286
 TApplicationServer.cxx:287
 TApplicationServer.cxx:288
 TApplicationServer.cxx:289
 TApplicationServer.cxx:290
 TApplicationServer.cxx:291
 TApplicationServer.cxx:292
 TApplicationServer.cxx:293
 TApplicationServer.cxx:294
 TApplicationServer.cxx:295
 TApplicationServer.cxx:296
 TApplicationServer.cxx:297
 TApplicationServer.cxx:298
 TApplicationServer.cxx:299
 TApplicationServer.cxx:300
 TApplicationServer.cxx:301
 TApplicationServer.cxx:302
 TApplicationServer.cxx:303
 TApplicationServer.cxx:304
 TApplicationServer.cxx:305
 TApplicationServer.cxx:306
 TApplicationServer.cxx:307
 TApplicationServer.cxx:308
 TApplicationServer.cxx:309
 TApplicationServer.cxx:310
 TApplicationServer.cxx:311
 TApplicationServer.cxx:312
 TApplicationServer.cxx:313
 TApplicationServer.cxx:314
 TApplicationServer.cxx:315
 TApplicationServer.cxx:316
 TApplicationServer.cxx:317
 TApplicationServer.cxx:318
 TApplicationServer.cxx:319
 TApplicationServer.cxx:320
 TApplicationServer.cxx:321
 TApplicationServer.cxx:322
 TApplicationServer.cxx:323
 TApplicationServer.cxx:324
 TApplicationServer.cxx:325
 TApplicationServer.cxx:326
 TApplicationServer.cxx:327
 TApplicationServer.cxx:328
 TApplicationServer.cxx:329
 TApplicationServer.cxx:330
 TApplicationServer.cxx:331
 TApplicationServer.cxx:332
 TApplicationServer.cxx:333
 TApplicationServer.cxx:334
 TApplicationServer.cxx:335
 TApplicationServer.cxx:336
 TApplicationServer.cxx:337
 TApplicationServer.cxx:338
 TApplicationServer.cxx:339
 TApplicationServer.cxx:340
 TApplicationServer.cxx:341
 TApplicationServer.cxx:342
 TApplicationServer.cxx:343
 TApplicationServer.cxx:344
 TApplicationServer.cxx:345
 TApplicationServer.cxx:346
 TApplicationServer.cxx:347
 TApplicationServer.cxx:348
 TApplicationServer.cxx:349
 TApplicationServer.cxx:350
 TApplicationServer.cxx:351
 TApplicationServer.cxx:352
 TApplicationServer.cxx:353
 TApplicationServer.cxx:354
 TApplicationServer.cxx:355
 TApplicationServer.cxx:356
 TApplicationServer.cxx:357
 TApplicationServer.cxx:358
 TApplicationServer.cxx:359
 TApplicationServer.cxx:360
 TApplicationServer.cxx:361
 TApplicationServer.cxx:362
 TApplicationServer.cxx:363
 TApplicationServer.cxx:364
 TApplicationServer.cxx:365
 TApplicationServer.cxx:366
 TApplicationServer.cxx:367
 TApplicationServer.cxx:368
 TApplicationServer.cxx:369
 TApplicationServer.cxx:370
 TApplicationServer.cxx:371
 TApplicationServer.cxx:372
 TApplicationServer.cxx:373
 TApplicationServer.cxx:374
 TApplicationServer.cxx:375
 TApplicationServer.cxx:376
 TApplicationServer.cxx:377
 TApplicationServer.cxx:378
 TApplicationServer.cxx:379
 TApplicationServer.cxx:380
 TApplicationServer.cxx:381
 TApplicationServer.cxx:382
 TApplicationServer.cxx:383
 TApplicationServer.cxx:384
 TApplicationServer.cxx:385
 TApplicationServer.cxx:386
 TApplicationServer.cxx:387
 TApplicationServer.cxx:388
 TApplicationServer.cxx:389
 TApplicationServer.cxx:390
 TApplicationServer.cxx:391
 TApplicationServer.cxx:392
 TApplicationServer.cxx:393
 TApplicationServer.cxx:394
 TApplicationServer.cxx:395
 TApplicationServer.cxx:396
 TApplicationServer.cxx:397
 TApplicationServer.cxx:398
 TApplicationServer.cxx:399
 TApplicationServer.cxx:400
 TApplicationServer.cxx:401
 TApplicationServer.cxx:402
 TApplicationServer.cxx:403
 TApplicationServer.cxx:404
 TApplicationServer.cxx:405
 TApplicationServer.cxx:406
 TApplicationServer.cxx:407
 TApplicationServer.cxx:408
 TApplicationServer.cxx:409
 TApplicationServer.cxx:410
 TApplicationServer.cxx:411
 TApplicationServer.cxx:412
 TApplicationServer.cxx:413
 TApplicationServer.cxx:414
 TApplicationServer.cxx:415
 TApplicationServer.cxx:416
 TApplicationServer.cxx:417
 TApplicationServer.cxx:418
 TApplicationServer.cxx:419
 TApplicationServer.cxx:420
 TApplicationServer.cxx:421
 TApplicationServer.cxx:422
 TApplicationServer.cxx:423
 TApplicationServer.cxx:424
 TApplicationServer.cxx:425
 TApplicationServer.cxx:426
 TApplicationServer.cxx:427
 TApplicationServer.cxx:428
 TApplicationServer.cxx:429
 TApplicationServer.cxx:430
 TApplicationServer.cxx:431
 TApplicationServer.cxx:432
 TApplicationServer.cxx:433
 TApplicationServer.cxx:434
 TApplicationServer.cxx:435
 TApplicationServer.cxx:436
 TApplicationServer.cxx:437
 TApplicationServer.cxx:438
 TApplicationServer.cxx:439
 TApplicationServer.cxx:440
 TApplicationServer.cxx:441
 TApplicationServer.cxx:442
 TApplicationServer.cxx:443
 TApplicationServer.cxx:444
 TApplicationServer.cxx:445
 TApplicationServer.cxx:446
 TApplicationServer.cxx:447
 TApplicationServer.cxx:448
 TApplicationServer.cxx:449
 TApplicationServer.cxx:450
 TApplicationServer.cxx:451
 TApplicationServer.cxx:452
 TApplicationServer.cxx:453
 TApplicationServer.cxx:454
 TApplicationServer.cxx:455
 TApplicationServer.cxx:456
 TApplicationServer.cxx:457
 TApplicationServer.cxx:458
 TApplicationServer.cxx:459
 TApplicationServer.cxx:460
 TApplicationServer.cxx:461
 TApplicationServer.cxx:462
 TApplicationServer.cxx:463
 TApplicationServer.cxx:464
 TApplicationServer.cxx:465
 TApplicationServer.cxx:466
 TApplicationServer.cxx:467
 TApplicationServer.cxx:468
 TApplicationServer.cxx:469
 TApplicationServer.cxx:470
 TApplicationServer.cxx:471
 TApplicationServer.cxx:472
 TApplicationServer.cxx:473
 TApplicationServer.cxx:474
 TApplicationServer.cxx:475
 TApplicationServer.cxx:476
 TApplicationServer.cxx:477
 TApplicationServer.cxx:478
 TApplicationServer.cxx:479
 TApplicationServer.cxx:480
 TApplicationServer.cxx:481
 TApplicationServer.cxx:482
 TApplicationServer.cxx:483
 TApplicationServer.cxx:484
 TApplicationServer.cxx:485
 TApplicationServer.cxx:486
 TApplicationServer.cxx:487
 TApplicationServer.cxx:488
 TApplicationServer.cxx:489
 TApplicationServer.cxx:490
 TApplicationServer.cxx:491
 TApplicationServer.cxx:492
 TApplicationServer.cxx:493
 TApplicationServer.cxx:494
 TApplicationServer.cxx:495
 TApplicationServer.cxx:496
 TApplicationServer.cxx:497
 TApplicationServer.cxx:498
 TApplicationServer.cxx:499
 TApplicationServer.cxx:500
 TApplicationServer.cxx:501
 TApplicationServer.cxx:502
 TApplicationServer.cxx:503
 TApplicationServer.cxx:504
 TApplicationServer.cxx:505
 TApplicationServer.cxx:506
 TApplicationServer.cxx:507
 TApplicationServer.cxx:508
 TApplicationServer.cxx:509
 TApplicationServer.cxx:510
 TApplicationServer.cxx:511
 TApplicationServer.cxx:512
 TApplicationServer.cxx:513
 TApplicationServer.cxx:514
 TApplicationServer.cxx:515
 TApplicationServer.cxx:516
 TApplicationServer.cxx:517
 TApplicationServer.cxx:518
 TApplicationServer.cxx:519
 TApplicationServer.cxx:520
 TApplicationServer.cxx:521
 TApplicationServer.cxx:522
 TApplicationServer.cxx:523
 TApplicationServer.cxx:524
 TApplicationServer.cxx:525
 TApplicationServer.cxx:526
 TApplicationServer.cxx:527
 TApplicationServer.cxx:528
 TApplicationServer.cxx:529
 TApplicationServer.cxx:530
 TApplicationServer.cxx:531
 TApplicationServer.cxx:532
 TApplicationServer.cxx:533
 TApplicationServer.cxx:534
 TApplicationServer.cxx:535
 TApplicationServer.cxx:536
 TApplicationServer.cxx:537
 TApplicationServer.cxx:538
 TApplicationServer.cxx:539
 TApplicationServer.cxx:540
 TApplicationServer.cxx:541
 TApplicationServer.cxx:542
 TApplicationServer.cxx:543
 TApplicationServer.cxx:544
 TApplicationServer.cxx:545
 TApplicationServer.cxx:546
 TApplicationServer.cxx:547
 TApplicationServer.cxx:548
 TApplicationServer.cxx:549
 TApplicationServer.cxx:550
 TApplicationServer.cxx:551
 TApplicationServer.cxx:552
 TApplicationServer.cxx:553
 TApplicationServer.cxx:554
 TApplicationServer.cxx:555
 TApplicationServer.cxx:556
 TApplicationServer.cxx:557
 TApplicationServer.cxx:558
 TApplicationServer.cxx:559
 TApplicationServer.cxx:560
 TApplicationServer.cxx:561
 TApplicationServer.cxx:562
 TApplicationServer.cxx:563
 TApplicationServer.cxx:564
 TApplicationServer.cxx:565
 TApplicationServer.cxx:566
 TApplicationServer.cxx:567
 TApplicationServer.cxx:568
 TApplicationServer.cxx:569
 TApplicationServer.cxx:570
 TApplicationServer.cxx:571
 TApplicationServer.cxx:572
 TApplicationServer.cxx:573
 TApplicationServer.cxx:574
 TApplicationServer.cxx:575
 TApplicationServer.cxx:576
 TApplicationServer.cxx:577
 TApplicationServer.cxx:578
 TApplicationServer.cxx:579
 TApplicationServer.cxx:580
 TApplicationServer.cxx:581
 TApplicationServer.cxx:582
 TApplicationServer.cxx:583
 TApplicationServer.cxx:584
 TApplicationServer.cxx:585
 TApplicationServer.cxx:586
 TApplicationServer.cxx:587
 TApplicationServer.cxx:588
 TApplicationServer.cxx:589
 TApplicationServer.cxx:590
 TApplicationServer.cxx:591
 TApplicationServer.cxx:592
 TApplicationServer.cxx:593
 TApplicationServer.cxx:594
 TApplicationServer.cxx:595
 TApplicationServer.cxx:596
 TApplicationServer.cxx:597
 TApplicationServer.cxx:598
 TApplicationServer.cxx:599
 TApplicationServer.cxx:600
 TApplicationServer.cxx:601
 TApplicationServer.cxx:602
 TApplicationServer.cxx:603
 TApplicationServer.cxx:604
 TApplicationServer.cxx:605
 TApplicationServer.cxx:606
 TApplicationServer.cxx:607
 TApplicationServer.cxx:608
 TApplicationServer.cxx:609
 TApplicationServer.cxx:610
 TApplicationServer.cxx:611
 TApplicationServer.cxx:612
 TApplicationServer.cxx:613
 TApplicationServer.cxx:614
 TApplicationServer.cxx:615
 TApplicationServer.cxx:616
 TApplicationServer.cxx:617
 TApplicationServer.cxx:618
 TApplicationServer.cxx:619
 TApplicationServer.cxx:620
 TApplicationServer.cxx:621
 TApplicationServer.cxx:622
 TApplicationServer.cxx:623
 TApplicationServer.cxx:624
 TApplicationServer.cxx:625
 TApplicationServer.cxx:626
 TApplicationServer.cxx:627
 TApplicationServer.cxx:628
 TApplicationServer.cxx:629
 TApplicationServer.cxx:630
 TApplicationServer.cxx:631
 TApplicationServer.cxx:632
 TApplicationServer.cxx:633
 TApplicationServer.cxx:634
 TApplicationServer.cxx:635
 TApplicationServer.cxx:636
 TApplicationServer.cxx:637
 TApplicationServer.cxx:638
 TApplicationServer.cxx:639
 TApplicationServer.cxx:640
 TApplicationServer.cxx:641
 TApplicationServer.cxx:642
 TApplicationServer.cxx:643
 TApplicationServer.cxx:644
 TApplicationServer.cxx:645
 TApplicationServer.cxx:646
 TApplicationServer.cxx:647
 TApplicationServer.cxx:648
 TApplicationServer.cxx:649
 TApplicationServer.cxx:650
 TApplicationServer.cxx:651
 TApplicationServer.cxx:652
 TApplicationServer.cxx:653
 TApplicationServer.cxx:654
 TApplicationServer.cxx:655
 TApplicationServer.cxx:656
 TApplicationServer.cxx:657
 TApplicationServer.cxx:658
 TApplicationServer.cxx:659
 TApplicationServer.cxx:660
 TApplicationServer.cxx:661
 TApplicationServer.cxx:662
 TApplicationServer.cxx:663
 TApplicationServer.cxx:664
 TApplicationServer.cxx:665
 TApplicationServer.cxx:666
 TApplicationServer.cxx:667
 TApplicationServer.cxx:668
 TApplicationServer.cxx:669
 TApplicationServer.cxx:670
 TApplicationServer.cxx:671
 TApplicationServer.cxx:672
 TApplicationServer.cxx:673
 TApplicationServer.cxx:674
 TApplicationServer.cxx:675
 TApplicationServer.cxx:676
 TApplicationServer.cxx:677
 TApplicationServer.cxx:678
 TApplicationServer.cxx:679
 TApplicationServer.cxx:680
 TApplicationServer.cxx:681
 TApplicationServer.cxx:682
 TApplicationServer.cxx:683
 TApplicationServer.cxx:684
 TApplicationServer.cxx:685
 TApplicationServer.cxx:686
 TApplicationServer.cxx:687
 TApplicationServer.cxx:688
 TApplicationServer.cxx:689
 TApplicationServer.cxx:690
 TApplicationServer.cxx:691
 TApplicationServer.cxx:692
 TApplicationServer.cxx:693
 TApplicationServer.cxx:694
 TApplicationServer.cxx:695
 TApplicationServer.cxx:696
 TApplicationServer.cxx:697
 TApplicationServer.cxx:698
 TApplicationServer.cxx:699
 TApplicationServer.cxx:700
 TApplicationServer.cxx:701
 TApplicationServer.cxx:702
 TApplicationServer.cxx:703
 TApplicationServer.cxx:704
 TApplicationServer.cxx:705
 TApplicationServer.cxx:706
 TApplicationServer.cxx:707
 TApplicationServer.cxx:708
 TApplicationServer.cxx:709
 TApplicationServer.cxx:710
 TApplicationServer.cxx:711
 TApplicationServer.cxx:712
 TApplicationServer.cxx:713
 TApplicationServer.cxx:714
 TApplicationServer.cxx:715
 TApplicationServer.cxx:716
 TApplicationServer.cxx:717
 TApplicationServer.cxx:718
 TApplicationServer.cxx:719
 TApplicationServer.cxx:720
 TApplicationServer.cxx:721
 TApplicationServer.cxx:722
 TApplicationServer.cxx:723
 TApplicationServer.cxx:724
 TApplicationServer.cxx:725
 TApplicationServer.cxx:726
 TApplicationServer.cxx:727
 TApplicationServer.cxx:728
 TApplicationServer.cxx:729
 TApplicationServer.cxx:730
 TApplicationServer.cxx:731
 TApplicationServer.cxx:732
 TApplicationServer.cxx:733
 TApplicationServer.cxx:734
 TApplicationServer.cxx:735
 TApplicationServer.cxx:736
 TApplicationServer.cxx:737
 TApplicationServer.cxx:738
 TApplicationServer.cxx:739
 TApplicationServer.cxx:740
 TApplicationServer.cxx:741
 TApplicationServer.cxx:742
 TApplicationServer.cxx:743
 TApplicationServer.cxx:744
 TApplicationServer.cxx:745
 TApplicationServer.cxx:746
 TApplicationServer.cxx:747
 TApplicationServer.cxx:748
 TApplicationServer.cxx:749
 TApplicationServer.cxx:750
 TApplicationServer.cxx:751
 TApplicationServer.cxx:752
 TApplicationServer.cxx:753
 TApplicationServer.cxx:754
 TApplicationServer.cxx:755
 TApplicationServer.cxx:756
 TApplicationServer.cxx:757
 TApplicationServer.cxx:758
 TApplicationServer.cxx:759
 TApplicationServer.cxx:760
 TApplicationServer.cxx:761
 TApplicationServer.cxx:762
 TApplicationServer.cxx:763
 TApplicationServer.cxx:764
 TApplicationServer.cxx:765
 TApplicationServer.cxx:766
 TApplicationServer.cxx:767
 TApplicationServer.cxx:768
 TApplicationServer.cxx:769
 TApplicationServer.cxx:770
 TApplicationServer.cxx:771
 TApplicationServer.cxx:772
 TApplicationServer.cxx:773
 TApplicationServer.cxx:774
 TApplicationServer.cxx:775
 TApplicationServer.cxx:776
 TApplicationServer.cxx:777
 TApplicationServer.cxx:778
 TApplicationServer.cxx:779
 TApplicationServer.cxx:780
 TApplicationServer.cxx:781
 TApplicationServer.cxx:782
 TApplicationServer.cxx:783
 TApplicationServer.cxx:784
 TApplicationServer.cxx:785
 TApplicationServer.cxx:786
 TApplicationServer.cxx:787
 TApplicationServer.cxx:788
 TApplicationServer.cxx:789
 TApplicationServer.cxx:790
 TApplicationServer.cxx:791
 TApplicationServer.cxx:792
 TApplicationServer.cxx:793
 TApplicationServer.cxx:794
 TApplicationServer.cxx:795
 TApplicationServer.cxx:796
 TApplicationServer.cxx:797
 TApplicationServer.cxx:798
 TApplicationServer.cxx:799
 TApplicationServer.cxx:800
 TApplicationServer.cxx:801
 TApplicationServer.cxx:802
 TApplicationServer.cxx:803
 TApplicationServer.cxx:804
 TApplicationServer.cxx:805
 TApplicationServer.cxx:806
 TApplicationServer.cxx:807
 TApplicationServer.cxx:808
 TApplicationServer.cxx:809
 TApplicationServer.cxx:810
 TApplicationServer.cxx:811
 TApplicationServer.cxx:812
 TApplicationServer.cxx:813
 TApplicationServer.cxx:814
 TApplicationServer.cxx:815
 TApplicationServer.cxx:816
 TApplicationServer.cxx:817
 TApplicationServer.cxx:818
 TApplicationServer.cxx:819
 TApplicationServer.cxx:820
 TApplicationServer.cxx:821
 TApplicationServer.cxx:822
 TApplicationServer.cxx:823
 TApplicationServer.cxx:824
 TApplicationServer.cxx:825
 TApplicationServer.cxx:826
 TApplicationServer.cxx:827
 TApplicationServer.cxx:828
 TApplicationServer.cxx:829
 TApplicationServer.cxx:830
 TApplicationServer.cxx:831
 TApplicationServer.cxx:832
 TApplicationServer.cxx:833
 TApplicationServer.cxx:834
 TApplicationServer.cxx:835
 TApplicationServer.cxx:836
 TApplicationServer.cxx:837
 TApplicationServer.cxx:838
 TApplicationServer.cxx:839
 TApplicationServer.cxx:840
 TApplicationServer.cxx:841
 TApplicationServer.cxx:842
 TApplicationServer.cxx:843
 TApplicationServer.cxx:844
 TApplicationServer.cxx:845
 TApplicationServer.cxx:846
 TApplicationServer.cxx:847
 TApplicationServer.cxx:848
 TApplicationServer.cxx:849
 TApplicationServer.cxx:850
 TApplicationServer.cxx:851
 TApplicationServer.cxx:852
 TApplicationServer.cxx:853
 TApplicationServer.cxx:854
 TApplicationServer.cxx:855
 TApplicationServer.cxx:856
 TApplicationServer.cxx:857
 TApplicationServer.cxx:858
 TApplicationServer.cxx:859
 TApplicationServer.cxx:860
 TApplicationServer.cxx:861
 TApplicationServer.cxx:862
 TApplicationServer.cxx:863
 TApplicationServer.cxx:864
 TApplicationServer.cxx:865
 TApplicationServer.cxx:866
 TApplicationServer.cxx:867
 TApplicationServer.cxx:868
 TApplicationServer.cxx:869
 TApplicationServer.cxx:870
 TApplicationServer.cxx:871
 TApplicationServer.cxx:872
 TApplicationServer.cxx:873
 TApplicationServer.cxx:874
 TApplicationServer.cxx:875
 TApplicationServer.cxx:876
 TApplicationServer.cxx:877
 TApplicationServer.cxx:878
 TApplicationServer.cxx:879
 TApplicationServer.cxx:880
 TApplicationServer.cxx:881
 TApplicationServer.cxx:882
 TApplicationServer.cxx:883
 TApplicationServer.cxx:884
 TApplicationServer.cxx:885
 TApplicationServer.cxx:886
 TApplicationServer.cxx:887
 TApplicationServer.cxx:888
 TApplicationServer.cxx:889
 TApplicationServer.cxx:890
 TApplicationServer.cxx:891
 TApplicationServer.cxx:892
 TApplicationServer.cxx:893
 TApplicationServer.cxx:894
 TApplicationServer.cxx:895
 TApplicationServer.cxx:896
 TApplicationServer.cxx:897
 TApplicationServer.cxx:898
 TApplicationServer.cxx:899
 TApplicationServer.cxx:900
 TApplicationServer.cxx:901
 TApplicationServer.cxx:902
 TApplicationServer.cxx:903
 TApplicationServer.cxx:904
 TApplicationServer.cxx:905
 TApplicationServer.cxx:906
 TApplicationServer.cxx:907
 TApplicationServer.cxx:908
 TApplicationServer.cxx:909
 TApplicationServer.cxx:910
 TApplicationServer.cxx:911
 TApplicationServer.cxx:912
 TApplicationServer.cxx:913
 TApplicationServer.cxx:914
 TApplicationServer.cxx:915
 TApplicationServer.cxx:916
 TApplicationServer.cxx:917
 TApplicationServer.cxx:918
 TApplicationServer.cxx:919
 TApplicationServer.cxx:920
 TApplicationServer.cxx:921
 TApplicationServer.cxx:922
 TApplicationServer.cxx:923
 TApplicationServer.cxx:924
 TApplicationServer.cxx:925
 TApplicationServer.cxx:926
 TApplicationServer.cxx:927
 TApplicationServer.cxx:928
 TApplicationServer.cxx:929
 TApplicationServer.cxx:930
 TApplicationServer.cxx:931
 TApplicationServer.cxx:932
 TApplicationServer.cxx:933
 TApplicationServer.cxx:934
 TApplicationServer.cxx:935
 TApplicationServer.cxx:936
 TApplicationServer.cxx:937
 TApplicationServer.cxx:938
 TApplicationServer.cxx:939
 TApplicationServer.cxx:940
 TApplicationServer.cxx:941
 TApplicationServer.cxx:942
 TApplicationServer.cxx:943
 TApplicationServer.cxx:944
 TApplicationServer.cxx:945
 TApplicationServer.cxx:946
 TApplicationServer.cxx:947
 TApplicationServer.cxx:948
 TApplicationServer.cxx:949
 TApplicationServer.cxx:950
 TApplicationServer.cxx:951
 TApplicationServer.cxx:952
 TApplicationServer.cxx:953
 TApplicationServer.cxx:954
 TApplicationServer.cxx:955
 TApplicationServer.cxx:956
 TApplicationServer.cxx:957
 TApplicationServer.cxx:958
 TApplicationServer.cxx:959
 TApplicationServer.cxx:960
 TApplicationServer.cxx:961
 TApplicationServer.cxx:962
 TApplicationServer.cxx:963
 TApplicationServer.cxx:964
 TApplicationServer.cxx:965
 TApplicationServer.cxx:966
 TApplicationServer.cxx:967
 TApplicationServer.cxx:968
 TApplicationServer.cxx:969
 TApplicationServer.cxx:970
 TApplicationServer.cxx:971
 TApplicationServer.cxx:972
 TApplicationServer.cxx:973
 TApplicationServer.cxx:974
 TApplicationServer.cxx:975
 TApplicationServer.cxx:976
 TApplicationServer.cxx:977
 TApplicationServer.cxx:978
 TApplicationServer.cxx:979
 TApplicationServer.cxx:980
 TApplicationServer.cxx:981
 TApplicationServer.cxx:982
 TApplicationServer.cxx:983
 TApplicationServer.cxx:984
 TApplicationServer.cxx:985
 TApplicationServer.cxx:986
 TApplicationServer.cxx:987
 TApplicationServer.cxx:988
 TApplicationServer.cxx:989
 TApplicationServer.cxx:990
 TApplicationServer.cxx:991
 TApplicationServer.cxx:992
 TApplicationServer.cxx:993
 TApplicationServer.cxx:994
 TApplicationServer.cxx:995
 TApplicationServer.cxx:996
 TApplicationServer.cxx:997
 TApplicationServer.cxx:998
 TApplicationServer.cxx:999
 TApplicationServer.cxx:1000
 TApplicationServer.cxx:1001
 TApplicationServer.cxx:1002
 TApplicationServer.cxx:1003
 TApplicationServer.cxx:1004
 TApplicationServer.cxx:1005
 TApplicationServer.cxx:1006
 TApplicationServer.cxx:1007
 TApplicationServer.cxx:1008
 TApplicationServer.cxx:1009
 TApplicationServer.cxx:1010
 TApplicationServer.cxx:1011
 TApplicationServer.cxx:1012
 TApplicationServer.cxx:1013
 TApplicationServer.cxx:1014
 TApplicationServer.cxx:1015
 TApplicationServer.cxx:1016
 TApplicationServer.cxx:1017
 TApplicationServer.cxx:1018
 TApplicationServer.cxx:1019
 TApplicationServer.cxx:1020
 TApplicationServer.cxx:1021
 TApplicationServer.cxx:1022
 TApplicationServer.cxx:1023
 TApplicationServer.cxx:1024
 TApplicationServer.cxx:1025
 TApplicationServer.cxx:1026
 TApplicationServer.cxx:1027
 TApplicationServer.cxx:1028
 TApplicationServer.cxx:1029
 TApplicationServer.cxx:1030
 TApplicationServer.cxx:1031
 TApplicationServer.cxx:1032
 TApplicationServer.cxx:1033
 TApplicationServer.cxx:1034
 TApplicationServer.cxx:1035
 TApplicationServer.cxx:1036
 TApplicationServer.cxx:1037
 TApplicationServer.cxx:1038
 TApplicationServer.cxx:1039
 TApplicationServer.cxx:1040
 TApplicationServer.cxx:1041
 TApplicationServer.cxx:1042
 TApplicationServer.cxx:1043
 TApplicationServer.cxx:1044
 TApplicationServer.cxx:1045
 TApplicationServer.cxx:1046
 TApplicationServer.cxx:1047
 TApplicationServer.cxx:1048
 TApplicationServer.cxx:1049
 TApplicationServer.cxx:1050
 TApplicationServer.cxx:1051
 TApplicationServer.cxx:1052
 TApplicationServer.cxx:1053
 TApplicationServer.cxx:1054
 TApplicationServer.cxx:1055
 TApplicationServer.cxx:1056
 TApplicationServer.cxx:1057
 TApplicationServer.cxx:1058
 TApplicationServer.cxx:1059
 TApplicationServer.cxx:1060
 TApplicationServer.cxx:1061
 TApplicationServer.cxx:1062
 TApplicationServer.cxx:1063
 TApplicationServer.cxx:1064
 TApplicationServer.cxx:1065
 TApplicationServer.cxx:1066
 TApplicationServer.cxx:1067
 TApplicationServer.cxx:1068
 TApplicationServer.cxx:1069
 TApplicationServer.cxx:1070
 TApplicationServer.cxx:1071
 TApplicationServer.cxx:1072
 TApplicationServer.cxx:1073
 TApplicationServer.cxx:1074
 TApplicationServer.cxx:1075
 TApplicationServer.cxx:1076
 TApplicationServer.cxx:1077
 TApplicationServer.cxx:1078
 TApplicationServer.cxx:1079
 TApplicationServer.cxx:1080
 TApplicationServer.cxx:1081
 TApplicationServer.cxx:1082
 TApplicationServer.cxx:1083
 TApplicationServer.cxx:1084
 TApplicationServer.cxx:1085
 TApplicationServer.cxx:1086
 TApplicationServer.cxx:1087
 TApplicationServer.cxx:1088
 TApplicationServer.cxx:1089
 TApplicationServer.cxx:1090
 TApplicationServer.cxx:1091
 TApplicationServer.cxx:1092
 TApplicationServer.cxx:1093
 TApplicationServer.cxx:1094
 TApplicationServer.cxx:1095
 TApplicationServer.cxx:1096
 TApplicationServer.cxx:1097
 TApplicationServer.cxx:1098
 TApplicationServer.cxx:1099
 TApplicationServer.cxx:1100
 TApplicationServer.cxx:1101
 TApplicationServer.cxx:1102
 TApplicationServer.cxx:1103
 TApplicationServer.cxx:1104
 TApplicationServer.cxx:1105
 TApplicationServer.cxx:1106
 TApplicationServer.cxx:1107
 TApplicationServer.cxx:1108
 TApplicationServer.cxx:1109
 TApplicationServer.cxx:1110
 TApplicationServer.cxx:1111
 TApplicationServer.cxx:1112
 TApplicationServer.cxx:1113
 TApplicationServer.cxx:1114
 TApplicationServer.cxx:1115
 TApplicationServer.cxx:1116
 TApplicationServer.cxx:1117
 TApplicationServer.cxx:1118
 TApplicationServer.cxx:1119
 TApplicationServer.cxx:1120
 TApplicationServer.cxx:1121
 TApplicationServer.cxx:1122
 TApplicationServer.cxx:1123
 TApplicationServer.cxx:1124
 TApplicationServer.cxx:1125
 TApplicationServer.cxx:1126
 TApplicationServer.cxx:1127
 TApplicationServer.cxx:1128
 TApplicationServer.cxx:1129
 TApplicationServer.cxx:1130
 TApplicationServer.cxx:1131
 TApplicationServer.cxx:1132
 TApplicationServer.cxx:1133
 TApplicationServer.cxx:1134
 TApplicationServer.cxx:1135
 TApplicationServer.cxx:1136
 TApplicationServer.cxx:1137
 TApplicationServer.cxx:1138
 TApplicationServer.cxx:1139
 TApplicationServer.cxx:1140
 TApplicationServer.cxx:1141
 TApplicationServer.cxx:1142
 TApplicationServer.cxx:1143
 TApplicationServer.cxx:1144
 TApplicationServer.cxx:1145
 TApplicationServer.cxx:1146
 TApplicationServer.cxx:1147
 TApplicationServer.cxx:1148
 TApplicationServer.cxx:1149
 TApplicationServer.cxx:1150
 TApplicationServer.cxx:1151
 TApplicationServer.cxx:1152
 TApplicationServer.cxx:1153
 TApplicationServer.cxx:1154
 TApplicationServer.cxx:1155
 TApplicationServer.cxx:1156
 TApplicationServer.cxx:1157
 TApplicationServer.cxx:1158
 TApplicationServer.cxx:1159
 TApplicationServer.cxx:1160
 TApplicationServer.cxx:1161
 TApplicationServer.cxx:1162
 TApplicationServer.cxx:1163
 TApplicationServer.cxx:1164
 TApplicationServer.cxx:1165
 TApplicationServer.cxx:1166
 TApplicationServer.cxx:1167
 TApplicationServer.cxx:1168
 TApplicationServer.cxx:1169
 TApplicationServer.cxx:1170
 TApplicationServer.cxx:1171
 TApplicationServer.cxx:1172
 TApplicationServer.cxx:1173
 TApplicationServer.cxx:1174
 TApplicationServer.cxx:1175
 TApplicationServer.cxx:1176
 TApplicationServer.cxx:1177
 TApplicationServer.cxx:1178
 TApplicationServer.cxx:1179
 TApplicationServer.cxx:1180
 TApplicationServer.cxx:1181
 TApplicationServer.cxx:1182
 TApplicationServer.cxx:1183
 TApplicationServer.cxx:1184
 TApplicationServer.cxx:1185
 TApplicationServer.cxx:1186
 TApplicationServer.cxx:1187
 TApplicationServer.cxx:1188
 TApplicationServer.cxx:1189
 TApplicationServer.cxx:1190
 TApplicationServer.cxx:1191
 TApplicationServer.cxx:1192
 TApplicationServer.cxx:1193
 TApplicationServer.cxx:1194
 TApplicationServer.cxx:1195
 TApplicationServer.cxx:1196
 TApplicationServer.cxx:1197
 TApplicationServer.cxx:1198
 TApplicationServer.cxx:1199
 TApplicationServer.cxx:1200
 TApplicationServer.cxx:1201
 TApplicationServer.cxx:1202
 TApplicationServer.cxx:1203
 TApplicationServer.cxx:1204
 TApplicationServer.cxx:1205
 TApplicationServer.cxx:1206
 TApplicationServer.cxx:1207
 TApplicationServer.cxx:1208
 TApplicationServer.cxx:1209
 TApplicationServer.cxx:1210
 TApplicationServer.cxx:1211
 TApplicationServer.cxx:1212
 TApplicationServer.cxx:1213
 TApplicationServer.cxx:1214
 TApplicationServer.cxx:1215
 TApplicationServer.cxx:1216
 TApplicationServer.cxx:1217
 TApplicationServer.cxx:1218
 TApplicationServer.cxx:1219
 TApplicationServer.cxx:1220
 TApplicationServer.cxx:1221
 TApplicationServer.cxx:1222
 TApplicationServer.cxx:1223
 TApplicationServer.cxx:1224
 TApplicationServer.cxx:1225
 TApplicationServer.cxx:1226
 TApplicationServer.cxx:1227
 TApplicationServer.cxx:1228
 TApplicationServer.cxx:1229
 TApplicationServer.cxx:1230
 TApplicationServer.cxx:1231
 TApplicationServer.cxx:1232
 TApplicationServer.cxx:1233
 TApplicationServer.cxx:1234
 TApplicationServer.cxx:1235
 TApplicationServer.cxx:1236
 TApplicationServer.cxx:1237
 TApplicationServer.cxx:1238
 TApplicationServer.cxx:1239
 TApplicationServer.cxx:1240
 TApplicationServer.cxx:1241
 TApplicationServer.cxx:1242
 TApplicationServer.cxx:1243
 TApplicationServer.cxx:1244
 TApplicationServer.cxx:1245
 TApplicationServer.cxx:1246
 TApplicationServer.cxx:1247
 TApplicationServer.cxx:1248
 TApplicationServer.cxx:1249
 TApplicationServer.cxx:1250
 TApplicationServer.cxx:1251
 TApplicationServer.cxx:1252
 TApplicationServer.cxx:1253
 TApplicationServer.cxx:1254
 TApplicationServer.cxx:1255
 TApplicationServer.cxx:1256
 TApplicationServer.cxx:1257
 TApplicationServer.cxx:1258
 TApplicationServer.cxx:1259
 TApplicationServer.cxx:1260
 TApplicationServer.cxx:1261
 TApplicationServer.cxx:1262
 TApplicationServer.cxx:1263
 TApplicationServer.cxx:1264
 TApplicationServer.cxx:1265
 TApplicationServer.cxx:1266
 TApplicationServer.cxx:1267
 TApplicationServer.cxx:1268
 TApplicationServer.cxx:1269
 TApplicationServer.cxx:1270
 TApplicationServer.cxx:1271
 TApplicationServer.cxx:1272
 TApplicationServer.cxx:1273
 TApplicationServer.cxx:1274
 TApplicationServer.cxx:1275
 TApplicationServer.cxx:1276
 TApplicationServer.cxx:1277
 TApplicationServer.cxx:1278
 TApplicationServer.cxx:1279
 TApplicationServer.cxx:1280
 TApplicationServer.cxx:1281
 TApplicationServer.cxx:1282
 TApplicationServer.cxx:1283
 TApplicationServer.cxx:1284
 TApplicationServer.cxx:1285
 TApplicationServer.cxx:1286
 TApplicationServer.cxx:1287
 TApplicationServer.cxx:1288
 TApplicationServer.cxx:1289
 TApplicationServer.cxx:1290
 TApplicationServer.cxx:1291
 TApplicationServer.cxx:1292
 TApplicationServer.cxx:1293
 TApplicationServer.cxx:1294
 TApplicationServer.cxx:1295
 TApplicationServer.cxx:1296
 TApplicationServer.cxx:1297
 TApplicationServer.cxx:1298
 TApplicationServer.cxx:1299
 TApplicationServer.cxx:1300
 TApplicationServer.cxx:1301
 TApplicationServer.cxx:1302
 TApplicationServer.cxx:1303
 TApplicationServer.cxx:1304
 TApplicationServer.cxx:1305
 TApplicationServer.cxx:1306
 TApplicationServer.cxx:1307
 TApplicationServer.cxx:1308
 TApplicationServer.cxx:1309