ROOT logo

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[20];
};
static const struct sqlcxp sqlfpn =
{
    19,
    "horadetruninfoio.pc"
};


static unsigned int sqlctx = 39089155;


static struct sqlexd {
   unsigned long  sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
   unsigned char  **sqphsv;
   unsigned long  *sqphsl;
            int   *sqphss;
            short **sqpind;
            int   *sqpins;
   unsigned long  *sqparm;
   unsigned long  **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
            int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
   unsigned int   sqlpfmem;
   unsigned char  *sqhstv[5];
   unsigned long  sqhstl[5];
            int   sqhsts[5];
            short *sqindv[5];
            int   sqinds[5];
   unsigned long  sqharm[5];
   unsigned long  *sqharc[5];
   unsigned short  sqadto[5];
   unsigned short  sqtdso[5];
} sqlstm = {13,5};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(unsigned char *, signed int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,1,58,0,6,88,0,0,1,1,0,1,0,1,97,0,0,
24,0,0,2,75,0,6,120,0,0,3,3,0,1,0,1,97,0,0,1,97,0,0,2,3,0,0,
51,0,0,3,110,0,6,156,0,0,5,5,0,1,0,1,97,0,0,1,3,0,0,1,3,0,0,2,1,0,0,2,3,0,0,
86,0,0,4,0,0,29,202,0,0,0,0,0,1,0,
101,0,0,5,0,0,31,212,0,0,0,0,0,1,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Created : 14/10/2004 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
//
// HOraDetRunInfoIo
//
// Interface to the analysis run information in Oracle
// It allows to set the quality of runs via a ROOT macro
//
//////////////////////////////////////////////////////////////////////////////

using namespace std;
#include "horadetruninfoio.h"
#include "hdbconn.h"
#include <iostream>
#include <iomanip>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern

// Oracle communication area
#include <oraca.h>
// Include the SQL Communications Area
#include <sqlca.h>

ClassImp(HOraDetRunInfoIo)

HOraDetRunInfoIo::HOraDetRunInfoIo() {
  // Constructor
  pConn=new HDbConn();
  hasErrors=kFALSE;
  numChanges=0;
}

HOraDetRunInfoIo::~HOraDetRunInfoIo() {
  // Destructor
  if (pConn) {
    close();
    delete pConn;
    pConn=0;
  }
}

Bool_t HOraDetRunInfoIo::open(const Char_t* userName,const Char_t* dbName) {
  // Opens an oracle connection (account userName)
  hasErrors=kFALSE;
  numChanges=0;
  return pConn->connectDb(userName,dbName);
}

void HOraDetRunInfoIo::close() {
  // Disconnects from ORACLE
  pConn->closeDbConn();
}

void HOraDetRunInfoIo::print() {
  // Prints information about the database connection
  if (pConn->isOpen()) {
    cout<<"Connected to Oracle-Database as user "<<pConn->getUserName();
    if (pConn->isReadonly()) {
      cout<<" with read-only access\n";
    } else {
      cout<<" with write access\n";
    }
  } else cout<<"*** no connection to Oracle established  ***\n";
}

Bool_t HOraDetRunInfoIo::isOpen() {
  // Returns kTRUE, if connected to Oracle, otherwise kFALSE;
  return pConn->isOpen();
}

Bool_t HOraDetRunInfoIo::setDetector(const Char_t* detName) {
  // Sets the detector name (might fail if insufficient privilege)
  if (!isOpen()) return kFALSE;
  if (strlen(detName)==0) {
    Error("setDetector","Specify detector name");
    return 0;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* detname;
  /* EXEC SQL END DECLARE SECTION; */ 

  detname=(Char_t*)detName;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO errorfound; */ 

  /* EXEC SQL EXECUTE
    BEGIN
      hanal2.hrv_ana.set_detector(:detname);
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hanal2 . hrv_ana . set_detector ( :detname ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)detname;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto errorfound;
  if (sqlca.sqlcode < 0) goto errorfound;
}


  return kTRUE;
errorfound:
  pConn->showSqlError("setDetector");
  hasErrors=kTRUE;
  return kFALSE;
}

Int_t HOraDetRunInfoIo::createComment(const Char_t* author,const Char_t* description) {
  // Creates a new comment and returns the comment id
  if (!isOpen()) return -1;
  if (strlen(author)==0) {
    Error("createComment","Specify author");
    return -1;
  }
  if (strlen(author)==0) {
    Error("createComment","Specify comment");
    return -1;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* auth;
    char* descript;
    int   id;
  /* EXEC SQL END DECLARE SECTION; */ 

  auth=(Char_t*)author;
  descript=(Char_t*)description;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO errorfound; */ 

  /* EXEC SQL EXECUTE
    BEGIN
      hanal2.hrv_ana.create_comment(:auth,:descript,:id);
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 3;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hanal2 . hrv_ana . create_comment ( :auth , :descript\
 , :id ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )24;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)auth;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)descript;
  sqlstm.sqhstl[1] = (unsigned long )0;
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (unsigned char  *)&id;
  sqlstm.sqhstl[2] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         short *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned long )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto errorfound;
  if (sqlca.sqlcode < 0) goto errorfound;
}


  return id;
errorfound:
  pConn->showSqlError("createComment");
  hasErrors=kTRUE;
  return -1;
}

Bool_t HOraDetRunInfoIo::setRunQuality(const Char_t* filename,Int_t quality,
                                       Int_t commentId) {
  // Sets the quality of a run
  if (!isOpen()) return kFALSE;
  if (strlen(filename)==0) {
    Error("setRunQuality","Filename not defined");
    return kFALSE;
  }
  if (commentId<=0) {
    Error("setRunQuality","Comment id not defined");
    return kFALSE;
  }
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* fname;
    int   qualityfac;
    int   commentid;
    char  status;
    int   oldqualityfac;
  /* EXEC SQL END DECLARE SECTION; */ 

  fname=(Char_t*)filename;
  qualityfac=quality;
  commentid=commentId;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorfound; */ 

  /* EXEC SQL WHENEVER NOT FOUND GOTO errorfound; */ 

  /* EXEC SQL EXECUTE
    BEGIN
      hanal2.hrv_ana.set_run_info(:fname,:qualityfac,:commentid,
                                  :status,:oldqualityfac);
    END;
  END-EXEC; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "begin hanal2 . hrv_ana . set_run_info ( :fname , :qualityfa\
c , :commentid , :status , :oldqualityfac ) ; END ;";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )51;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)fname;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)&qualityfac;
  sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )0;
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (unsigned char  *)&commentid;
  sqlstm.sqhstl[2] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )0;
  sqlstm.sqindv[2] = (         short *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned long )0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (unsigned char  *)&status;
  sqlstm.sqhstl[3] = (unsigned long )1;
  sqlstm.sqhsts[3] = (         int  )0;
  sqlstm.sqindv[3] = (         short *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned long )0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (unsigned char  *)&oldqualityfac;
  sqlstm.sqhstl[4] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[4] = (         int  )0;
  sqlstm.sqindv[4] = (         short *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[4] = (unsigned long )0;
  sqlstm.sqadto[4] = (unsigned short )0;
  sqlstm.sqtdso[4] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode == 1403) goto errorfound;
  if (sqlca.sqlcode < 0) goto errorfound;
}


  cout.setf(ios::left,ios::adjustfield);
  cout<<setw(50)<<filename;
  cout.setf(ios::right,ios::adjustfield);
  if (status=='S') {
    cout<<"No change\n";
  } else if (status=='I') { 
    cout<<"New quality: "<<setw(2)<<quality<<'\n';
    numChanges++;
  } else if (status=='U') { 
    cout<<"New quality: "<<setw(2)<<quality<<'\n';
    cout<<setw(63)<<"Old quality: "<<setw(2)<<oldqualityfac<<'\n';
    numChanges++;
  }
  return kTRUE;
errorfound:
  pConn->showSqlError("setRunQuality");
  hasErrors=kTRUE;
  return kFALSE;
}

void HOraDetRunInfoIo::finish() {
  // Asks for commit, if transaction has no errors or makes a rollback
  if (!isOpen()) return;
  cout<<"****************************************************************\n";
  if (hasErrors) rollback();
  else {
    cout<<"Number of changes since last commit/rollback: "<<numChanges<<'\n';
    if (numChanges>0) {
      TString answer;
      cout<<"Do you want to commit the changes (yes or no) > ";
      cin>>answer;
      if (answer.CompareTo("yes")==0) commit();
      else rollback();
    } else rollback();
  }
  cout<<"****************************************************************\n";
}

void HOraDetRunInfoIo::commit() {
  // Commits all changes
  /* EXEC SQL COMMIT WORK; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )86;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  cout<<"***  Transaction committed"<<endl;
  numChanges=0;
  return;
errorfound:
  pConn->showSqlError("commit");
}

void HOraDetRunInfoIo::rollback() {
  // discards all changes since last commit and clears the error flag
  /* EXEC SQL ROLLBACK WORK; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 5;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )101;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorfound;
}


  cout<<"***  Transaction rolled back"<<endl;
  hasErrors=kFALSE;
  numChanges=0;
  return;
errorfound:
  pConn->showSqlError("rollback");
}
 horadetruninfoio.pc.cc:1
 horadetruninfoio.pc.cc:2
 horadetruninfoio.pc.cc:3
 horadetruninfoio.pc.cc:4
 horadetruninfoio.pc.cc:5
 horadetruninfoio.pc.cc:6
 horadetruninfoio.pc.cc:7
 horadetruninfoio.pc.cc:8
 horadetruninfoio.pc.cc:9
 horadetruninfoio.pc.cc:10
 horadetruninfoio.pc.cc:11
 horadetruninfoio.pc.cc:12
 horadetruninfoio.pc.cc:13
 horadetruninfoio.pc.cc:14
 horadetruninfoio.pc.cc:15
 horadetruninfoio.pc.cc:16
 horadetruninfoio.pc.cc:17
 horadetruninfoio.pc.cc:18
 horadetruninfoio.pc.cc:19
 horadetruninfoio.pc.cc:20
 horadetruninfoio.pc.cc:21
 horadetruninfoio.pc.cc:22
 horadetruninfoio.pc.cc:23
 horadetruninfoio.pc.cc:24
 horadetruninfoio.pc.cc:25
 horadetruninfoio.pc.cc:26
 horadetruninfoio.pc.cc:27
 horadetruninfoio.pc.cc:28
 horadetruninfoio.pc.cc:29
 horadetruninfoio.pc.cc:30
 horadetruninfoio.pc.cc:31
 horadetruninfoio.pc.cc:32
 horadetruninfoio.pc.cc:33
 horadetruninfoio.pc.cc:34
 horadetruninfoio.pc.cc:35
 horadetruninfoio.pc.cc:36
 horadetruninfoio.pc.cc:37
 horadetruninfoio.pc.cc:38
 horadetruninfoio.pc.cc:39
 horadetruninfoio.pc.cc:40
 horadetruninfoio.pc.cc:41
 horadetruninfoio.pc.cc:42
 horadetruninfoio.pc.cc:43
 horadetruninfoio.pc.cc:44
 horadetruninfoio.pc.cc:45
 horadetruninfoio.pc.cc:46
 horadetruninfoio.pc.cc:47
 horadetruninfoio.pc.cc:48
 horadetruninfoio.pc.cc:49
 horadetruninfoio.pc.cc:50
 horadetruninfoio.pc.cc:51
 horadetruninfoio.pc.cc:52
 horadetruninfoio.pc.cc:53
 horadetruninfoio.pc.cc:54
 horadetruninfoio.pc.cc:55
 horadetruninfoio.pc.cc:56
 horadetruninfoio.pc.cc:57
 horadetruninfoio.pc.cc:58
 horadetruninfoio.pc.cc:59
 horadetruninfoio.pc.cc:60
 horadetruninfoio.pc.cc:61
 horadetruninfoio.pc.cc:62
 horadetruninfoio.pc.cc:63
 horadetruninfoio.pc.cc:64
 horadetruninfoio.pc.cc:65
 horadetruninfoio.pc.cc:66
 horadetruninfoio.pc.cc:67
 horadetruninfoio.pc.cc:68
 horadetruninfoio.pc.cc:69
 horadetruninfoio.pc.cc:70
 horadetruninfoio.pc.cc:71
 horadetruninfoio.pc.cc:72
 horadetruninfoio.pc.cc:73
 horadetruninfoio.pc.cc:74
 horadetruninfoio.pc.cc:75
 horadetruninfoio.pc.cc:76
 horadetruninfoio.pc.cc:77
 horadetruninfoio.pc.cc:78
 horadetruninfoio.pc.cc:79
 horadetruninfoio.pc.cc:80
 horadetruninfoio.pc.cc:81
 horadetruninfoio.pc.cc:82
 horadetruninfoio.pc.cc:83
 horadetruninfoio.pc.cc:84
 horadetruninfoio.pc.cc:85
 horadetruninfoio.pc.cc:86
 horadetruninfoio.pc.cc:87
 horadetruninfoio.pc.cc:88
 horadetruninfoio.pc.cc:89
 horadetruninfoio.pc.cc:90
 horadetruninfoio.pc.cc:91
 horadetruninfoio.pc.cc:92
 horadetruninfoio.pc.cc:93
 horadetruninfoio.pc.cc:94
 horadetruninfoio.pc.cc:95
 horadetruninfoio.pc.cc:96
 horadetruninfoio.pc.cc:97
 horadetruninfoio.pc.cc:98
 horadetruninfoio.pc.cc:99
 horadetruninfoio.pc.cc:100
 horadetruninfoio.pc.cc:101
 horadetruninfoio.pc.cc:102
 horadetruninfoio.pc.cc:103
 horadetruninfoio.pc.cc:104
 horadetruninfoio.pc.cc:105
 horadetruninfoio.pc.cc:106
 horadetruninfoio.pc.cc:107
 horadetruninfoio.pc.cc:108
 horadetruninfoio.pc.cc:109
 horadetruninfoio.pc.cc:110
 horadetruninfoio.pc.cc:111
 horadetruninfoio.pc.cc:112
 horadetruninfoio.pc.cc:113
 horadetruninfoio.pc.cc:114
 horadetruninfoio.pc.cc:115
 horadetruninfoio.pc.cc:116
 horadetruninfoio.pc.cc:117
 horadetruninfoio.pc.cc:118
 horadetruninfoio.pc.cc:119
 horadetruninfoio.pc.cc:120
 horadetruninfoio.pc.cc:121
 horadetruninfoio.pc.cc:122
 horadetruninfoio.pc.cc:123
 horadetruninfoio.pc.cc:124
 horadetruninfoio.pc.cc:125
 horadetruninfoio.pc.cc:126
 horadetruninfoio.pc.cc:127
 horadetruninfoio.pc.cc:128
 horadetruninfoio.pc.cc:129
 horadetruninfoio.pc.cc:130
 horadetruninfoio.pc.cc:131
 horadetruninfoio.pc.cc:132
 horadetruninfoio.pc.cc:133
 horadetruninfoio.pc.cc:134
 horadetruninfoio.pc.cc:135
 horadetruninfoio.pc.cc:136
 horadetruninfoio.pc.cc:137
 horadetruninfoio.pc.cc:138
 horadetruninfoio.pc.cc:139
 horadetruninfoio.pc.cc:140
 horadetruninfoio.pc.cc:141
 horadetruninfoio.pc.cc:142
 horadetruninfoio.pc.cc:143
 horadetruninfoio.pc.cc:144
 horadetruninfoio.pc.cc:145
 horadetruninfoio.pc.cc:146
 horadetruninfoio.pc.cc:147
 horadetruninfoio.pc.cc:148
 horadetruninfoio.pc.cc:149
 horadetruninfoio.pc.cc:150
 horadetruninfoio.pc.cc:151
 horadetruninfoio.pc.cc:152
 horadetruninfoio.pc.cc:153
 horadetruninfoio.pc.cc:154
 horadetruninfoio.pc.cc:155
 horadetruninfoio.pc.cc:156
 horadetruninfoio.pc.cc:157
 horadetruninfoio.pc.cc:158
 horadetruninfoio.pc.cc:159
 horadetruninfoio.pc.cc:160
 horadetruninfoio.pc.cc:161
 horadetruninfoio.pc.cc:162
 horadetruninfoio.pc.cc:163
 horadetruninfoio.pc.cc:164
 horadetruninfoio.pc.cc:165
 horadetruninfoio.pc.cc:166
 horadetruninfoio.pc.cc:167
 horadetruninfoio.pc.cc:168
 horadetruninfoio.pc.cc:169
 horadetruninfoio.pc.cc:170
 horadetruninfoio.pc.cc:171
 horadetruninfoio.pc.cc:172
 horadetruninfoio.pc.cc:173
 horadetruninfoio.pc.cc:174
 horadetruninfoio.pc.cc:175
 horadetruninfoio.pc.cc:176
 horadetruninfoio.pc.cc:177
 horadetruninfoio.pc.cc:178
 horadetruninfoio.pc.cc:179
 horadetruninfoio.pc.cc:180
 horadetruninfoio.pc.cc:181
 horadetruninfoio.pc.cc:182
 horadetruninfoio.pc.cc:183
 horadetruninfoio.pc.cc:184
 horadetruninfoio.pc.cc:185
 horadetruninfoio.pc.cc:186
 horadetruninfoio.pc.cc:187
 horadetruninfoio.pc.cc:188
 horadetruninfoio.pc.cc:189
 horadetruninfoio.pc.cc:190
 horadetruninfoio.pc.cc:191
 horadetruninfoio.pc.cc:192
 horadetruninfoio.pc.cc:193
 horadetruninfoio.pc.cc:194
 horadetruninfoio.pc.cc:195
 horadetruninfoio.pc.cc:196
 horadetruninfoio.pc.cc:197
 horadetruninfoio.pc.cc:198
 horadetruninfoio.pc.cc:199
 horadetruninfoio.pc.cc:200
 horadetruninfoio.pc.cc:201
 horadetruninfoio.pc.cc:202
 horadetruninfoio.pc.cc:203
 horadetruninfoio.pc.cc:204
 horadetruninfoio.pc.cc:205
 horadetruninfoio.pc.cc:206
 horadetruninfoio.pc.cc:207
 horadetruninfoio.pc.cc:208
 horadetruninfoio.pc.cc:209
 horadetruninfoio.pc.cc:210
 horadetruninfoio.pc.cc:211
 horadetruninfoio.pc.cc:212
 horadetruninfoio.pc.cc:213
 horadetruninfoio.pc.cc:214
 horadetruninfoio.pc.cc:215
 horadetruninfoio.pc.cc:216
 horadetruninfoio.pc.cc:217
 horadetruninfoio.pc.cc:218
 horadetruninfoio.pc.cc:219
 horadetruninfoio.pc.cc:220
 horadetruninfoio.pc.cc:221
 horadetruninfoio.pc.cc:222
 horadetruninfoio.pc.cc:223
 horadetruninfoio.pc.cc:224
 horadetruninfoio.pc.cc:225
 horadetruninfoio.pc.cc:226
 horadetruninfoio.pc.cc:227
 horadetruninfoio.pc.cc:228
 horadetruninfoio.pc.cc:229
 horadetruninfoio.pc.cc:230
 horadetruninfoio.pc.cc:231
 horadetruninfoio.pc.cc:232
 horadetruninfoio.pc.cc:233
 horadetruninfoio.pc.cc:234
 horadetruninfoio.pc.cc:235
 horadetruninfoio.pc.cc:236
 horadetruninfoio.pc.cc:237
 horadetruninfoio.pc.cc:238
 horadetruninfoio.pc.cc:239
 horadetruninfoio.pc.cc:240
 horadetruninfoio.pc.cc:241
 horadetruninfoio.pc.cc:242
 horadetruninfoio.pc.cc:243
 horadetruninfoio.pc.cc:244
 horadetruninfoio.pc.cc:245
 horadetruninfoio.pc.cc:246
 horadetruninfoio.pc.cc:247
 horadetruninfoio.pc.cc:248
 horadetruninfoio.pc.cc:249
 horadetruninfoio.pc.cc:250
 horadetruninfoio.pc.cc:251
 horadetruninfoio.pc.cc:252
 horadetruninfoio.pc.cc:253
 horadetruninfoio.pc.cc:254
 horadetruninfoio.pc.cc:255
 horadetruninfoio.pc.cc:256
 horadetruninfoio.pc.cc:257
 horadetruninfoio.pc.cc:258
 horadetruninfoio.pc.cc:259
 horadetruninfoio.pc.cc:260
 horadetruninfoio.pc.cc:261
 horadetruninfoio.pc.cc:262
 horadetruninfoio.pc.cc:263
 horadetruninfoio.pc.cc:264
 horadetruninfoio.pc.cc:265
 horadetruninfoio.pc.cc:266
 horadetruninfoio.pc.cc:267
 horadetruninfoio.pc.cc:268
 horadetruninfoio.pc.cc:269
 horadetruninfoio.pc.cc:270
 horadetruninfoio.pc.cc:271
 horadetruninfoio.pc.cc:272
 horadetruninfoio.pc.cc:273
 horadetruninfoio.pc.cc:274
 horadetruninfoio.pc.cc:275
 horadetruninfoio.pc.cc:276
 horadetruninfoio.pc.cc:277
 horadetruninfoio.pc.cc:278
 horadetruninfoio.pc.cc:279
 horadetruninfoio.pc.cc:280
 horadetruninfoio.pc.cc:281
 horadetruninfoio.pc.cc:282
 horadetruninfoio.pc.cc:283
 horadetruninfoio.pc.cc:284
 horadetruninfoio.pc.cc:285
 horadetruninfoio.pc.cc:286
 horadetruninfoio.pc.cc:287
 horadetruninfoio.pc.cc:288
 horadetruninfoio.pc.cc:289
 horadetruninfoio.pc.cc:290
 horadetruninfoio.pc.cc:291
 horadetruninfoio.pc.cc:292
 horadetruninfoio.pc.cc:293
 horadetruninfoio.pc.cc:294
 horadetruninfoio.pc.cc:295
 horadetruninfoio.pc.cc:296
 horadetruninfoio.pc.cc:297
 horadetruninfoio.pc.cc:298
 horadetruninfoio.pc.cc:299
 horadetruninfoio.pc.cc:300
 horadetruninfoio.pc.cc:301
 horadetruninfoio.pc.cc:302
 horadetruninfoio.pc.cc:303
 horadetruninfoio.pc.cc:304
 horadetruninfoio.pc.cc:305
 horadetruninfoio.pc.cc:306
 horadetruninfoio.pc.cc:307
 horadetruninfoio.pc.cc:308
 horadetruninfoio.pc.cc:309
 horadetruninfoio.pc.cc:310
 horadetruninfoio.pc.cc:311
 horadetruninfoio.pc.cc:312
 horadetruninfoio.pc.cc:313
 horadetruninfoio.pc.cc:314
 horadetruninfoio.pc.cc:315
 horadetruninfoio.pc.cc:316
 horadetruninfoio.pc.cc:317
 horadetruninfoio.pc.cc:318
 horadetruninfoio.pc.cc:319
 horadetruninfoio.pc.cc:320
 horadetruninfoio.pc.cc:321
 horadetruninfoio.pc.cc:322
 horadetruninfoio.pc.cc:323
 horadetruninfoio.pc.cc:324
 horadetruninfoio.pc.cc:325
 horadetruninfoio.pc.cc:326
 horadetruninfoio.pc.cc:327
 horadetruninfoio.pc.cc:328
 horadetruninfoio.pc.cc:329
 horadetruninfoio.pc.cc:330
 horadetruninfoio.pc.cc:331
 horadetruninfoio.pc.cc:332
 horadetruninfoio.pc.cc:333
 horadetruninfoio.pc.cc:334
 horadetruninfoio.pc.cc:335
 horadetruninfoio.pc.cc:336
 horadetruninfoio.pc.cc:337
 horadetruninfoio.pc.cc:338
 horadetruninfoio.pc.cc:339
 horadetruninfoio.pc.cc:340
 horadetruninfoio.pc.cc:341
 horadetruninfoio.pc.cc:342
 horadetruninfoio.pc.cc:343
 horadetruninfoio.pc.cc:344
 horadetruninfoio.pc.cc:345
 horadetruninfoio.pc.cc:346
 horadetruninfoio.pc.cc:347
 horadetruninfoio.pc.cc:348
 horadetruninfoio.pc.cc:349
 horadetruninfoio.pc.cc:350
 horadetruninfoio.pc.cc:351
 horadetruninfoio.pc.cc:352
 horadetruninfoio.pc.cc:353
 horadetruninfoio.pc.cc:354
 horadetruninfoio.pc.cc:355
 horadetruninfoio.pc.cc:356
 horadetruninfoio.pc.cc:357
 horadetruninfoio.pc.cc:358
 horadetruninfoio.pc.cc:359
 horadetruninfoio.pc.cc:360
 horadetruninfoio.pc.cc:361
 horadetruninfoio.pc.cc:362
 horadetruninfoio.pc.cc:363
 horadetruninfoio.pc.cc:364
 horadetruninfoio.pc.cc:365
 horadetruninfoio.pc.cc:366
 horadetruninfoio.pc.cc:367
 horadetruninfoio.pc.cc:368
 horadetruninfoio.pc.cc:369
 horadetruninfoio.pc.cc:370
 horadetruninfoio.pc.cc:371
 horadetruninfoio.pc.cc:372
 horadetruninfoio.pc.cc:373
 horadetruninfoio.pc.cc:374
 horadetruninfoio.pc.cc:375
 horadetruninfoio.pc.cc:376
 horadetruninfoio.pc.cc:377
 horadetruninfoio.pc.cc:378
 horadetruninfoio.pc.cc:379
 horadetruninfoio.pc.cc:380
 horadetruninfoio.pc.cc:381
 horadetruninfoio.pc.cc:382
 horadetruninfoio.pc.cc:383
 horadetruninfoio.pc.cc:384
 horadetruninfoio.pc.cc:385
 horadetruninfoio.pc.cc:386
 horadetruninfoio.pc.cc:387
 horadetruninfoio.pc.cc:388
 horadetruninfoio.pc.cc:389
 horadetruninfoio.pc.cc:390
 horadetruninfoio.pc.cc:391
 horadetruninfoio.pc.cc:392
 horadetruninfoio.pc.cc:393
 horadetruninfoio.pc.cc:394
 horadetruninfoio.pc.cc:395
 horadetruninfoio.pc.cc:396
 horadetruninfoio.pc.cc:397
 horadetruninfoio.pc.cc:398
 horadetruninfoio.pc.cc:399
 horadetruninfoio.pc.cc:400
 horadetruninfoio.pc.cc:401
 horadetruninfoio.pc.cc:402
 horadetruninfoio.pc.cc:403
 horadetruninfoio.pc.cc:404
 horadetruninfoio.pc.cc:405
 horadetruninfoio.pc.cc:406
 horadetruninfoio.pc.cc:407
 horadetruninfoio.pc.cc:408
 horadetruninfoio.pc.cc:409
 horadetruninfoio.pc.cc:410
 horadetruninfoio.pc.cc:411
 horadetruninfoio.pc.cc:412
 horadetruninfoio.pc.cc:413
 horadetruninfoio.pc.cc:414
 horadetruninfoio.pc.cc:415
 horadetruninfoio.pc.cc:416
 horadetruninfoio.pc.cc:417
 horadetruninfoio.pc.cc:418
 horadetruninfoio.pc.cc:419
 horadetruninfoio.pc.cc:420
 horadetruninfoio.pc.cc:421
 horadetruninfoio.pc.cc:422
 horadetruninfoio.pc.cc:423
 horadetruninfoio.pc.cc:424
 horadetruninfoio.pc.cc:425
 horadetruninfoio.pc.cc:426
 horadetruninfoio.pc.cc:427
 horadetruninfoio.pc.cc:428
 horadetruninfoio.pc.cc:429
 horadetruninfoio.pc.cc:430
 horadetruninfoio.pc.cc:431
 horadetruninfoio.pc.cc:432
 horadetruninfoio.pc.cc:433
 horadetruninfoio.pc.cc:434
 horadetruninfoio.pc.cc:435
 horadetruninfoio.pc.cc:436
 horadetruninfoio.pc.cc:437
 horadetruninfoio.pc.cc:438
 horadetruninfoio.pc.cc:439
 horadetruninfoio.pc.cc:440
 horadetruninfoio.pc.cc:441
 horadetruninfoio.pc.cc:442
 horadetruninfoio.pc.cc:443
 horadetruninfoio.pc.cc:444
 horadetruninfoio.pc.cc:445
 horadetruninfoio.pc.cc:446
 horadetruninfoio.pc.cc:447
 horadetruninfoio.pc.cc:448
 horadetruninfoio.pc.cc:449
 horadetruninfoio.pc.cc:450
 horadetruninfoio.pc.cc:451
 horadetruninfoio.pc.cc:452
 horadetruninfoio.pc.cc:453
 horadetruninfoio.pc.cc:454
 horadetruninfoio.pc.cc:455
 horadetruninfoio.pc.cc:456
 horadetruninfoio.pc.cc:457
 horadetruninfoio.pc.cc:458
 horadetruninfoio.pc.cc:459
 horadetruninfoio.pc.cc:460
 horadetruninfoio.pc.cc:461
 horadetruninfoio.pc.cc:462
 horadetruninfoio.pc.cc:463
 horadetruninfoio.pc.cc:464
 horadetruninfoio.pc.cc:465
 horadetruninfoio.pc.cc:466
 horadetruninfoio.pc.cc:467
 horadetruninfoio.pc.cc:468
 horadetruninfoio.pc.cc:469
 horadetruninfoio.pc.cc:470
 horadetruninfoio.pc.cc:471
 horadetruninfoio.pc.cc:472
 horadetruninfoio.pc.cc:473
 horadetruninfoio.pc.cc:474
 horadetruninfoio.pc.cc:475
 horadetruninfoio.pc.cc:476
 horadetruninfoio.pc.cc:477
 horadetruninfoio.pc.cc:478
 horadetruninfoio.pc.cc:479
 horadetruninfoio.pc.cc:480
 horadetruninfoio.pc.cc:481
 horadetruninfoio.pc.cc:482
 horadetruninfoio.pc.cc:483
 horadetruninfoio.pc.cc:484
 horadetruninfoio.pc.cc:485
 horadetruninfoio.pc.cc:486
 horadetruninfoio.pc.cc:487
 horadetruninfoio.pc.cc:488
 horadetruninfoio.pc.cc:489
 horadetruninfoio.pc.cc:490
 horadetruninfoio.pc.cc:491
 horadetruninfoio.pc.cc:492
 horadetruninfoio.pc.cc:493
 horadetruninfoio.pc.cc:494
 horadetruninfoio.pc.cc:495
 horadetruninfoio.pc.cc:496
 horadetruninfoio.pc.cc:497
 horadetruninfoio.pc.cc:498
 horadetruninfoio.pc.cc:499
 horadetruninfoio.pc.cc:500
 horadetruninfoio.pc.cc:501
 horadetruninfoio.pc.cc:502
 horadetruninfoio.pc.cc:503
 horadetruninfoio.pc.cc:504
 horadetruninfoio.pc.cc:505
 horadetruninfoio.pc.cc:506
 horadetruninfoio.pc.cc:507
 horadetruninfoio.pc.cc:508
 horadetruninfoio.pc.cc:509
 horadetruninfoio.pc.cc:510
 horadetruninfoio.pc.cc:511
 horadetruninfoio.pc.cc:512
 horadetruninfoio.pc.cc:513
 horadetruninfoio.pc.cc:514
 horadetruninfoio.pc.cc:515
 horadetruninfoio.pc.cc:516
 horadetruninfoio.pc.cc:517
 horadetruninfoio.pc.cc:518
 horadetruninfoio.pc.cc:519
 horadetruninfoio.pc.cc:520
 horadetruninfoio.pc.cc:521
 horadetruninfoio.pc.cc:522
 horadetruninfoio.pc.cc:523
 horadetruninfoio.pc.cc:524
 horadetruninfoio.pc.cc:525
 horadetruninfoio.pc.cc:526
 horadetruninfoio.pc.cc:527
 horadetruninfoio.pc.cc:528
 horadetruninfoio.pc.cc:529
 horadetruninfoio.pc.cc:530
 horadetruninfoio.pc.cc:531
 horadetruninfoio.pc.cc:532
 horadetruninfoio.pc.cc:533
 horadetruninfoio.pc.cc:534
 horadetruninfoio.pc.cc:535
 horadetruninfoio.pc.cc:536
 horadetruninfoio.pc.cc:537
 horadetruninfoio.pc.cc:538
 horadetruninfoio.pc.cc:539
 horadetruninfoio.pc.cc:540
 horadetruninfoio.pc.cc:541
 horadetruninfoio.pc.cc:542
 horadetruninfoio.pc.cc:543
 horadetruninfoio.pc.cc:544
 horadetruninfoio.pc.cc:545
 horadetruninfoio.pc.cc:546
 horadetruninfoio.pc.cc:547
 horadetruninfoio.pc.cc:548
 horadetruninfoio.pc.cc:549
 horadetruninfoio.pc.cc:550
 horadetruninfoio.pc.cc:551
 horadetruninfoio.pc.cc:552
 horadetruninfoio.pc.cc:553
 horadetruninfoio.pc.cc:554
 horadetruninfoio.pc.cc:555
 horadetruninfoio.pc.cc:556
 horadetruninfoio.pc.cc:557
 horadetruninfoio.pc.cc:558
 horadetruninfoio.pc.cc:559
 horadetruninfoio.pc.cc:560
 horadetruninfoio.pc.cc:561
 horadetruninfoio.pc.cc:562
 horadetruninfoio.pc.cc:563
 horadetruninfoio.pc.cc:564
 horadetruninfoio.pc.cc:565
 horadetruninfoio.pc.cc:566
 horadetruninfoio.pc.cc:567
 horadetruninfoio.pc.cc:568
 horadetruninfoio.pc.cc:569
 horadetruninfoio.pc.cc:570
 horadetruninfoio.pc.cc:571
 horadetruninfoio.pc.cc:572
 horadetruninfoio.pc.cc:573
 horadetruninfoio.pc.cc:574
 horadetruninfoio.pc.cc:575
 horadetruninfoio.pc.cc:576
 horadetruninfoio.pc.cc:577
 horadetruninfoio.pc.cc:578
 horadetruninfoio.pc.cc:579
 horadetruninfoio.pc.cc:580