ROOT logo
//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////
// Copyright:
//   GSI, Gesellschaft fuer Schwerionenforschung mbH
//   Planckstr. 1
//   D-64291 Darmstadt
//   Germany
//////////////////////////////////////////////////////////////////////
// HRevBuffer.cc
// ROOT client package for multithreaded Hades remote event server
// created 14. 5.1999 by Horst Goeringer
//////////////////////////////////////////////////////////////////////
//
//  Imported into Hydra as hrevbuffer.cc and hrevbuffer.h by
//  Simon Lang, 08.12.05
//
//////////////////////////////////////////////////////////////////////

#include <signal.h>
#include <unistd.h>
#include <time.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/select.h>

using namespace std;

#include "hrevbuffer.h"           // class definition

ClassImp(HRevBuffer)

Int_t iTimeOut;        // needed in exitCli to handle CTL C
Int_t imySig = 0;      // needed in exitCli to handle CTL C
Int_t iOutMode = 0;    // needed in exitCli to handle CTL C

/* client requests events from server */
typedef struct
{
   Int_t iSize; /* size of comm. buffer without this element (bytes) */
   Int_t iMode;                  /* must be 1: client requests data  */
   Int_t iIdent;/* =1: NOT IN NET REPR. to identify client endian type */
   Int_t iBufRequ;                    /* number of buffers requested */
} srevComm;

/* server sends info to client */
typedef struct
{
   Int_t iSize;   /* size of info buffer without this element (bytes) */
   Int_t iMode;                  /* must be 1: server sends info */
                               /* else: client tries swap */
   Int_t iHeadPar;               /* no. of header parms in buffer */
   Int_t iTimeOut;               /* wait time client after CTL C */
} srevInfo;

/* server sends dummy buffer to client, if no DAQ events available */
typedef struct
{
   Int_t iSize;                             /* size of data following */
   Int_t iBufNo;                             /* current buffer number */
   Int_t iEvtNo;                     /* no. of events in buffer (= 0) */
} sptrevDummy;


static void exitCli(Int_t signal)                /* handles Ctl C */
{
   Int_t iSleep;                                 /* sleep time here */
   Int_t iSocket;

   iSocket = imySig;
   imySig  = -1;
   iSleep  = iTimeOut;

   printf("\n-I- user specified CTL C: ");
   if (iSocket > 0)
   {
      if (iOutMode)
         printf("close connection (socket %d), hold client for %d s\n",
                 iSocket, iSleep);
      else printf("close connection\n");

      if (iSleep) sleep(iSleep);
   }
   else printf("\n");
}


static Int_t rclose(Int_t *piSocket, Int_t iMode)
{
   Int_t iSocket;
   Int_t iRC;
   Int_t iDebug = 0;
   Int_t iError = 0;
   Int_t iClose = 1;
   Char_t cModule[32] = "rclose";
   Char_t cMsg[128] = "";

   if (iMode < 0)
   {
      iMode = -iMode;
      iClose = 0;                      /* no shutdown, only close */
   }
   if ( (iMode < 0) || (iMode > 3) )
   {
      if (iClose == 0) iMode = -iMode;
      printf("-E- %s: invalid shutdown mode: %d\n", cModule, iMode);
      iError = 2;
   }

   iSocket = *piSocket;
   if (iSocket > 0)
   {
      if (iMode < 3)
      {
         iRC = shutdown(iSocket, iMode);
         if (iRC)
         {
            sprintf(cMsg, "-E- %s: shutdown(%d) rc = %d", 
                    cModule, iMode, iRC);
            perror(cMsg);
            iError = -1;
         }
         else if (iDebug)
            printf("    %s: shutdown(%d) successfull\n",
                   cModule, iMode);    
      }

      if (iClose)
      {
         iRC = close(iSocket);
         if (iRC)   
         {
            sprintf(cMsg, "-E- %s: close rc = %d", cModule, iRC);
            perror(cMsg);
            iError = -2;
         }
         else if (iDebug)
            printf("    %s: connection closed\n", cModule);

      } /* (iClose) */

   } /* (iSocket > 0) */
   else
   {
      printf("-E- %s: invalid socket: %d\n", cModule, iSocket);
      iError = 1;
   }

   *piSocket = 0;
   return(iError);
}



static Long_t swaplw(Long_t *pp_source, Long_t l_len, Long_t* pp_dest)
{
   UChar_t *p_source, *p_dest, *p_s, *p_d;
   ULong_t lu_save;

   /* +++ action +++ */
   p_source = (UChar_t *) pp_source;
   p_dest   = (UChar_t *) pp_dest;

   if ( !p_dest)
   {
                                         /* source == destination */
         for (p_d = (UChar_t *) p_source,
              p_s = (UChar_t *) &lu_save;
              p_d < p_source + (l_len * 4);
              )
         {
             lu_save = *( (Long_t *) p_d);
             p_s    += 4;                 /* increment source      */
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
         }
   } else{
                                          /* source != destination */
         for (p_s = (UChar_t *) p_source,
              p_d = (UChar_t *) p_dest;
              p_s < p_source + (l_len * 4);
              p_s += 4)
         {
             p_s     += 4;                /* increment source      */
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
             *(p_d++) = *(--p_s);
         }

   }

   return(1);
}



HRevBuffer::HRevBuffer(Int_t iMode)
{
   iSwap = 0;
   iSocket = 0;
   iEvtPar = 0;
   iBufSize = 0;

   signal(SIGINT, &exitCli);                   // from now catch Ctl C

   iDebug = iMode;
   iOutMode = iMode;
   if (iDebug == 1)
      cout << "-I- client runs in debug mode (1)" << endl;
   else if (iDebug == 2)
      cout << "-I- client shows buffer numbers and select/receive (mode 2)"
           << endl;
   else if (iDebug == 3)
      cout << "-I- client shows buffer numbers (mode 3)" << endl;

   iBufSizeAlloc = 32768;
   piBuf = new Int_t [iBufSizeAlloc/sizeof(int)];        // 32k buffer

   // cout << "    HRevBuffer() executed" << endl;

}  // constructor



HRevBuffer::~HRevBuffer()
{
   // cout << "    ~HRevBuffer() ..." << endl;
   delete [] piBuf;
   piNextEvt = 0;
   // cout << "    ~HRevBuffer() executed" << endl;

} // destructor



TSocket *HRevBuffer::RevOpen (const Char_t *pNode, Int_t iPort, Int_t iEvent)
{
   if (iEvent < 0)
   {
      cout << "-E- number of requested events (" << iEvent
           << ") invalid" << endl;
      return(0);
   }
   iEvtMax = iEvent;
   iEvtNo = 0;   
   iBufNo = 0;   
   iBufNo1 = 0;   
   iBufNo2 = 0;   

   if (!iSocket)   
   {
      iEvtNo = -1;            // initialization (info buffer) required
      if (iPort == 0) iPort = 7031;               // default for Hades 
      cout << "-I- open connection to server " << pNode 
           << ":" << iPort << endl;

      pTSocket = new TSocket(pNode, iPort);
      if ( !pTSocket->IsValid() )
      {
         cout << "-E- open connection to server " << pNode 
              << " failed" << endl;
         return(0);
      }
      cout << "    connection to server " << pNode 
           << ":" << iPort << " okay" << endl;

      iSocket = pTSocket->GetDescriptor();
      imySig = iSocket;
      if (iDebug == 1)
         cout << "    new socket " << iSocket << endl;
   }
   else if (iDebug == 1)
      cout << "-D- still socket " << iSocket << endl;

   return(pTSocket);

} // RevOpen



UInt_t *HRevBuffer::RevGet(TSocket *pSocket, Int_t iFlush)
{
   Int_t iint = sizeof(int);
   Int_t ibyte, ilen, inew = 0;
   Int_t imaxSE = 20;
   Int_t indSize[20];                                 // index imaxSE
   Int_t ioff=0, irem, ind, ii, jj;

   Char_t cMsg[128] = "";
   Char_t *pcBuf;
   Int_t iSize, iRC;

   Int_t iError = 0;
   Int_t iRetry;
   Int_t iRetryMax = 1000;
   Int_t iRetryFirst;
   Int_t iRetryRecv = 0;         // count retries of recv call
   Int_t iRetryRecvLim = 1;      // max. no. of succeeding retries

   Int_t *piComm;
   srevComm sComm;
   Int_t iCommSize = sizeof(sComm);      // size comm. buffer (byte)

   Int_t *piInfo;
   srevInfo sInfo;
   Int_t iInfoSize = sizeof(sInfo);      // size info buffer (byte)
   Int_t iBufNoServ;                     // buffer no., from server

   if (iEvtNo >= iEvtMax) goto gEndGet;

   piComm = &(sComm.iSize);              // communication buffer
   sComm.iSize = htonl(iCommSize-iint);  // size of data following 
   sComm.iMode = htonl(1);               // required: get events
   sComm.iIdent = 1;                     // required: tell endian type
   sComm.iBufRequ = htonl(1);            // send one buffer

   // initialize communication with server
   if (iEvtNo == -1)
   {
      if (iDebug == 1)
         cout << "-D- commbuf (data size " << ntohl(sComm.iSize)
              << " byte): mode(1) " << ntohl(sComm.iMode)
              << ", request " <<  ntohl(sComm.iBufRequ) 
              << " event buffer(s)" << endl;

      // request event buffer from server
      ilen = pSocket->SendRaw(piComm, iCommSize, kDefault);
      if (ilen < 0)
      {
         cout << "-E- sending request for events to server, rc = "
              << ilen << endl;
         iError = 1;
         goto gEndGet;
      }

      if (iDebug == 1)
         cout << "    communication buffer sent (request info buffer) "
              << endl;

      // receive info buffer from server
      piInfo = &(sInfo.iSize);
      ilen = pSocket->RecvRaw(piInfo, iInfoSize, kDefault);
      if (ilen < 0)
      {
         cout << "-E- receiving info buffer from server, rc = "
              << ilen << endl;
         iError = 1;
         goto gEndGet;
      }

      iHeadPar = ntohl(sInfo.iHeadPar);
      iTimeOut = ntohl(sInfo.iTimeOut);
      if (iDebug == 1)
      {
         cout << "-D- info buffer received:" << endl;
         cout << "    size data " << ntohl(sInfo.iSize)
              << ", mode (1) " << ntohl(sInfo.iMode)
              << ", header parms " << iHeadPar
              << ", timeout " << iTimeOut << endl;
      }

      if ( (ntohl(sInfo.iMode) != 1) ||
           ( (int) ntohl(sInfo.iSize) != iInfoSize-iint) )
      {
         cout << "-E- invalid info buffer received: " << endl;
         cout << "    size data ( " << iInfoSize-iint
              << ") "  << ntohl(sInfo.iSize)
              << ", mode (1) " << ntohl(sInfo.iMode)
              << ", header parms " << iHeadPar
              << ", timeout " << iTimeOut << endl;
         iError = 1;
         goto gEndGet;
      }

      iEvtNo = 0;                                // initilization done
      inew = 1;                                  // request new buffer

   } // (iEvtNo == -1)
   else
   {
      if (iFlush)
      {
         inew = 1;                            // request new buffer
         if (iDebug == 1)
            cout << "-D- skip current buffer" << endl;
      }
      else
      {
         if (iEvtNo >= 0)
         {
            // check if new buffer needed
            if (iEvtRel >= iEvtBuf)
            {
               if (iDebug == 1)
                  cout << "    request new buffer" << endl;
               inew = 1;
            }
            else inew = 0;

         } // (iEvtNo > 0)
      } // (!iFlush)
   } // (iEvtNo != -1)

   // request new buffer
   if (inew)
   {
gRetryBuf:
      iEvtRel = 0;
      iRetry = 0;
      iRetryFirst = 1;
      if (imySig == -1)
         sComm.iBufRequ = htonl(0);         // signal finish to server

      // request next buffer or finish
      ilen = pSocket->SendRaw(piComm, iCommSize, kDefault);
      if (ilen < 0)
      {
         cout << "-E- sending request for buffer " << iBufNo+1 
              << " to server, rc = " << ilen << endl;
         iError = 1;
         goto gEndGet;
      }

      if (imySig == -1) goto gEndGet;

      if (iDebug == 1)
         cout << "-D- communication buffer sent (request next buffer) "
              << endl;

gRetryLen:
      // get size of data following
      piBuf[0] = -1;                         // enables receive check
      iSize = iint;
      pcBuf = (Char_t *) piBuf;
      while(iSize > 0)
      {
         if ( (imySig == -1) && (iDebug) )
            cout << "    CTL C detected (before recv len)" << endl;
gNextRecvL:
         iRC = recv(iSocket, pcBuf, iSize, 0);
         if (iRC < 0)
         {
            if (imySig == -1)
            {
               if (iDebug)
               {
                 sprintf(cMsg, "\n-E- receiving data length from server");
                 perror(cMsg);
                 cout << "    CTL C detected (during recv len)" << endl;
               }
               goto gNextRecvL;
            }
            else
            {
               sprintf(cMsg, "\n-E- receiving data length from server");
               perror(cMsg);
               if (iDebug) cout << "    retry" << endl;

               iRetryRecv++;      // count no. of retries to limit them
               if (iRetryRecv > iRetryRecvLim)  // avoid infinite loop 
               {
                  iError = 1;
                  goto gEndGet;
               }
               else goto gNextRecvL;
            }
         }
         if ( iRC == 0 )
         {
            if ( (iDebug == 2) || (iDebug == 3) )
               cout << endl;
            cout << "-E- receiving data length: connection closed by server"
                 << endl;
            iError = 1;
            goto gEndGet;
         }

         iRetryRecv = 0;
         iSize -= iRC;
         pcBuf += iRC;

      } /* while(iSize > 0) */

      if (iDebug == 2)
      {
         printf("Rl:");
         fflush(stdout);
      }

      if ( (imySig == -1) && (iDebug) )
         cout << "    CTL C detected (after recv len)" << endl;

      iBufSize = ntohl(piBuf[0]);
      if (iDebug == 1)
         cout << "    data size received: " << iBufSize << endl;

      if (iBufSize <= 0)
      {
         if (iBufSize == 0)
         {
            if (iDebug)
               cout << endl;
            cout << "-W- server closed connection" << endl;
            cout << "    " << iEvtNo << " of " << iEvtMax
                 << " events received" << endl;
            iError = 1;
            goto gEndGet;
         }

         if (iBufSize == -1)
         {
            if (iRetryFirst)
            {
               cout << endl << "-E- no data length received: ";
               iRetryFirst = 0;
            }
            iRetry++;
            if (iRetry > iRetryMax)
            {
               cout << iRetryMax << "times" << endl;
               iError = 1;
               goto gEndGet;
            }
            goto gRetryLen;
         }
         else
         {
            cout << endl << "-E- invalid data length received: "
                 << iBufSize << endl;
            iError = 1;
         }

         goto gEndGet;
      }
      if (iRetry)
         cout << iRetry << "times" << endl;

      // increase data buffer, if necessary
      if (iBufSize+iint > iBufSizeAlloc)
      {
         delete [] piBuf;
         iBufSizeAlloc = iBufSize+iint;
                     // new total buffer size (including length field)
         piBuf = new Int_t [iBufSizeAlloc/iint];
         piBuf[0] = iBufSize;
                       // keep sent buffer size (without length field)
         if (iDebug == 1)
            cout << "-I- total buffer increased to "
                 << iBufSizeAlloc << " bytes" << endl;
      }

      // get event buffer without length field
      piBuf[1] = -1;                         // enables receive check
      iSize = iBufSize;
      pcBuf = (Char_t *) &(piBuf[1]);
      while(iSize > 0)
      {
         if ( (imySig == -1) && (iDebug) )
            cout << "    CTL C detected (before recv data)" << endl;
gNextRecvD:
         iRC = recv(iSocket, pcBuf, iSize, 0);
         if (iRC < 0)
         {
            if (imySig == -1)
            {
               if (iDebug)
               {
                  sprintf(cMsg, "\n-E- receiving data from server");
                  perror(cMsg);
                  cout << "    CTL C detected (during recv data)" << endl;
               }
               goto gNextRecvD;
            }
            else
            {
               sprintf(cMsg, "\n-E- receiving data from server");
               perror(cMsg);

               iRetryRecv++;      // count no. of retries to limit them
               if (iRetryRecv > iRetryRecvLim)  // avoid infinite loop 
               {
                  iError = 1;
                  goto gEndGet;
               }
               else goto gNextRecvD;
            }
         }
         if ( iRC == 0 )
         {
            if ( (iDebug == 2) || (iDebug == 3) )
               cout << endl;
            cout << "-E- receiving data: connection closed by server"
                 << endl;
            iError = 1;
            goto gEndGet;
         }

         iRetryRecv = 0;
         iSize -= iRC;
         pcBuf += iRC;

      } /* while(iSize > 0) */

      if (iDebug == 2)
      {
         printf("Rd:");
         fflush(stdout);
      }

      if (imySig == -1) 
      {
         if (iDebug)
            cout << "    CTL C detected (after recv data)" << endl;
         goto gEndGet;
      }

      iBufNoServ = ntohl(piBuf[1]);
      iEvtBuf = ntohl(piBuf[2]);
      if (iEvtBuf == 0)
      {
         if (iDebug == 1) 
            printf("    dummy buffer no. %d, %d events\n",
                   iBufNoServ, iEvtBuf);
         printf("*** connection to remote event server okay, but currently no DAQ events (%d)\n",
                iBufNoServ);
         goto gRetryBuf;
      }

      if (!iSwap)
      {
         if ( (piBuf[3] < 1) || (piBuf[3] >= iBufSize) )
            iSwap = 1;              // DDD dirty fix! check piBuf[4] !
      }

      // swap events in buffer (behind buffer header)
      if (iSwap)
      {
	 /*
	  * Hint: There are a lot of basically unnecessary type casts in 
	  * this version of swaplw. One should clean it up.
	  */
	 swaplw( (Long_t*)(&piBuf[1+iHeadPar]), (iBufSize/iint)-iHeadPar, 0);
	 if ( (iBufNo == 0) && (iDebug) )
	    cout << "    Event data swapped" << endl;
      }

      iBufNo++;
      if (iEvtNo == 0)
      {
         iBufNo = 1;                          // restart counting
         iBufNo1 = iBufNoServ;                // keep first buffer no.
      }
      iBufNo2 = iBufNoServ;                   // keep last buffer no.

      if (iDebug >= 2)
      {
         printf("%d:", iBufNoServ);
         fflush(stdout);
      }

      if (iDebug == 1)
      {
         cout << endl << "buffer " << iBufNo
              << " (" << iBufNoServ << "): "
              << " size "
              << iBufSize << " byte" << endl;
      }

      iEvtRel = 1;                      // first event in buffer
      piNextEvt = piBuf + iHeadPar+1;   // ptr first element in buffer

   } // new buffer
   else
   {
      iEvtRel++;
      piNextEvt += iEvtPar;             // skip previous event
      //printf("DDD new event length: %d\n", *piNextEvt);

      // first event after reopen existing connection, no new buffer
      if (iEvtNo == 0)
      {
         iBufNo = 1;                               // restart counting
         iBufNoServ = ntohl(piBuf[1]);
         iBufNo1 = iBufNoServ;

      } // (iEvtNo == 0)
   } // continue with current buffer

   iEvtNo++;                            // total event no.
   ibyte = (piNextEvt[0]/8)*8;
   if ( ibyte < piNextEvt[0] ) ibyte += 8;
   iEvtPar = ibyte/iint;          // no. of parameters with padding

   if (iDebug == 1)
   {
      cout << "    event no. " << iEvtNo << " (" << piNextEvt[3]
           << "): id " << piNextEvt[2] << ", size " << piNextEvt[0] 
           << endl;

      ii = 0;
      indSize[ii] = 0;                           // index event length

      irem = piNextEvt[0] - 32;       // remaining bytes for subevents
      while ( (irem > 0) && (ii < imaxSE) )
      {
         ii++;                                      // count subevents 
         if (ii == 1) ioff = 8;                   // skip event header
         else ioff += ibyte/iint;
         indSize[ii] = ioff; // buffer index of length current subevent

         ibyte = (piNextEvt[ioff]/8)*8;
         if ( ibyte < piNextEvt[ioff] )
            ibyte += 8;                        // padded subevent size
         
         if (irem <= piNextEvt[ioff])                 // last subevent
            irem -= piNextEvt[ioff];
         else irem -= ibyte;

         cout << "      subevent " << ii << ": size " 
              << piNextEvt[ioff];
         if (irem <= 0) cout << endl;
         else cout << ", padded " << ibyte
                   << ", remainder " << irem << endl;

         if (ii == imaxSE-1)
            cout << "-W- only " << ii << " subevents tested" << endl;

      } // while (irem)

      if (iDebug == 2) for (jj=1; jj<=ii; jj++)
      {
         ind = indSize[jj];
         cout << "      subevent " << jj << ": size " << piNextEvt[ind]
              << " (index " << ind << ")" << endl;
      }
   } // (iDebug == 1)

   if (imySig == -1)
   {
      cout << endl << "-D- CTL C specified";
      if (iDebug) cout << " (at end RevGet)" << endl;
      else cout << endl;
      goto gEndGet; 
   }

   if (iEvtNo == iEvtMax)
   {
      cout << endl << "-I- all required events ("
           << iEvtMax << ") received: " << iBufNo << " buffers ("
           << iBufNo1 << " - " << iBufNo2 << ")" << endl;
   }

   return( (UInt_t *) piNextEvt);

gEndGet:
   if ( (iError) || (imySig == -1) )
   {
      if (iDebug)
         cout << "    RevGet: closing connection to server";
      iRC = rclose(&iSocket, 2);
      if ( (iDebug) && (iRC == 0) )
         cout << " - done" << endl;
      imySig = 0;                             // notify CTL C handler
   }
   else if (iDebug)
      cout << "    RevGet: keeping connection to server" << endl;

   return 0 ;

} // RevGet



Int_t HRevBuffer::RevBufsize()
{
   return iBufSize;
} // RevBufsize



void HRevBuffer::RevBufWait( Int_t iWait )
{
   if (iWait > 0) sleep(iWait);
} // RevBufWait



void HRevBuffer::RevClose( TSocket *pSocket )
{
   Int_t iRC;
   Int_t *piComm;
   srevComm sComm;
   Int_t iCommSize = sizeof(sComm);       // size comm. buffer (byte)

   if (imySig < 0) return;        // CTL Y: connection closed elsewhere
   if (iSocket == 0) return;

   // tell server that no more events needed
   piComm = &(sComm.iSize);               // communication buffer
   sComm.iSize = htonl(iCommSize-sizeof(int));// size of data following
   sComm.iMode = htonl(1);                // required
   sComm.iIdent = 1;                      // required: tell endian type
   sComm.iBufRequ = htonl(0);             // no more event buffers

   if (iDebug == 1)
      cout << "-D- send communication buffer (close request, size data "
           << ntohl(sComm.iSize) << " byte): "
           << ntohl(sComm.iMode) << ", "
           << ntohl(sComm.iBufRequ) << endl;

   iRC = pSocket->SendRaw(piComm, iCommSize, kDefault);
   if (iRC < 0)
      cout << "-E- sending close request to server, rc = "
           << iRC << endl;
   else if (iDebug == 1)
      cout << "    close request sent" << endl;

   if (iDebug)
      cout << "    RevClose: closing connection to server";
   iRC = rclose(&iSocket, 2);
   if ( (iDebug) && (iRC == 0) )
      cout << " - done" << endl;

   imySig = 0;                               // notify CTL C handler
   cout << "-I- connection to server closed" << endl;

} // RevClose
 hrevbuffer.cc:1
 hrevbuffer.cc:2
 hrevbuffer.cc:3
 hrevbuffer.cc:4
 hrevbuffer.cc:5
 hrevbuffer.cc:6
 hrevbuffer.cc:7
 hrevbuffer.cc:8
 hrevbuffer.cc:9
 hrevbuffer.cc:10
 hrevbuffer.cc:11
 hrevbuffer.cc:12
 hrevbuffer.cc:13
 hrevbuffer.cc:14
 hrevbuffer.cc:15
 hrevbuffer.cc:16
 hrevbuffer.cc:17
 hrevbuffer.cc:18
 hrevbuffer.cc:19
 hrevbuffer.cc:20
 hrevbuffer.cc:21
 hrevbuffer.cc:22
 hrevbuffer.cc:23
 hrevbuffer.cc:24
 hrevbuffer.cc:25
 hrevbuffer.cc:26
 hrevbuffer.cc:27
 hrevbuffer.cc:28
 hrevbuffer.cc:29
 hrevbuffer.cc:30
 hrevbuffer.cc:31
 hrevbuffer.cc:32
 hrevbuffer.cc:33
 hrevbuffer.cc:34
 hrevbuffer.cc:35
 hrevbuffer.cc:36
 hrevbuffer.cc:37
 hrevbuffer.cc:38
 hrevbuffer.cc:39
 hrevbuffer.cc:40
 hrevbuffer.cc:41
 hrevbuffer.cc:42
 hrevbuffer.cc:43
 hrevbuffer.cc:44
 hrevbuffer.cc:45
 hrevbuffer.cc:46
 hrevbuffer.cc:47
 hrevbuffer.cc:48
 hrevbuffer.cc:49
 hrevbuffer.cc:50
 hrevbuffer.cc:51
 hrevbuffer.cc:52
 hrevbuffer.cc:53
 hrevbuffer.cc:54
 hrevbuffer.cc:55
 hrevbuffer.cc:56
 hrevbuffer.cc:57
 hrevbuffer.cc:58
 hrevbuffer.cc:59
 hrevbuffer.cc:60
 hrevbuffer.cc:61
 hrevbuffer.cc:62
 hrevbuffer.cc:63
 hrevbuffer.cc:64
 hrevbuffer.cc:65
 hrevbuffer.cc:66
 hrevbuffer.cc:67
 hrevbuffer.cc:68
 hrevbuffer.cc:69
 hrevbuffer.cc:70
 hrevbuffer.cc:71
 hrevbuffer.cc:72
 hrevbuffer.cc:73
 hrevbuffer.cc:74
 hrevbuffer.cc:75
 hrevbuffer.cc:76
 hrevbuffer.cc:77
 hrevbuffer.cc:78
 hrevbuffer.cc:79
 hrevbuffer.cc:80
 hrevbuffer.cc:81
 hrevbuffer.cc:82
 hrevbuffer.cc:83
 hrevbuffer.cc:84
 hrevbuffer.cc:85
 hrevbuffer.cc:86
 hrevbuffer.cc:87
 hrevbuffer.cc:88
 hrevbuffer.cc:89
 hrevbuffer.cc:90
 hrevbuffer.cc:91
 hrevbuffer.cc:92
 hrevbuffer.cc:93
 hrevbuffer.cc:94
 hrevbuffer.cc:95
 hrevbuffer.cc:96
 hrevbuffer.cc:97
 hrevbuffer.cc:98
 hrevbuffer.cc:99
 hrevbuffer.cc:100
 hrevbuffer.cc:101
 hrevbuffer.cc:102
 hrevbuffer.cc:103
 hrevbuffer.cc:104
 hrevbuffer.cc:105
 hrevbuffer.cc:106
 hrevbuffer.cc:107
 hrevbuffer.cc:108
 hrevbuffer.cc:109
 hrevbuffer.cc:110
 hrevbuffer.cc:111
 hrevbuffer.cc:112
 hrevbuffer.cc:113
 hrevbuffer.cc:114
 hrevbuffer.cc:115
 hrevbuffer.cc:116
 hrevbuffer.cc:117
 hrevbuffer.cc:118
 hrevbuffer.cc:119
 hrevbuffer.cc:120
 hrevbuffer.cc:121
 hrevbuffer.cc:122
 hrevbuffer.cc:123
 hrevbuffer.cc:124
 hrevbuffer.cc:125
 hrevbuffer.cc:126
 hrevbuffer.cc:127
 hrevbuffer.cc:128
 hrevbuffer.cc:129
 hrevbuffer.cc:130
 hrevbuffer.cc:131
 hrevbuffer.cc:132
 hrevbuffer.cc:133
 hrevbuffer.cc:134
 hrevbuffer.cc:135
 hrevbuffer.cc:136
 hrevbuffer.cc:137
 hrevbuffer.cc:138
 hrevbuffer.cc:139
 hrevbuffer.cc:140
 hrevbuffer.cc:141
 hrevbuffer.cc:142
 hrevbuffer.cc:143
 hrevbuffer.cc:144
 hrevbuffer.cc:145
 hrevbuffer.cc:146
 hrevbuffer.cc:147
 hrevbuffer.cc:148
 hrevbuffer.cc:149
 hrevbuffer.cc:150
 hrevbuffer.cc:151
 hrevbuffer.cc:152
 hrevbuffer.cc:153
 hrevbuffer.cc:154
 hrevbuffer.cc:155
 hrevbuffer.cc:156
 hrevbuffer.cc:157
 hrevbuffer.cc:158
 hrevbuffer.cc:159
 hrevbuffer.cc:160
 hrevbuffer.cc:161
 hrevbuffer.cc:162
 hrevbuffer.cc:163
 hrevbuffer.cc:164
 hrevbuffer.cc:165
 hrevbuffer.cc:166
 hrevbuffer.cc:167
 hrevbuffer.cc:168
 hrevbuffer.cc:169
 hrevbuffer.cc:170
 hrevbuffer.cc:171
 hrevbuffer.cc:172
 hrevbuffer.cc:173
 hrevbuffer.cc:174
 hrevbuffer.cc:175
 hrevbuffer.cc:176
 hrevbuffer.cc:177
 hrevbuffer.cc:178
 hrevbuffer.cc:179
 hrevbuffer.cc:180
 hrevbuffer.cc:181
 hrevbuffer.cc:182
 hrevbuffer.cc:183
 hrevbuffer.cc:184
 hrevbuffer.cc:185
 hrevbuffer.cc:186
 hrevbuffer.cc:187
 hrevbuffer.cc:188
 hrevbuffer.cc:189
 hrevbuffer.cc:190
 hrevbuffer.cc:191
 hrevbuffer.cc:192
 hrevbuffer.cc:193
 hrevbuffer.cc:194
 hrevbuffer.cc:195
 hrevbuffer.cc:196
 hrevbuffer.cc:197
 hrevbuffer.cc:198
 hrevbuffer.cc:199
 hrevbuffer.cc:200
 hrevbuffer.cc:201
 hrevbuffer.cc:202
 hrevbuffer.cc:203
 hrevbuffer.cc:204
 hrevbuffer.cc:205
 hrevbuffer.cc:206
 hrevbuffer.cc:207
 hrevbuffer.cc:208
 hrevbuffer.cc:209
 hrevbuffer.cc:210
 hrevbuffer.cc:211
 hrevbuffer.cc:212
 hrevbuffer.cc:213
 hrevbuffer.cc:214
 hrevbuffer.cc:215
 hrevbuffer.cc:216
 hrevbuffer.cc:217
 hrevbuffer.cc:218
 hrevbuffer.cc:219
 hrevbuffer.cc:220
 hrevbuffer.cc:221
 hrevbuffer.cc:222
 hrevbuffer.cc:223
 hrevbuffer.cc:224
 hrevbuffer.cc:225
 hrevbuffer.cc:226
 hrevbuffer.cc:227
 hrevbuffer.cc:228
 hrevbuffer.cc:229
 hrevbuffer.cc:230
 hrevbuffer.cc:231
 hrevbuffer.cc:232
 hrevbuffer.cc:233
 hrevbuffer.cc:234
 hrevbuffer.cc:235
 hrevbuffer.cc:236
 hrevbuffer.cc:237
 hrevbuffer.cc:238
 hrevbuffer.cc:239
 hrevbuffer.cc:240
 hrevbuffer.cc:241
 hrevbuffer.cc:242
 hrevbuffer.cc:243
 hrevbuffer.cc:244
 hrevbuffer.cc:245
 hrevbuffer.cc:246
 hrevbuffer.cc:247
 hrevbuffer.cc:248
 hrevbuffer.cc:249
 hrevbuffer.cc:250
 hrevbuffer.cc:251
 hrevbuffer.cc:252
 hrevbuffer.cc:253
 hrevbuffer.cc:254
 hrevbuffer.cc:255
 hrevbuffer.cc:256
 hrevbuffer.cc:257
 hrevbuffer.cc:258
 hrevbuffer.cc:259
 hrevbuffer.cc:260
 hrevbuffer.cc:261
 hrevbuffer.cc:262
 hrevbuffer.cc:263
 hrevbuffer.cc:264
 hrevbuffer.cc:265
 hrevbuffer.cc:266
 hrevbuffer.cc:267
 hrevbuffer.cc:268
 hrevbuffer.cc:269
 hrevbuffer.cc:270
 hrevbuffer.cc:271
 hrevbuffer.cc:272
 hrevbuffer.cc:273
 hrevbuffer.cc:274
 hrevbuffer.cc:275
 hrevbuffer.cc:276
 hrevbuffer.cc:277
 hrevbuffer.cc:278
 hrevbuffer.cc:279
 hrevbuffer.cc:280
 hrevbuffer.cc:281
 hrevbuffer.cc:282
 hrevbuffer.cc:283
 hrevbuffer.cc:284
 hrevbuffer.cc:285
 hrevbuffer.cc:286
 hrevbuffer.cc:287
 hrevbuffer.cc:288
 hrevbuffer.cc:289
 hrevbuffer.cc:290
 hrevbuffer.cc:291
 hrevbuffer.cc:292
 hrevbuffer.cc:293
 hrevbuffer.cc:294
 hrevbuffer.cc:295
 hrevbuffer.cc:296
 hrevbuffer.cc:297
 hrevbuffer.cc:298
 hrevbuffer.cc:299
 hrevbuffer.cc:300
 hrevbuffer.cc:301
 hrevbuffer.cc:302
 hrevbuffer.cc:303
 hrevbuffer.cc:304
 hrevbuffer.cc:305
 hrevbuffer.cc:306
 hrevbuffer.cc:307
 hrevbuffer.cc:308
 hrevbuffer.cc:309
 hrevbuffer.cc:310
 hrevbuffer.cc:311
 hrevbuffer.cc:312
 hrevbuffer.cc:313
 hrevbuffer.cc:314
 hrevbuffer.cc:315
 hrevbuffer.cc:316
 hrevbuffer.cc:317
 hrevbuffer.cc:318
 hrevbuffer.cc:319
 hrevbuffer.cc:320
 hrevbuffer.cc:321
 hrevbuffer.cc:322
 hrevbuffer.cc:323
 hrevbuffer.cc:324
 hrevbuffer.cc:325
 hrevbuffer.cc:326
 hrevbuffer.cc:327
 hrevbuffer.cc:328
 hrevbuffer.cc:329
 hrevbuffer.cc:330
 hrevbuffer.cc:331
 hrevbuffer.cc:332
 hrevbuffer.cc:333
 hrevbuffer.cc:334
 hrevbuffer.cc:335
 hrevbuffer.cc:336
 hrevbuffer.cc:337
 hrevbuffer.cc:338
 hrevbuffer.cc:339
 hrevbuffer.cc:340
 hrevbuffer.cc:341
 hrevbuffer.cc:342
 hrevbuffer.cc:343
 hrevbuffer.cc:344
 hrevbuffer.cc:345
 hrevbuffer.cc:346
 hrevbuffer.cc:347
 hrevbuffer.cc:348
 hrevbuffer.cc:349
 hrevbuffer.cc:350
 hrevbuffer.cc:351
 hrevbuffer.cc:352
 hrevbuffer.cc:353
 hrevbuffer.cc:354
 hrevbuffer.cc:355
 hrevbuffer.cc:356
 hrevbuffer.cc:357
 hrevbuffer.cc:358
 hrevbuffer.cc:359
 hrevbuffer.cc:360
 hrevbuffer.cc:361
 hrevbuffer.cc:362
 hrevbuffer.cc:363
 hrevbuffer.cc:364
 hrevbuffer.cc:365
 hrevbuffer.cc:366
 hrevbuffer.cc:367
 hrevbuffer.cc:368
 hrevbuffer.cc:369
 hrevbuffer.cc:370
 hrevbuffer.cc:371
 hrevbuffer.cc:372
 hrevbuffer.cc:373
 hrevbuffer.cc:374
 hrevbuffer.cc:375
 hrevbuffer.cc:376
 hrevbuffer.cc:377
 hrevbuffer.cc:378
 hrevbuffer.cc:379
 hrevbuffer.cc:380
 hrevbuffer.cc:381
 hrevbuffer.cc:382
 hrevbuffer.cc:383
 hrevbuffer.cc:384
 hrevbuffer.cc:385
 hrevbuffer.cc:386
 hrevbuffer.cc:387
 hrevbuffer.cc:388
 hrevbuffer.cc:389
 hrevbuffer.cc:390
 hrevbuffer.cc:391
 hrevbuffer.cc:392
 hrevbuffer.cc:393
 hrevbuffer.cc:394
 hrevbuffer.cc:395
 hrevbuffer.cc:396
 hrevbuffer.cc:397
 hrevbuffer.cc:398
 hrevbuffer.cc:399
 hrevbuffer.cc:400
 hrevbuffer.cc:401
 hrevbuffer.cc:402
 hrevbuffer.cc:403
 hrevbuffer.cc:404
 hrevbuffer.cc:405
 hrevbuffer.cc:406
 hrevbuffer.cc:407
 hrevbuffer.cc:408
 hrevbuffer.cc:409
 hrevbuffer.cc:410
 hrevbuffer.cc:411
 hrevbuffer.cc:412
 hrevbuffer.cc:413
 hrevbuffer.cc:414
 hrevbuffer.cc:415
 hrevbuffer.cc:416
 hrevbuffer.cc:417
 hrevbuffer.cc:418
 hrevbuffer.cc:419
 hrevbuffer.cc:420
 hrevbuffer.cc:421
 hrevbuffer.cc:422
 hrevbuffer.cc:423
 hrevbuffer.cc:424
 hrevbuffer.cc:425
 hrevbuffer.cc:426
 hrevbuffer.cc:427
 hrevbuffer.cc:428
 hrevbuffer.cc:429
 hrevbuffer.cc:430
 hrevbuffer.cc:431
 hrevbuffer.cc:432
 hrevbuffer.cc:433
 hrevbuffer.cc:434
 hrevbuffer.cc:435
 hrevbuffer.cc:436
 hrevbuffer.cc:437
 hrevbuffer.cc:438
 hrevbuffer.cc:439
 hrevbuffer.cc:440
 hrevbuffer.cc:441
 hrevbuffer.cc:442
 hrevbuffer.cc:443
 hrevbuffer.cc:444
 hrevbuffer.cc:445
 hrevbuffer.cc:446
 hrevbuffer.cc:447
 hrevbuffer.cc:448
 hrevbuffer.cc:449
 hrevbuffer.cc:450
 hrevbuffer.cc:451
 hrevbuffer.cc:452
 hrevbuffer.cc:453
 hrevbuffer.cc:454
 hrevbuffer.cc:455
 hrevbuffer.cc:456
 hrevbuffer.cc:457
 hrevbuffer.cc:458
 hrevbuffer.cc:459
 hrevbuffer.cc:460
 hrevbuffer.cc:461
 hrevbuffer.cc:462
 hrevbuffer.cc:463
 hrevbuffer.cc:464
 hrevbuffer.cc:465
 hrevbuffer.cc:466
 hrevbuffer.cc:467
 hrevbuffer.cc:468
 hrevbuffer.cc:469
 hrevbuffer.cc:470
 hrevbuffer.cc:471
 hrevbuffer.cc:472
 hrevbuffer.cc:473
 hrevbuffer.cc:474
 hrevbuffer.cc:475
 hrevbuffer.cc:476
 hrevbuffer.cc:477
 hrevbuffer.cc:478
 hrevbuffer.cc:479
 hrevbuffer.cc:480
 hrevbuffer.cc:481
 hrevbuffer.cc:482
 hrevbuffer.cc:483
 hrevbuffer.cc:484
 hrevbuffer.cc:485
 hrevbuffer.cc:486
 hrevbuffer.cc:487
 hrevbuffer.cc:488
 hrevbuffer.cc:489
 hrevbuffer.cc:490
 hrevbuffer.cc:491
 hrevbuffer.cc:492
 hrevbuffer.cc:493
 hrevbuffer.cc:494
 hrevbuffer.cc:495
 hrevbuffer.cc:496
 hrevbuffer.cc:497
 hrevbuffer.cc:498
 hrevbuffer.cc:499
 hrevbuffer.cc:500
 hrevbuffer.cc:501
 hrevbuffer.cc:502
 hrevbuffer.cc:503
 hrevbuffer.cc:504
 hrevbuffer.cc:505
 hrevbuffer.cc:506
 hrevbuffer.cc:507
 hrevbuffer.cc:508
 hrevbuffer.cc:509
 hrevbuffer.cc:510
 hrevbuffer.cc:511
 hrevbuffer.cc:512
 hrevbuffer.cc:513
 hrevbuffer.cc:514
 hrevbuffer.cc:515
 hrevbuffer.cc:516
 hrevbuffer.cc:517
 hrevbuffer.cc:518
 hrevbuffer.cc:519
 hrevbuffer.cc:520
 hrevbuffer.cc:521
 hrevbuffer.cc:522
 hrevbuffer.cc:523
 hrevbuffer.cc:524
 hrevbuffer.cc:525
 hrevbuffer.cc:526
 hrevbuffer.cc:527
 hrevbuffer.cc:528
 hrevbuffer.cc:529
 hrevbuffer.cc:530
 hrevbuffer.cc:531
 hrevbuffer.cc:532
 hrevbuffer.cc:533
 hrevbuffer.cc:534
 hrevbuffer.cc:535
 hrevbuffer.cc:536
 hrevbuffer.cc:537
 hrevbuffer.cc:538
 hrevbuffer.cc:539
 hrevbuffer.cc:540
 hrevbuffer.cc:541
 hrevbuffer.cc:542
 hrevbuffer.cc:543
 hrevbuffer.cc:544
 hrevbuffer.cc:545
 hrevbuffer.cc:546
 hrevbuffer.cc:547
 hrevbuffer.cc:548
 hrevbuffer.cc:549
 hrevbuffer.cc:550
 hrevbuffer.cc:551
 hrevbuffer.cc:552
 hrevbuffer.cc:553
 hrevbuffer.cc:554
 hrevbuffer.cc:555
 hrevbuffer.cc:556
 hrevbuffer.cc:557
 hrevbuffer.cc:558
 hrevbuffer.cc:559
 hrevbuffer.cc:560
 hrevbuffer.cc:561
 hrevbuffer.cc:562
 hrevbuffer.cc:563
 hrevbuffer.cc:564
 hrevbuffer.cc:565
 hrevbuffer.cc:566
 hrevbuffer.cc:567
 hrevbuffer.cc:568
 hrevbuffer.cc:569
 hrevbuffer.cc:570
 hrevbuffer.cc:571
 hrevbuffer.cc:572
 hrevbuffer.cc:573
 hrevbuffer.cc:574
 hrevbuffer.cc:575
 hrevbuffer.cc:576
 hrevbuffer.cc:577
 hrevbuffer.cc:578
 hrevbuffer.cc:579
 hrevbuffer.cc:580
 hrevbuffer.cc:581
 hrevbuffer.cc:582
 hrevbuffer.cc:583
 hrevbuffer.cc:584
 hrevbuffer.cc:585
 hrevbuffer.cc:586
 hrevbuffer.cc:587
 hrevbuffer.cc:588
 hrevbuffer.cc:589
 hrevbuffer.cc:590
 hrevbuffer.cc:591
 hrevbuffer.cc:592
 hrevbuffer.cc:593
 hrevbuffer.cc:594
 hrevbuffer.cc:595
 hrevbuffer.cc:596
 hrevbuffer.cc:597
 hrevbuffer.cc:598
 hrevbuffer.cc:599
 hrevbuffer.cc:600
 hrevbuffer.cc:601
 hrevbuffer.cc:602
 hrevbuffer.cc:603
 hrevbuffer.cc:604
 hrevbuffer.cc:605
 hrevbuffer.cc:606
 hrevbuffer.cc:607
 hrevbuffer.cc:608
 hrevbuffer.cc:609
 hrevbuffer.cc:610
 hrevbuffer.cc:611
 hrevbuffer.cc:612
 hrevbuffer.cc:613
 hrevbuffer.cc:614
 hrevbuffer.cc:615
 hrevbuffer.cc:616
 hrevbuffer.cc:617
 hrevbuffer.cc:618
 hrevbuffer.cc:619
 hrevbuffer.cc:620
 hrevbuffer.cc:621
 hrevbuffer.cc:622
 hrevbuffer.cc:623
 hrevbuffer.cc:624
 hrevbuffer.cc:625
 hrevbuffer.cc:626
 hrevbuffer.cc:627
 hrevbuffer.cc:628
 hrevbuffer.cc:629
 hrevbuffer.cc:630
 hrevbuffer.cc:631
 hrevbuffer.cc:632
 hrevbuffer.cc:633
 hrevbuffer.cc:634
 hrevbuffer.cc:635
 hrevbuffer.cc:636
 hrevbuffer.cc:637
 hrevbuffer.cc:638
 hrevbuffer.cc:639
 hrevbuffer.cc:640
 hrevbuffer.cc:641
 hrevbuffer.cc:642
 hrevbuffer.cc:643
 hrevbuffer.cc:644
 hrevbuffer.cc:645
 hrevbuffer.cc:646
 hrevbuffer.cc:647
 hrevbuffer.cc:648
 hrevbuffer.cc:649
 hrevbuffer.cc:650
 hrevbuffer.cc:651
 hrevbuffer.cc:652
 hrevbuffer.cc:653
 hrevbuffer.cc:654
 hrevbuffer.cc:655
 hrevbuffer.cc:656
 hrevbuffer.cc:657
 hrevbuffer.cc:658
 hrevbuffer.cc:659
 hrevbuffer.cc:660
 hrevbuffer.cc:661
 hrevbuffer.cc:662
 hrevbuffer.cc:663
 hrevbuffer.cc:664
 hrevbuffer.cc:665
 hrevbuffer.cc:666
 hrevbuffer.cc:667
 hrevbuffer.cc:668
 hrevbuffer.cc:669
 hrevbuffer.cc:670
 hrevbuffer.cc:671
 hrevbuffer.cc:672
 hrevbuffer.cc:673
 hrevbuffer.cc:674
 hrevbuffer.cc:675
 hrevbuffer.cc:676
 hrevbuffer.cc:677
 hrevbuffer.cc:678
 hrevbuffer.cc:679
 hrevbuffer.cc:680
 hrevbuffer.cc:681
 hrevbuffer.cc:682
 hrevbuffer.cc:683
 hrevbuffer.cc:684
 hrevbuffer.cc:685
 hrevbuffer.cc:686
 hrevbuffer.cc:687
 hrevbuffer.cc:688
 hrevbuffer.cc:689
 hrevbuffer.cc:690
 hrevbuffer.cc:691
 hrevbuffer.cc:692
 hrevbuffer.cc:693
 hrevbuffer.cc:694
 hrevbuffer.cc:695
 hrevbuffer.cc:696
 hrevbuffer.cc:697
 hrevbuffer.cc:698
 hrevbuffer.cc:699
 hrevbuffer.cc:700
 hrevbuffer.cc:701
 hrevbuffer.cc:702
 hrevbuffer.cc:703
 hrevbuffer.cc:704
 hrevbuffer.cc:705
 hrevbuffer.cc:706
 hrevbuffer.cc:707
 hrevbuffer.cc:708
 hrevbuffer.cc:709
 hrevbuffer.cc:710
 hrevbuffer.cc:711
 hrevbuffer.cc:712
 hrevbuffer.cc:713
 hrevbuffer.cc:714
 hrevbuffer.cc:715
 hrevbuffer.cc:716
 hrevbuffer.cc:717
 hrevbuffer.cc:718
 hrevbuffer.cc:719
 hrevbuffer.cc:720
 hrevbuffer.cc:721
 hrevbuffer.cc:722
 hrevbuffer.cc:723
 hrevbuffer.cc:724
 hrevbuffer.cc:725
 hrevbuffer.cc:726
 hrevbuffer.cc:727
 hrevbuffer.cc:728
 hrevbuffer.cc:729
 hrevbuffer.cc:730
 hrevbuffer.cc:731
 hrevbuffer.cc:732
 hrevbuffer.cc:733
 hrevbuffer.cc:734
 hrevbuffer.cc:735
 hrevbuffer.cc:736
 hrevbuffer.cc:737
 hrevbuffer.cc:738
 hrevbuffer.cc:739
 hrevbuffer.cc:740
 hrevbuffer.cc:741
 hrevbuffer.cc:742
 hrevbuffer.cc:743
 hrevbuffer.cc:744
 hrevbuffer.cc:745
 hrevbuffer.cc:746
 hrevbuffer.cc:747
 hrevbuffer.cc:748
 hrevbuffer.cc:749
 hrevbuffer.cc:750
 hrevbuffer.cc:751
 hrevbuffer.cc:752
 hrevbuffer.cc:753
 hrevbuffer.cc:754
 hrevbuffer.cc:755
 hrevbuffer.cc:756
 hrevbuffer.cc:757
 hrevbuffer.cc:758
 hrevbuffer.cc:759
 hrevbuffer.cc:760
 hrevbuffer.cc:761
 hrevbuffer.cc:762
 hrevbuffer.cc:763
 hrevbuffer.cc:764
 hrevbuffer.cc:765
 hrevbuffer.cc:766
 hrevbuffer.cc:767
 hrevbuffer.cc:768
 hrevbuffer.cc:769
 hrevbuffer.cc:770
 hrevbuffer.cc:771
 hrevbuffer.cc:772
 hrevbuffer.cc:773
 hrevbuffer.cc:774
 hrevbuffer.cc:775
 hrevbuffer.cc:776
 hrevbuffer.cc:777
 hrevbuffer.cc:778
 hrevbuffer.cc:779
 hrevbuffer.cc:780
 hrevbuffer.cc:781
 hrevbuffer.cc:782
 hrevbuffer.cc:783
 hrevbuffer.cc:784
 hrevbuffer.cc:785
 hrevbuffer.cc:786
 hrevbuffer.cc:787
 hrevbuffer.cc:788
 hrevbuffer.cc:789
 hrevbuffer.cc:790
 hrevbuffer.cc:791
 hrevbuffer.cc:792
 hrevbuffer.cc:793
 hrevbuffer.cc:794
 hrevbuffer.cc:795
 hrevbuffer.cc:796
 hrevbuffer.cc:797
 hrevbuffer.cc:798
 hrevbuffer.cc:799
 hrevbuffer.cc:800
 hrevbuffer.cc:801
 hrevbuffer.cc:802
 hrevbuffer.cc:803
 hrevbuffer.cc:804
 hrevbuffer.cc:805
 hrevbuffer.cc:806
 hrevbuffer.cc:807
 hrevbuffer.cc:808
 hrevbuffer.cc:809
 hrevbuffer.cc:810
 hrevbuffer.cc:811
 hrevbuffer.cc:812
 hrevbuffer.cc:813
 hrevbuffer.cc:814
 hrevbuffer.cc:815
 hrevbuffer.cc:816
 hrevbuffer.cc:817
 hrevbuffer.cc:818
 hrevbuffer.cc:819
 hrevbuffer.cc:820
 hrevbuffer.cc:821
 hrevbuffer.cc:822
 hrevbuffer.cc:823
 hrevbuffer.cc:824
 hrevbuffer.cc:825
 hrevbuffer.cc:826
 hrevbuffer.cc:827
 hrevbuffer.cc:828
 hrevbuffer.cc:829