diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2fd59736e161af2d4f53e57e75613e8d6fe667f6..6bc1fb3ccf888f1fcf9e5846fed54ca519759ebc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,8 @@ set (CMAKE_CXX_STANDARD 17)
 enable_testing ()
 set (CTEST_OUTPUT_ON_FAILURE 1)
 
+ENABLE_LANGUAGE (Fortran)
+
 # unit testing coverage, does not work yet
 #include (CodeCoverage)
 ##set(COVERAGE_LCOV_EXCLUDES 'Documentation/*')
diff --git a/Documentation/Examples/CMakeLists.txt b/Documentation/Examples/CMakeLists.txt
index 237e7a0b218718a34373fa3f503c12a5486e53f3..35b9908c94473ee9137ba4413e362c0509ea856d 100644
--- a/Documentation/Examples/CMakeLists.txt
+++ b/Documentation/Examples/CMakeLists.txt
@@ -14,6 +14,19 @@ add_executable (stack_example stack_example.cc)
 target_link_libraries (stack_example SuperStupidStack CORSIKAunits CORSIKAlogging)
 install (TARGETS stack_example DESTINATION share/examples)
 
+add_executable (cascade_example cascade_example.cc)
+target_link_libraries (cascade_example SuperStupidStack CORSIKAunits CORSIKAlogging
+   CORSIKArandom
+  CORSIKAsibyll
+  CORSIKAcascade
+  ProcessStackInspector
+  CORSIKAprocesses
+  CORSIKAparticles
+  CORSIKAgeometry
+  CORSIKAprocesssequence
+  )
+install (TARGETS cascade_example DESTINATION share/examples)
+
 add_executable (staticsequence_example staticsequence_example.cc)
 target_link_libraries (staticsequence_example
   CORSIKAprocesssequence
diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
new file mode 100644
index 0000000000000000000000000000000000000000..08a55e7621e8a00481439180beb806be178ddb6c
--- /dev/null
+++ b/Documentation/Examples/cascade_example.cc
@@ -0,0 +1,149 @@
+
+/**
+ * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * See file AUTHORS for a list of contributors.
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
+#include <corsika/cascade/Cascade.h>
+#include <corsika/geometry/LineTrajectory.h>
+#include <corsika/process/ProcessSequence.h>
+#include <corsika/process/stack_inspector/StackInspector.h>
+
+#include <corsika/setup/SetupStack.h>
+#include <corsika/setup/SetupTrajectory.h>
+
+#include <corsika/random/RNGManager.h>
+#include <corsika/cascade/sibyll2.3c.h>
+
+using namespace corsika;
+using namespace corsika::process;
+using namespace corsika::units;
+using namespace corsika::particles;
+using namespace corsika::random;
+
+#include <iostream>
+using namespace std;
+
+static int fCount = 0;
+
+class ProcessSplit : public corsika::process::BaseProcess<ProcessSplit> {
+public:
+  ProcessSplit() {}
+
+  template <typename Particle>
+  double MinStepLength(Particle& p) const {
+    // beam particles for sibyll : 1, 2, 3 for p, pi, k
+    int kBeam   = 1;
+    // target nuclei: A < 18
+    int kTarget = 0.4*16 + 0.6*14;
+    double beamEnergy =  p.GetEnergy() / 1_GeV; 
+    std::cout << "ProcessSplit: " << "MinStep: en: " << beamEnergy << " pid:" << kBeam << std::endl;
+    double prodCrossSection,dummy;
+    sib_sigma_hnuc_(kBeam, kTarget, beamEnergy, prodCrossSection, dummy );
+    std::cout << "ProcessSplit: " << "MinStep: sibyll return: " << prodCrossSection << std::endl;
+    CrossSectionType sig = prodCrossSection  / 1000. * barn;
+    std::cout << "ProcessSplit: " << "MinStep: CrossSection= " << sig << std::endl;
+
+    // calculate interaction length in medium
+
+    // pick random step lenth
+    
+    return prodCrossSection;
+  }
+
+  template <typename Particle, typename Trajectory, typename Stack>
+  EProcessReturn DoContinuous(Particle&, Trajectory&, Stack&) const {
+    // corsika::utls::ignore(p);
+    return EProcessReturn::eOk;
+  }
+
+  template <typename Particle, typename Stack>
+  void DoDiscrete(Particle& p, Stack& s) const {
+    // get energy of particle from stack
+    // stack is in GeV in lab. frame
+    // convert to GeV in cm. frame
+    EnergyType E   = p.GetEnergy();
+    double Ecm = sqrt( 2. * E * 0.93827_GeV ) / 1_GeV ;
+    // FOR NOW: set beam to proton
+    int kBeam   = 13; //p.GetPID();
+    // FOR NOW: set target to proton
+    int kTarget = 1; //p.GetPID();
+    std::cout << "ProcessSplit: " << " DoDiscrete: E(GeV):" << E / 1_GeV << " Ecm(GeV): " << Ecm << std::endl;
+    if (E < 8.5_GeV || Ecm < 10. ) {
+      std::cout << "ProcessSplit: " << " DoDiscrete: dropping particle.." << std::endl;
+      p.Delete();
+      fCount++;
+    } else {
+      //p.SetEnergy(E / 2);
+      //s.NewParticle().SetEnergy(E / 2);
+      
+      // running sibyll
+      sibyll_( kBeam, kTarget, Ecm);
+      int print_unit = 6;
+      sib_list_( print_unit );
+      
+      // delete current particle
+      p.Delete();
+      
+      // add particles from sibyll to stack
+      for(int i=0; i<s_plist_.np; ++i){
+	
+	s.NewParticle().SetEnergy( s_plist_.p[3][i] * 1_GeV );
+      }
+    }
+  }
+
+  void Init() //{ fCount = 0; }
+  {
+    fCount = 0;
+
+    // initialize random numbers for sibyll
+    // FOR NOW USE SIBYLL INTERNAL !!!
+    rnd_ini_();
+    
+    // corsika::random::RNGManager rmng;
+    // const std::string str_name = "s_rndm";
+    // rmng.RegisterRandomStream(str_name);
+
+    // //    corsika::random::RNG srng;
+    // auto srng = rmng.GetRandomStream("s_rndm");
+
+    // test random number generator
+    std::cout << "ProcessSplit: " << " test sequence of random numbers."  << std::endl;
+    int a = 0;
+    for(int i=0; i<5; ++i)
+      std::cout << i << " " << s_rndm_(a) << std::endl;
+    
+    //initialize Sibyll
+    sibyll_ini_();
+  }
+  
+  int GetCount() { return fCount; }
+
+private:
+};
+
+int main(){
+
+  stack_inspector::StackInspector<setup::Stack, setup::Trajectory> p0(true);
+  ProcessSplit p1;
+  const auto sequence = p0 + p1;
+  setup::Stack stack;
+
+  corsika::cascade::Cascade EAS(sequence, stack);
+
+  stack.Clear();
+  auto particle = stack.NewParticle();
+  EnergyType E0 = 100_GeV;
+  particle.SetEnergy(E0);
+  particle.SetPID( Code::Proton );
+  EAS.Init();
+  EAS.Run();
+  cout << "Result: E0=" << E0 / 1_GeV << "GeV, count=" << p1.GetCount() << endl;
+  
+}
diff --git a/Framework/Cascade/CMakeLists.txt b/Framework/Cascade/CMakeLists.txt
index 5dbb843bc79e6b181e47489f331490bb87c495a6..e1f771f7a4643e0ebc7efa6f3c9bdf980f8520bd 100644
--- a/Framework/Cascade/CMakeLists.txt
+++ b/Framework/Cascade/CMakeLists.txt
@@ -9,6 +9,7 @@ set (
 set (
   CORSIKAcascade_HEADERS
   Cascade.h
+  sibyll2.3c.h
   )
 
 #set (
@@ -16,9 +17,23 @@ set (
 #  Cascade.cc
 #  )
 
+set (
+  CORSIKAsibyll_NAMESPACE
+  corsika/cascade
+  )
+
+set (
+  CORSIKAsibyll_SOURCES
+  sibyll2.3c.f
+  rndm_dbl.f
+  )
+add_library (CORSIKAsibyll STATIC ${CORSIKAsibyll_SOURCES})
+
 #add_library (CORSIKAcascade STATIC ${CORSIKAcascade_SOURCES})
 add_library (CORSIKAcascade INTERFACE)
 
+
+
 CORSIKA_COPY_HEADERS_TO_NAMESPACE (CORSIKAcascade ${CORSIKAcascade_NAMESPACE} ${CORSIKAcascade_HEADERS})
 
 #target_link_libraries (
@@ -51,7 +66,9 @@ add_executable (
 
 target_link_libraries (
   testCascade
-#  CORSIKAutls
+  #  CORSIKAutls
+  CORSIKArandom
+  CORSIKAsibyll
   CORSIKAcascade
   ProcessStackInspector
   CORSIKAprocesses
diff --git a/Framework/Cascade/rndm_dbl.f b/Framework/Cascade/rndm_dbl.f
new file mode 100644
index 0000000000000000000000000000000000000000..42db719788f480150f95c2a68d73cc706647586c
--- /dev/null
+++ b/Framework/Cascade/rndm_dbl.f
@@ -0,0 +1,416 @@
+C***********************************************************************
+C
+C    interface to PHOJET double precision random number generator 
+C    for SIBYLL \FR'14
+C
+C***********************************************************************
+      DOUBLE PRECISION FUNCTION S_RNDM(IDUMMY)
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      DUMMY = dble(IDUMMY)
+      S_RNDM= PHO_RNDM(DUMMY)
+      END
+
+C***********************************************************************
+C
+C    initialization routine for double precision random number generator
+C    calls PHO_RNDIN \FR'14
+C
+C***********************************************************************
+      SUBROUTINE RND_INI
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      COMMON /RNDMGAS/ ISET
+      ISET = 0
+      CALL PHO_RNDIN(12,34,56,78)
+      END
+
+
+      DOUBLE PRECISION FUNCTION GASDEV(Idum)
+C***********************************************************************
+C     Gaussian deviation
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /RNDMGAS/ ISET
+      SAVE
+      DATA ISET/0/      
+      gasdev=idum
+      IF (ISET.EQ.0) THEN
+1       V1=2.D0*S_RNDM(0)-1.D0
+        V2=2.D0*S_RNDM(1)-1.D0
+        R=V1**2+V2**2
+        IF(R.GE.1.D0)GO TO 1
+        FAC=SQRT(-2.D0*LOG(R)/R)
+        GSET=V1*FAC
+        GASDEV=V2*FAC
+        ISET=1
+      ELSE
+        GASDEV=GSET
+        ISET=0
+      ENDIF
+      RETURN
+      END
+C***********************************************************************
+      
+
+      DOUBLE PRECISION FUNCTION PHO_RNDM(DUMMY)
+C***********************************************************************
+C
+C    random number generator
+C
+C    initialization by call to PHO_RNDIN needed!
+C     
+C    the algorithm is taken from
+C      G.Marsaglia, A.Zaman: 'Toward a unversal random number generator'
+C      Florida State Univ. preprint FSU-SCRI-87-70
+C
+C    implementation by K. Hahn (Dec. 88), changed to include possibility
+C    of saving / reading generator registers to / from file (R.E. 10/98)
+C
+C    generator should not depend on the hardware (if a real has
+C    at least 24 significant bits in internal representation),
+C    the period is about 2**144,
+C
+C    internal registers:
+C       U(97),C,CD,CM,I,J  - seed values as initialized in PHO_RNDIN
+C
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      SAVE
+
+      COMMON /PORAND/ U(97),C,CD,CM,I,J
+
+ 100  CONTINUE
+      RNDMI = DUMMY
+      RNDMI = U(I)-U(J)
+      IF ( RNDMI.LT.0.D0 ) RNDMI = RNDMI+1.D0
+      U(I) = RNDMI
+      I    = I-1
+      IF ( I.EQ.0 ) I = 97
+      J    = J-1
+      IF ( J.EQ.0 ) J = 97
+      C    = C-CD
+      IF ( C.LT.0.D0 ) C = C+CM
+      RNDMI = RNDMI-C
+      IF ( RNDMI.LT.0.D0 ) RNDMI = RNDMI+1.D0
+
+      IF((ABS(RNDMI).LT.0.D0).OR.(ABS(RNDMI-1.D0).LT.1.D-10)) GOTO 100
+      PHO_RNDM = RNDMI
+
+      END
+
+
+CDECK  ID>, PHO_RNDIN
+      SUBROUTINE PHO_RNDIN(NA1,NA2,NA3,NB1)
+C***********************************************************************
+C
+C     initialization of PHO_RNDM, has to be called before using PHO_RNDM
+C
+C     input:
+C       NA1,NA2,NA3,NB1  - values for initializing the generator
+C                          NA? must be in 1..178 and not all 1;
+C                          12,34,56  are the standard values
+C                          NB1 must be in 1..168;
+C                          78  is the standard value
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      SAVE
+
+      COMMON /PORAND/ U(97),C,CD,CM,I,J
+      MA1 = NA1
+      MA2 = NA2
+      MA3 = NA3
+      MB1 = NB1
+      I   = 97
+      J   = 33
+      DO 20 II2 = 1,97
+        S = 0.D0
+        T = 0.5D0
+        DO 10 II1 = 1,24
+          MAT  = MOD(MOD(MA1*MA2,179)*MA3,179)
+          MA1  = MA2
+          MA2  = MA3
+          MA3  = MAT
+          MB1  = MOD(53*MB1+1,169)
+          IF ( MOD(MB1*MAT,64).GE.32 ) S = S+T
+          T    = 0.5D0*T
+ 10     CONTINUE
+        U(II2) = S
+ 20   CONTINUE
+      C  =   362436.D0/16777216.D0
+      CD =  7654321.D0/16777216.D0
+      CM = 16777213.D0/16777216.D0
+
+      END
+
+
+CDECK  ID>, PHO_RNDSI
+      SUBROUTINE PHO_RNDSI(UIN,CIN,CDIN,CMIN,IIN,JIN)
+C***********************************************************************
+C
+C     updates internal random number generator registers using
+C     registers given as arguments
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      SAVE
+
+      DIMENSION UIN(97)
+      COMMON /PORAND/ U(97),C,CD,CM,I,J
+      DO 10 KKK = 1,97
+        U(KKK) = UIN(KKK)
+ 10   CONTINUE
+      C  = CIN
+      CD = CDIN
+      CM = CMIN
+      I  = IIN
+      J  = JIN
+
+      END
+
+
+CDECK  ID>, PHO_RNDSO
+      SUBROUTINE PHO_RNDSO(UOUT,COUT,CDOUT,CMOUT,IOUT,JOUT)
+C***********************************************************************
+C
+C     copies internal registers from randon number generator
+C     to arguments
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      SAVE
+
+      DIMENSION UOUT(97)
+      COMMON /PORAND/ U(97),C,CD,CM,I,J
+      DO 10 KKK = 1,97
+        UOUT(KKK) = U(KKK)
+ 10   CONTINUE
+      COUT  = C
+      CDOUT = CD
+      CMOUT = CM
+      IOUT  = I
+      JOUT  = J
+
+      END
+
+
+CDECK  ID>, PHO_RNDTE
+      SUBROUTINE PHO_RNDTE(IO)
+C***********************************************************************
+C
+C     test of random number generator PHO_RNDM
+C
+C     input:
+C       IO defines output
+C           0  output only if an error is detected
+C           1  output independend on an error
+C
+C     uses PHO_RNDSI and PHO_RNDSO to bring the random number generator
+C     to same status as it had before the test run
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      SAVE
+
+
+C  input/output channels
+      INTEGER LI,LO
+      COMMON /POINOU/ LI,LO
+
+      DIMENSION UU(97)
+      DIMENSION U(6),X(6),D(6)
+      DATA U / 6533892.D0 , 14220222.D0 ,  7275067.D0 ,
+     &         6172232.D0 ,  8354498.D0 , 10633180.D0 /
+
+      CALL PHO_RNDSO(UU,CC,CCD,CCM,II,JJ)
+
+      CALL PHO_RNDIN(12,34,56,78)
+      DO 10 II1 = 1,20000
+        XX      = PHO_RNDM(SD)
+ 10   CONTINUE
+
+      SD        = 0.D0
+      DO 20 II2 = 1,6
+        X(II2)  = 4096.D0*(4096.D0*PHO_RNDM(XX))
+        D(II2)  = X(II2)-U(II2)
+        SD      = SD+ABS(D(II2))
+ 20   CONTINUE
+
+      CALL PHO_RNDSI(UU,CC,CCD,CCM,II,JJ)
+
+      IF ((IO.EQ.1).OR.(ABS(SD).GT.0.D-10)) THEN
+        WRITE(LO,50) (U(I),X(I),D(I),I=1,6)
+      ENDIF
+
+ 50   FORMAT(/,' PHO_RNDTE: test of the random number generator:',/,
+     &  '    expected value    calculated value     difference',/,
+     &  6(F17.1,F20.1,F15.3,/),
+     &  ' generator has the same status as before calling PHO_RNDTE',/)
+
+      END
+
+
+CDECK  ID>, PHO_RNDST
+      SUBROUTINE PHO_RNDST(MODE,FILENA)
+C***********************************************************************
+C
+C     read / write random number generator status from / to file
+C
+C     input:    MODE        1   read registers from file
+C                           2   dump registers to file
+C
+C               FILENA      file name
+C
+C***********************************************************************
+
+      IMPLICIT NONE
+
+
+
+      SAVE
+
+      INTEGER       MODE
+      CHARACTER*(*) FILENA
+
+
+C  input/output channels
+      INTEGER LI,LO
+      COMMON /POINOU/ LI,LO
+
+
+      DOUBLE PRECISION UU,CC,CCD,CCM
+      DIMENSION UU(97)
+
+      INTEGER I,II,JJ
+
+      CHARACTER*80 CH_DUMMY
+
+      IF(MODE.EQ.1) THEN
+
+        WRITE(LO,'(/,1X,2A,A,/)') 'PHO_RNDST: ',
+     &    'reading random number registers from file ',FILENA
+
+        OPEN(12,FILE=FILENA,ERR=1010,STATUS='OLD')
+        READ(12,*,ERR=1010) CH_DUMMY
+        DO I=1,97
+          READ(12,*,ERR=1010) UU(I)
+        ENDDO
+        READ(12,*,ERR=1010) CC
+        READ(12,*,ERR=1010) CCD
+        READ(12,*,ERR=1010) CCM
+        READ(12,*,ERR=1010) II,JJ
+        CLOSE(12)
+        CALL PHO_RNDSI(UU,CC,CCD,CCM,II,JJ)
+
+      ELSE IF(MODE.EQ.2) THEN
+
+        WRITE(LO,'(/,1X,2A,A,/)') 'PHO_RNDST: ',
+     &    'dumping random number registers to file ',FILENA
+
+        OPEN(12,FILE=FILENA,ERR=1010,STATUS='UNKNOWN')
+        CALL PHO_RNDSO(UU,CC,CCD,CCM,II,JJ)
+        WRITE(12,'(1X,A)',ERR=1020) 'random number status registers:'
+        DO I=1,97
+          WRITE(12,'(1X,1P,E28.20)',ERR=1020) UU(I)
+        ENDDO
+        WRITE(12,'(1X,1P,E28.20)',ERR=1020) CC
+        WRITE(12,'(1X,1P,E28.20)',ERR=1020) CCD
+        WRITE(12,'(1X,1P,E28.20)',ERR=1020) CCM
+        WRITE(12,'(1X,2I4)',ERR=1020) II,JJ
+        CLOSE(12)
+
+      ELSE
+
+        WRITE(LO,'(/,1X,2A,I6,/)') 'PHO_RNDST: ',
+     &    'called with invalid mode, nothing done (mode)',MODE
+
+      ENDIF
+
+      RETURN
+
+ 1010 CONTINUE
+      WRITE(LO,'(1X,2A,A,/)') 'PHO_RNDST: ',
+     &  'cannot open or read file ',FILENA
+      RETURN
+
+ 1020 CONTINUE
+      WRITE(LO,'(1X,A,A,/)') 'PHO_RNDST: ',
+     &  'cannot open or write file ',FILENA
+      RETURN
+    
+      END
+
+C----------------------------------------
+C standard generator
+C----------------------------------------
+      REAL FUNCTION S_RNDM_std(IDUMMY)
+C...Generator  from the LUND montecarlo
+C...Purpose: to generate random numbers uniformly distributed between
+C...0 and 1, excluding the endpoints.
+      COMMON/LUDATR/MRLU(6),RRLU(100)
+      SAVE /LUDATR/
+      EQUIVALENCE (MRLU1,MRLU(1)),(MRLU2,MRLU(2)),(MRLU3,MRLU(3)),
+     &(MRLU4,MRLU(4)),(MRLU5,MRLU(5)),(MRLU6,MRLU(6)),
+     &(RRLU98,RRLU(98)),(RRLU99,RRLU(99)),(RRLU00,RRLU(100))
+ 
+C...  Initialize generation from given seed.
+      S_RNDM_std = real(idummy)
+      IF(MRLU2.EQ.0) THEN
+        IF (MRLU1 .EQ. 0)  MRLU1 = 19780503    ! initial seed
+        IJ=MOD(MRLU1/30082,31329)
+        KL=MOD(MRLU1,30082)
+        I=MOD(IJ/177,177)+2
+        J=MOD(IJ,177)+2
+        K=MOD(KL/169,178)+1
+        L=MOD(KL,169)
+        DO 110 II=1,97
+        S=0.
+        T=0.5
+        DO 100 JJ=1,24
+        M=MOD(MOD(I*J,179)*K,179)
+        I=J
+        J=K
+        K=M
+        L=MOD(53*L+1,169)
+        IF(MOD(L*M,64).GE.32) S=S+T
+        T=0.5*T
+  100   CONTINUE
+        RRLU(II)=S
+  110   CONTINUE
+        TWOM24=1.
+        DO 120 I24=1,24
+        TWOM24=0.5*TWOM24
+  120   CONTINUE
+        RRLU98=362436.*TWOM24
+        RRLU99=7654321.*TWOM24
+        RRLU00=16777213.*TWOM24
+        MRLU2=1
+        MRLU3=0
+        MRLU4=97
+        MRLU5=33
+      ENDIF
+ 
+C...Generate next random number.
+  130 RUNI=RRLU(MRLU4)-RRLU(MRLU5)
+      IF(RUNI.LT.0.) RUNI=RUNI+1.
+      RRLU(MRLU4)=RUNI
+      MRLU4=MRLU4-1
+      IF(MRLU4.EQ.0) MRLU4=97
+      MRLU5=MRLU5-1
+      IF(MRLU5.EQ.0) MRLU5=97
+      RRLU98=RRLU98-RRLU99
+      IF(RRLU98.LT.0.) RRLU98=RRLU98+RRLU00
+      RUNI=RUNI-RRLU98
+      IF(RUNI.LT.0.) RUNI=RUNI+1.
+      IF(RUNI.LE.0.OR.RUNI.GE.1.) GOTO 130
+ 
+C...Update counters. Random number to output.
+      MRLU3=MRLU3+1
+      IF(MRLU3.EQ.1000000000) THEN
+        MRLU2=MRLU2+1
+        MRLU3=0
+      ENDIF
+      S_RNDM_std=RUNI
+
+      END
diff --git a/Framework/Cascade/sibyll2.3c.f b/Framework/Cascade/sibyll2.3c.f
new file mode 100644
index 0000000000000000000000000000000000000000..7f7d524d3c84fc2d5645a7d05d6b3ff134184c3e
--- /dev/null
+++ b/Framework/Cascade/sibyll2.3c.f
@@ -0,0 +1,23906 @@
+C=======================================================================
+C          SSSSSS   IIIIIII  BBBBB   YY      YY   L        L
+C         S            I     B    B    YY  YY     L        L
+C          SSSSS       I     BBBBB       YY       L        L
+C               S      I     B    B      YY       L        L
+C         SSSSSS    IIIIIII  BBBBB       YY       LLLLLLL  LLLLLLL
+C=======================================================================
+C  Code for SIBYLL:  hadronic interaction Monte Carlo event generator
+C=======================================================================
+C   Version 2.3c02 (Jun-01-2017, modified Dec-11-2017)
+C
+C     with CHARM production
+C
+C       By   Eun-Joo Ahn
+C            Ralph Engel
+C            R.S. Fletcher
+C            T.K. Gaisser
+C            Paolo Lipari
+C            Felix Riehn
+C            Todor Stanev
+C
+C-----------------------------------------------------------------------
+C***  Please  have people who want this code contact one of the authors.
+C***  Please report any problems.       ****
+C
+C      For a correct copy contact:
+C                sein@fnal.gov
+C                ralph.engel@kit.edu
+C                gaisser@bartol.udel.edu
+C                paolo.lipari@roma1.infn.it
+C                friehn@lip.pt
+C                stanev@bartol.udel.edu
+C     
+C     last changes relative to Sibyll 2.3c:
+C     * no remnant in high mass diff. events (pi0-had scattering)
+C     * repaired had-nuc. cross section routine for kaon beams
+C       routine remains inactive in ordinary calls.
+C      
+C=======================================================================
+
+      SUBROUTINE SIBYLL (K_beam, IATARG, Ecm)
+
+C-----------------------------------------------------------------------
+C...Main routine for the production of hadronic events,
+C.  generates an inelastic hadronic interaction of 
+C.  a `projectile particle' of code K_beam with a 
+C.  target nucleus of mass number A = IATARG (integer)
+C.  IATARG = 0 is an "air" nucleus  (superposition of oxygen and nitrogen)
+C.  with c.m. energy for the hadron-nucleon system Ecm (GeV)
+C.  
+C.  Allowed values of K_beam: 7,8,9,10,11,12,13,14,-13,-14
+C.                            pi+-,K+-,KL,KS,p,n,pbar,nbar
+C.                 also:
+C.                  hyperons: 34,35,36,37,38,39
+C.                            Sig+-,Sig0,Xi0-,Lam0
+C.                        
+C.                  charmed:  59,60,71,72,74,75
+C.                            D+,D-,D0,D0b,Ds+,Ds-
+C.                            87,88,89,99
+C.                            Xic+,Xic0,LamC+,OmC0      
+C.                  rho0:27 is allowed as well to emulate photons!
+C.
+C.  The output is contained in COMMON /S_PLIST/ that contains:
+C.
+C.     NP           number of final particles
+C.     P(1:NP, 1:5) 4-momenta + masses of the final particles 
+C.     LLIST (1:NP) codes of final particles.
+C.  the reaction is studied in the c.m. of  hadron-nucleon system
+C.
+C.  The COMMON block /S_CHIST/ contains information about 
+C.  the structure of the  generated event:
+C.    NW   = number of wounded nucleons
+C.    NJET = total number of hard interactions
+C.    NSOF = total number of soft interactions
+C.    NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C.    NNJET (1:NW) = number of minijets produced in each interaction 
+C.    XJ1 (1:Index) = x1  for each string
+C.    XJ2 (1:Index) = x2   "   "     "
+C.    PTJET (1:Index) = pT   "   "     "
+C.    NNPJET (1:Index) = total number of particles in each string
+C.    NNPSTR (1:2*NW) = number of particles in each `beam string'
+C.    JDIF(1:NW) = diffraction code
+C----------------------------------------------------------------------
+      IMPLICIT NONE
+c     external type declarations
+      DOUBLE PRECISION ECM
+      INTEGER K_beam, IATARG
+
+c     COMMONs
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER LDIFF
+      COMMON /S_CLDIF/ LDIFF
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     internal type declarations
+      DOUBLE PRECISION Esum,PXsum,PYsum,PZsum,xchgRate
+      INTEGER LL,IATARGET,IAIR,KBM,L,NW,IREJ,NF,J
+      DIMENSION LL(99)
+      SAVE
+      DATA LL /5*0,7*2,2*1,12*0,2,6*0,6*1,19*0,2,2,10*0,
+     &     2,2,0,2,2,11*0,1,1,1,9*0,1/
+
+      if(Ndebug.gt.0)then
+        WRITE(LUN,'(A42,I3,I3,1X,F10.2)')
+     &     '  SIBYLL: called with (K_beam,IATARG,Ecm):',
+     &     K_beam,IATARG,Ecm
+        WRITE(LUN,*)'Event type selection LDIFF: ',LDIFF
+      endif
+
+ 100  CONTINUE
+      
+      Ncall = Ncall+1
+
+      IATARGET = IATARG
+      IAIR = IABS(MIN(IATARG-1,0))
+      KBM = K_beam
+      
+      CALL INI_EVENT(ECM,KBM,IATARGET,1)
+
+      L = LL(IABS(K_beam))
+      IF(L.eq.0) THEN
+         WRITE(LUN,*)'SIB_MAIN: unknown beam particle! kbeam=',k_beam
+         WRITE(6,*)'SIB_MAIN: unknown beam particle! kbeam=',k_beam
+         CALL SIB_REJECT('SIB_MAIN        ')
+      endif
+
+C...Generate number NW wounded nucleons, and diffraction code.
+
+1000  continue  
+      CALL SIB_START_EV (Ecm, L, IATARGET, IAIR, NWD, JDIF)
+      NW = NWD
+C...limits on simulation of pure diffraction dissociation
+      IF((LDIFF.NE.0).and.(NW.EQ.1)) THEN 
+         IF((LDIFF.EQ.-1) .AND. (JDIF(1).NE.0) ) GOTO 1000
+         IF((LDIFF.EQ. 1) .AND. ((JDIF(1).NE.0).AND.(JDIF(1).NE.3)))
+     +     GOTO 1000
+         IF((LDIFF.EQ. 5) .AND. (JDIF(1).EQ.2)) GOTO 1000
+         IF((LDIFF.GE. 2) .AND. (LDIFF.LE.4)) THEN
+           JDIF(1) = LDIFF-1
+         ENDIF
+      ENDIF
+
+C...Diffractive/non-diffractive interactions
+
+      IF((NW.EQ.1).and.(JDIF(1).NE.0)) THEN
+        CALL SIB_DIFF (KBM, JDIF(1), Ecm, 1, IREJ)
+      ELSE
+        CALL SIB_NDIFF (KBM, NW, Ecm, 1, IREJ)
+      ENDIF
+
+      IF (IREJ.NE.0) THEN
+        if(Ndebug.gt.0) WRITE(LUN,'(A38,F10.2,I3,I3,I3)')
+     &   '  SIBYLL: rejection (Ecm,Ncall,Nw,JDIF):',Ecm,Ncall,NW,JDIF(1)
+        GOTO 100
+      ENDIF
+
+      do J=1,NP
+         if (P(J,4).lt.0.D0 ) then
+            if(Ndebug.gt.0)then
+               WRITE(LUN,*)' negative energy particle!' , P(J,4)
+               CALL SIB_LIST(LUN)
+            endif
+            goto 100
+         endif
+      enddo
+
+C...Check energy-momentum conservation
+      
+      CALL PFSUM(1,NP,Esum,PXsum,PYsum,PZsum,NF)
+      IF (ABS(Esum/(0.5D0*Ecm*DBLE(NW+1)) - 1.D0) .GT. EPS3)  THEN
+         WRITE(LUN,*) ' SIBYLL: energy not conserved (L,call): ',L,Ncall
+         WRITE(LUN,*) ' sqs_inp = ', Ecm, ' sqs_out = ', Esum
+         CALL PRNT_PRTN_STCK
+         CALL SIB_LIST(LUN)
+         WRITE(LUN,*) ' SIBYLL: event rejected'
+c         a = -1.D0
+c         a = log(a)
+c         stop
+         goto 100
+      ENDIF
+      IF (ABS(PZsum+0.5D0*Ecm*DBLE(NW-1)) .GT. 0.1D0)  THEN
+         if(Ndebug.gt.0)THEN
+            WRITE(LUN,*) ' SIBYLL: momentum not conserved (L,call): ',
+     &           L,Ncall
+            WRITE(LUN,*) ' pz_inp = ', 0., ' pz_out = ', pzsum
+         ENDIF
+         IF(ndebug.gt.0)then
+            CALL PRNT_PRTN_STCK
+            CALL SIB_LIST(LUN)
+            WRITE(LUN,*) ' SIBYLL: event rejected'
+         endif
+c         a = -1.D0
+c         a = log(a)
+c         stop
+         goto 100
+      ENDIF
+
+c     exchange pions with vector mesons
+      IF(IPAR(45).ne.0) then
+         xchgRate = PAR(75)
+         CALL FORCE_VECTORS(xchgRate,1,NP)
+      endif
+
+c     exchange pi0 with charged pions for meson projectiles
+      IF(IPAR(50).ne.0.and.IABS(KBM).lt.13) then
+         xchgrate = PAR(136)
+         CALL REMOVE_PI0(xchgRate,1,NP)
+      endif
+      
+      
+C...list final state particles
+      if(Ndebug.gt.10) CALL SIB_LIST(LUN)
+
+      END
+
+
+C======================================================================
+
+      SUBROUTINE SIBNUC (IAB, IATG, ECM)
+
+C-----------------------------------------------------------------------
+C.  Routine that generates the interaction of a nucleus of
+C.  mass number IAB with a  target nucleus  of mass IATG
+C.  (IATG=0 : air).
+C.  SQS (GeV) is the  center of mass energy of each
+C.  nucleon - nucleon cross section
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      COMMON /S_PLNUC/ PA(5,40000), LLA(40000), NPA
+      COMMON /CKFRAG/ KODFRAG
+      PARAMETER (IAMAX=56)
+      COMMON /CNUCMS/ B, BMAX, NTRY, NA, NB, NI, NAEL, NBEL
+     +         ,JJA(IAMAX), JJB(IAMAX), JJINT(IAMAX,IAMAX)
+     +         ,JJAEL(IAMAX), JJBEL(IAMAX)            
+      COMMON /FRAGMENTS/ PPP(3,60)
+      DIMENSION SIGDIF(3)
+      DIMENSION IAF(60)
+      DOUBLE PRECISION FOX
+      SAVE
+      DATA FOX /0.21522D0/  !atomic percentage of 'non-nitrogen' in air
+
+C...Target mass
+      IF (IATG .EQ. 0) THEN
+c  select target IATARGET from air composition
+         R = S_RNDM(0)
+         IATARGET = 14
+         IF (R .LT. FOX)  IATARGET = 16
+      ELSE
+         IATARGET = IATG
+      ENDIF
+       
+C...Single nucleon (proton) case
+
+      IF (IAB .EQ. 1)  THEN
+         NPA = 0
+         CALL SIBYLL (13,IATARGET, ECM)
+         CALL DECSIB
+         DO J=1,NP
+            LA = IABS(LLIST(J))
+            IF (LA .LT. 10000)  THEN
+               NPA = NPA + 1
+               LLA(NPA) = LLIST(J)
+               DO K=1,5
+                  PA(K,NPA) = P(J,K)
+               ENDDO
+            ENDIF
+         ENDDO
+         RETURN
+      ENDIF
+
+
+C...Nuclei
+
+      CALL SIB_SIGMA_HP(1,ECM,SIGT,SIGEL,SIG0,SIGDIF,SLOPE,RHO)
+      CALL INT_NUC (IATARGET, IAB, SIG0, SIGEL) 
+
+C...fragment spectator nucleons
+      NBT = NB + NBEL
+      IF (KODFRAG .EQ. 1)  THEN
+          CALL FRAGM1(IAB,NBT, NF, IAF)
+      ELSE IF(KODFRAG .EQ. 2)  THEN
+          CALL FRAGM2(IAB,NBT, NF, IAF)
+      ELSE 
+          CALL FRAGM (IATARGET, IAB, NBT,B, NF, IAF)
+      ENDIF
+     
+C...Spectator fragments
+      NPA = 0
+      DO J=1,NF
+         NPA = NPA+1
+         if(NPA.gt.40000) then
+           write(6,'(1x,a,2i8)') 
+     &       ' SIBNUC: no space left in S_PLNUC (NPA,NF)',NPA,NF
+           NPA = NPA-1
+           return
+         endif
+         LLA(NPA) = 1000+IAF(J)
+         PA(1,NPA) = 0.D0
+         PA(2,NPA) = 0.D0
+         PA(3,NPA) = ECM/2.D0
+         PA(4,NPA) = ECM/2.D0
+         PA(5,NPA) = DBLE(IAF(J))*0.5D0*(AM(13)+AM(14))
+      ENDDO
+
+C...Elastically scattered fragments
+      DO J=1,NBEL
+         NPA = NPA+1
+         if(NPA.gt.40000) then
+           write(6,'(1x,a,2i8)') 
+     &       ' SIBNUC: no space left in S_PLNUC (NPA,NBEL)',NPA,NBEL
+           NPA = NPA-1
+           return
+         endif
+         LLA(NPA) = 1001
+         PA(1,NPA) = 0.D0
+         PA(2,NPA) = 0.D0
+         PA(3,NPA) = ECM/2.D0
+         PA(4,NPA) = ECM/2.D0
+         PA(5,NPA) = 0.5D0*(AM(13)+AM(14))
+      ENDDO
+
+C...Superimpose NB  nucleon interactions
+      DO JJ=1,NB
+          CALL SIBYLL (13,IATARGET, ECM)
+          CALL DECSIB
+          DO J=1,NP
+             LA = IABS(LLIST(J))
+             IF (LA .LT. 10000)   THEN
+                NPA = NPA + 1
+                if(NPA.gt.40000) then
+                  write(6,'(1x,a,2i8)') 
+     &              ' SIBNUC: no space left in S_PLNUC (NPA,NP)',NPA,NP
+                  NPA = NPA-1
+                  return
+                endif
+                LLA(NPA) = LLIST(J)
+                DO K=1,5
+                    PA(K,NPA) = P(J,K)
+                ENDDO
+             ENDIF
+          ENDDO
+      ENDDO
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIBYLL_INI
+
+C-----------------------------------------------------------------------
+C...Initialization routine for SYBILL 
+C.  
+C.  the routine fills the COMMON block /CCSIG/ that contains
+C.  important information for the generation of events
+C.
+C     PARAMETER (NS_max = 20, NH_max = 80)
+C     COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+C    &    SSIGN(61,3),SSIGNSD(61,3) ALINT(61,3), ASQSMIN, ASQSMAX, DASQS, NSQS
+C.
+C.  NSQS = number of energy points  (61 is current version)
+C.  ASQSMIN = log_10 [sqrt(s) GeV]   minimum value
+C.  ASQSMIN = log_10 [sqrt(s) GeV]   maximum value
+C.  DASQS   = step  in log_10[sqrt(s)]
+C.            DASQS = (ASQSMAX - ASQSMIN)/(NSQS-1)
+C.
+C.  SSIG(J,1) inelastic cross section for pp interaction
+C.            at energy: sqrt(s)(GeV) = 10**[ASQSMIN+DASQS*(J-1)]
+C.  SSIG(J,2)  inelastic cross section for pi-p interaction
+C.  SSIGN(J,1) inelastic cross section for p-Air interaction
+C.  SSIGN(J,2) inelastic cross section for pi-Air interaction
+C.
+C.  PJETC(n_s,n_j,J,1) Cumulative  probability distribution
+C.                 for the production of n_s soft interactions and
+C.                 n_j (n_j=0:30) jet pairs at sqrt(s) labeled 
+C.                 by J, for p-p interaction
+C.  PJETC(n_s,n_j,J,2) Same as above for pi-p interaction
+C.  ALINT(J,1)   proton-air  interaction length (g cm-2)
+C.  ALINT(J,2)   pi-air  interaction length (g cm-2)
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      WRITE(*,100)
+ 100  FORMAT(' ','====================================================',
+     *     /,' ','|                                                  |',
+     *     /,' ','|                 S I B Y L L  2.3c                |',
+     *     /,' ','|                                                  |',
+     *     /,' ','|         HADRONIC INTERACTION MONTE CARLO         |',
+     *     /,' ','|                        BY                        |',
+     *     /,' ','|            Eun-Joo AHN, Felix RIEHN              |',
+     *     /,' ','|     R. ENGEL, R.S. FLETCHER, T.K. GAISSER        |',
+     *     /,' ','|               P. LIPARI, T. STANEV               |',
+     *     /,' ','|                                                  |',
+     *     /,' ','| Publication to be cited when using this program: |',
+     *     /,' ','| Eun-Joo AHN et al., Phys.Rev. D80 (2009) 094003  |',
+     *     /,' ','| F. RIEHN et al., Proc. 35th Int. Cosmic Ray Conf.|',
+     *     /,' ','|           Bexco, Busan, Korea, cont. 301 (2017)  |',
+     *     /,' ','|                                                  |',
+     *     /,' ','| last modifications: F. Riehn (12/11/2017)        |',
+     *     /,' ','====================================================',
+     *     /)
+
+      CALL PAR_INI
+      CALL DIFF_INI
+      CALL JET_INI
+      CALL PDF_INI
+      CALL BLOCK_INI
+      CALL NUC_GEOM_INI
+      CALL SIG_AIR_INI
+      CALL DEC_INI
+c...  charm frag. normalisation
+      CALL ZNORMAL
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE NO_CHARM
+      IMPLICIT NONE
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+c     turn off charm production
+c     global charm rate
+      PAR(24) = 0.D0
+c     minijet string charm rate
+      PAR(156) = 0.D0
+c     remnant string charm rate
+      PAR(107) = 0.D0
+c     soft sea charm rate
+      PAR(97) = 0.D0
+c     valence string charm rate
+      PAR(25) = 0.D0
+c     minijet charm rate
+      PAR(27) = 0.D0
+      END
+      
+C=======================================================================
+
+      SUBROUTINE PAR_INI
+
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+      DOUBLE PRECISION FAs1, fAs2
+      COMMON /S_CZDISs/ FAs1, fAs2
+      DOUBLE PRECISION ZDMAX, EPSI
+      COMMON /S_CZDISc/ ZDMAX, EPSI
+
+      DOUBLE PRECISION CLEAD, FLEAD
+      COMMON /S_CZLEAD/ CLEAD, FLEAD
+      DOUBLE PRECISION CCHIK
+      COMMON /S_CPSPL/ CCHIK(4,99)
+
+      PARAMETER ( NPARFIT = 22 )
+      DOUBLE PRECISION PARS
+      COMMON /XSCTN_FIT/ PARS( 50 , 2 )
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      SAVE
+      DATA (PARS(K,1),K=    1,NPARFIT) /
+     &3.9223D+01,4.2055D+01,5.0913D-02,-4.0000D-01,2.0000D-01,
+     &5.0000D-01,0.0000D+00,6.0000D-01,9.0000D-02,1.0000D+00,
+     &2.0000D+00,3.2327D+00,2.5000D-01,5.4000D-01,1.0000D+00,
+     &-8.8000D-01,5.4000D-01,5.0000D-01,9.0000D-01,5.4000D-01,
+     &6.5000D-02,9.0000D-01/
+      DATA (PARS(K,2),K=    1,NPARFIT) /
+     &2.0590D+01,9.6579D+01,5.6069D-02,-7.6393D-01,2.0000D-01,
+     &5.0000D-01,0.0000D+00,6.0000D-01,9.0000D-02,1.0000D+00,
+     &2.0000D+00,2.9191D+00,2.5000D-01,5.4000D-01,1.0000D+00,
+     &-8.8000D-01,5.4000D-01,5.4895D-01,9.0000D-01,5.4000D-01,
+     &6.5000D-02,9.0000D-01/
+c
+c     adjusted central particle production
+c     23rc5.4frgB1 aka retune5 aka Sibyll 2.3.5
+      PAR(1) = 4.0000D-02
+      PAR(2) = 2.5000D-01
+      PAR(3) = 5.0000D-01
+      PAR(4) = 1.4000D-01
+      PAR(5) = 3.0000D-01
+      PAR(6) = 3.0000D-01
+      PAR(7) = 1.5000D-01
+      PAR(8) = 1.3903D-02
+      PAR(9) = 7.0000D+00
+      PAR(10) = 1.0000D+00
+      PAR(11) = 6.5000D-02
+      PAR(12) = 9.0000D-01
+      PAR(13) = 1.0000D-01
+      PAR(14) = 6.0000D-02
+      PAR(15) = 1.3000D-01
+      PAR(16) = 4.0000D-02
+      PAR(17) = 4.0000D-02
+      PAR(18) = 5.0000D-01
+      PAR(19) = 8.0000D-01
+      PAR(20) = 8.0000D-01
+      PAR(21) = 6.0000D-01
+      PAR(22) = 4.0000D+00
+      PAR(23) = 7.0000D-01
+      PAR(24) = 4.0000D-03
+      PAR(25) = 4.0000D-03
+      PAR(26) = 2.0000D+01
+      PAR(27) = 2.0000D-02
+      PAR(28) = 2.0000D+01
+      PAR(29) = 0.0000D+00
+      PAR(30) = 2.0000D+00
+      PAR(31) = 3.3000D-01
+      PAR(32) = 0.0000D+00
+      PAR(33) = 1.0000D-01
+      PAR(34) = 0.0000D+00
+      PAR(35) = 0.0000D+00
+      PAR(36) = 7.0000D-01
+      PAR(37) = 0.0000D+00
+      PAR(38) = 5.0000D-01
+      PAR(39) = 8.0000D-01
+      PAR(40) = 0.0000D+00
+      PAR(41) = 1.0000D+00
+      PAR(42) = 0.0000D+00
+      PAR(43) = 2.3564D-01
+      PAR(44) = 9.9000D-01
+      PAR(45) = 1.0000D+00
+      PAR(46) = 1.8000D-01
+      PAR(47) = 2.8000D-01
+      PAR(48) = 2.7000D-01
+      PAR(49) = 1.0000D-01
+      PAR(50) = 6.0000D-01
+      PAR(51) = 6.0000D-03
+      PAR(52) = 6.0000D-03
+      PAR(53) = 6.0000D+00
+      PAR(54) = 2.0000D-01
+      PAR(55) = 0.0000D+00
+      PAR(56) = 0.0000D+00
+      PAR(57) = 0.0000D+00
+      PAR(58) = 0.0000D+00
+      PAR(59) = 6.8345D-01
+      PAR(60) = 8.0000D-01
+      PAR(61) = 6.6000D-01
+      PAR(62) = 0.0000D+00
+      PAR(63) = 1.0000D+00
+      PAR(64) = 2.5000D-01
+      PAR(65) = 3.0000D-01
+      PAR(66) = 3.0000D-01
+      PAR(67) = 6.0000D-01
+      PAR(68) = 6.0000D-03
+      PAR(69) = 5.0000D-02
+      PAR(70) = 7.0000D-03
+      PAR(71) = 1.0000D+00
+      PAR(72) = 3.8000D-01
+      PAR(73) = 5.0000D-01
+      PAR(74) = 6.0000D-01
+      PAR(75) = 0.0000D+00
+      PAR(76) = 3.5298D-01
+      PAR(77) = 7.0000D-01
+      PAR(78) = 2.0000D+00
+      PAR(79) = 1.0000D+01
+      PAR(80) = 5.0816D-01
+      PAR(81) = 1.0000D+04
+      PAR(82) = 1.0000D-01
+      PAR(83) = 0.0000D+00
+      PAR(84) = 6.0000D+00
+      PAR(85) = 1.0000D+00
+      PAR(86) = 1.0000D+00
+      PAR(87) = 3.0000D-01
+      PAR(88) = 8.0000D-01
+      PAR(89) = 6.0000D-01
+      PAR(90) = 1.1000D+01
+      PAR(91) = -7.2000D+00
+      PAR(92) = 3.5000D+00
+      PAR(93) = 1.0000D+00
+      PAR(94) = 4.0000D+00
+      PAR(95) = 0.0000D+00
+      PAR(96) = 1.0000D+00
+      PAR(97) = 2.0000D-03
+      PAR(98) = 1.5000D+00
+      PAR(99) = 5.0000D-01
+      PAR(100) = 2.0000D+00
+      PAR(101) = 1.0000D+00
+      PAR(102) = 0.0000D+00
+      PAR(103) = 2.0000D+00
+      PAR(104) = 4.0000D-01
+      PAR(105) = 1.0000D-01
+      PAR(106) = 0.0000D+00
+      PAR(107) = 0.0000D+00
+      PAR(108) = 0.0000D+00
+      PAR(109) = 2.0000D+01
+      PAR(110) = 1.5000D+00
+      PAR(111) = 0.0000D+00
+      PAR(112) = 7.0000D-01
+      PAR(113) = 8.0000D-01
+      PAR(114) = 2.0000D+00
+      PAR(115) = 0.0000D+00
+      PAR(116) = 1.0000D+00
+      PAR(117) = 0.0000D+00
+      PAR(118) = 5.0000D-03
+      PAR(119) = 0.0000D+00
+      PAR(120) = 1.0000D+00
+      PAR(121) = 3.0000D-01
+      PAR(122) = 0.0000D+00
+      PAR(123) = 3.0000D-01
+      PAR(124) = 1.0000D+00
+      PAR(125) = 1.0000D+00
+      PAR(126) = 1.0000D+00
+      PAR(127) = 6.0000D+00
+      PAR(128) = 1.0000D+00
+      PAR(129) = 8.0000D-02
+      PAR(130) = 1.2000D+01
+      PAR(131) = 5.0000D-01
+      PAR(132) = 5.0000D-01
+      PAR(133) = 1.0000D+01
+      PAR(134) = -5.0000D+00
+      PAR(135) = 6.0000D+00
+      PAR(136) = 0.0000D+00
+      PAR(137) = 1.2000D+00
+      PAR(138) = 0.0000D+00
+      PAR(139) = 5.0000D-01
+      PAR(140) = 4.5000D-01
+      PAR(141) = 1.5000D+00
+      PAR(142) = 0.0000D+00
+      PAR(143) = 5.0000D-01
+      PAR(144) = 9.5000D-01
+      PAR(145) = 8.5000D-01
+      PAR(146) = 0.0000D+00
+      PAR(147) = 3.0000D-01
+      PAR(148) = 5.0000D-01
+      PAR(149) = 3.0000D-01
+      PAR(150) = 4.0000D-03
+      PAR(151) = 2.0000D+00
+      PAR(152) = 4.0000D+00
+      PAR(153) = 1.0000D+01
+      PAR(154) = 3.0000D-01
+      PAR(155) = 0.0000D+00
+      PAR(156) = 5.0000D-01
+      PAR(157) = 8.0000D-01
+      PAR(158) = 0.0000D+00
+      PAR(159) = 0.0000D+00
+      PAR(160) = 0.0000D+00
+      PAR(161) = 0.0000D+00
+      PAR(162) = 0.0000D+00
+      PAR(163) = 0.0000D+00
+      PAR(164) = 0.0000D+00
+      PAR(165) = 0.0000D+00
+      PAR(166) = 0.0000D+00
+      PAR(167) = 0.0000D+00
+      PAR(168) = 0.0000D+00
+      PAR(169) = 0.0000D+00
+      PAR(170) = 0.0000D+00
+      PAR(171) = 0.0000D+00
+      PAR(172) = 0.0000D+00
+      PAR(173) = 0.0000D+00
+      PAR(174) = 0.0000D+00
+      PAR(175) = 0.0000D+00
+      PAR(176) = 0.0000D+00
+      PAR(177) = 0.0000D+00
+      PAR(178) = 0.0000D+00
+      PAR(179) = 0.0000D+00
+      PAR(180) = 0.0000D+00
+      PAR(181) = 0.0000D+00
+      PAR(182) = 0.0000D+00
+      PAR(183) = 0.0000D+00
+      PAR(184) = 0.0000D+00
+      PAR(185) = 0.0000D+00
+      PAR(186) = 0.0000D+00
+      PAR(187) = 0.0000D+00
+      PAR(188) = 0.0000D+00
+      PAR(189) = 0.0000D+00
+      PAR(190) = 0.0000D+00
+      PAR(191) = 0.0000D+00
+      PAR(192) = 0.0000D+00
+      PAR(193) = 0.0000D+00
+      PAR(194) = 0.0000D+00
+      PAR(195) = 0.0000D+00
+      PAR(196) = 0.0000D+00
+      PAR(197) = 0.0000D+00
+      PAR(198) = 0.0000D+00
+      PAR(199) = 0.0000D+00
+      PAR(200) = 0.0000D+00
+      IPAR(1) = 1
+      IPAR(2) = 0
+      IPAR(3) = 8
+      IPAR(4) = 0
+      IPAR(5) = 1
+      IPAR(6) = 0
+      IPAR(7) = 0
+      IPAR(8) = 1
+      IPAR(9) = 1
+      IPAR(10) = 1
+      IPAR(11) = 0
+      IPAR(12) = 3
+      IPAR(13) = 0
+      IPAR(14) = -2
+      IPAR(15) = 9
+      IPAR(16) = 8
+      IPAR(17) = 1
+      IPAR(18) = 4
+      IPAR(19) = 1
+      IPAR(20) = 0
+      IPAR(21) = 0
+      IPAR(22) = 0
+      IPAR(23) = 0
+      IPAR(24) = 0
+      IPAR(25) = 1
+      IPAR(26) = 0
+      IPAR(27) = 0
+      IPAR(28) = 4
+      IPAR(29) = 1
+      IPAR(30) = 0
+      IPAR(31) = 1
+      IPAR(32) = 0
+      IPAR(33) = 0
+      IPAR(34) = 0
+      IPAR(35) = 0
+      IPAR(36) = 1
+      IPAR(37) = 0
+      IPAR(38) = 1
+      IPAR(39) = 0
+      IPAR(40) = 0
+      IPAR(41) = 0
+      IPAR(42) = 3
+      IPAR(43) = 1
+      IPAR(44) = 0
+      IPAR(45) = 0
+      IPAR(46) = 2
+      IPAR(47) = 6
+      IPAR(48) = 1
+      IPAR(49) = 4
+      IPAR(50) = 0
+      IPAR(51) = 2
+      IPAR(52) = 0
+      IPAR(53) = 1
+      IPAR(54) = 0
+      IPAR(55) = 0
+      IPAR(56) = 0
+      IPAR(57) = 1
+      IPAR(58) = 3
+      IPAR(59) = 1
+      IPAR(60) = 0
+      IPAR(61) = 100
+      IPAR(62) = 1
+      IPAR(63) = 0
+      IPAR(64) = 0
+      IPAR(65) = 1
+      IPAR(66) = 3
+      IPAR(67) = 0
+      IPAR(68) = 0
+      IPAR(69) = 1
+      IPAR(70) = 1
+      IPAR(71) = 0
+      IPAR(72) = 0
+      IPAR(73) = 0
+      IPAR(74) = 1
+      IPAR(75) = 0
+      IPAR(76) = 0
+      IPAR(77) = 0
+      IPAR(78) = 2
+      IPAR(79) = 1
+      IPAR(80) = 1
+      IPAR(81) = 5
+      IPAR(82) = 2
+      IPAR(83) = 0
+      IPAR(84) = 2
+      IPAR(85) = 1
+      IPAR(86) = 0
+      IPAR(87) = 3
+      IPAR(88) = 1
+      IPAR(89) = 0
+      IPAR(90) = 1
+      IPAR(91) = 0
+      IPAR(92) = 1
+      IPAR(93) = 1
+      IPAR(94) = 0
+      IPAR(95) = 0
+      IPAR(96) = 0
+      IPAR(97) = 0
+      IPAR(98) = 0
+      IPAR(99) = 0
+      IPAR(100) = 0
+
+C...  valence quark distribution function
+c     large x suppression
+      do i=1,3                  ! quark flavors
+         CCHIK(i,13)=PAR(62)
+         CCHIK(i,14)=PAR(62)
+      enddo
+C...string fragmentation parameters
+c     effective quark mass
+      STR_mass_val = PAR(36) 
+      STR_mass_sea = PAR(41)
+
+C...energy dependence of PTmin
+c     pt_cut offset
+      PAR(10) = PARS(10 , 1)
+c     lambda
+      PAR(11) = PARS(21 , 1)
+c     c parameter
+      PAR(12) = PARS(22 , 1)
+
+C...fragmentation function
+      FAin = PAR(20)
+      FB0in = PAR(21)
+
+C...Strange fragmentation function
+      FAs1 = PAR(35)
+      FAs2 = PAR(35)
+
+C...leading baryon fragmentation function
+c     hard proton mixing
+      CLEAD = PAR(50)
+
+      END
+C=======================================================================
+
+      SUBROUTINE PAR_INI_FROM_FILE
+      IMPLICIT NONE
+c     locals
+      CHARACTER*10 FILENA
+      CHARACTER*6 CNAME
+      CHARACTER*70 NUMBER
+
+      INTEGER ISTAT,J,IVAL,I
+      DOUBLE PRECISION VAL      
+c     commons
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+      DOUBLE PRECISION FAs1, fAs2
+      COMMON /S_CZDISs/ FAs1, fAs2
+      DOUBLE PRECISION ZDMAX, EPSI
+      COMMON /S_CZDISc/ ZDMAX, EPSI
+
+      DOUBLE PRECISION CLEAD, FLEAD
+      COMMON /S_CZLEAD/ CLEAD, FLEAD
+      DOUBLE PRECISION CCHIK
+      COMMON /S_CPSPL/ CCHIK(4,99)
+
+      SAVE
+      DATA FILENA /'sibyll.par'/
+ 14   FORMAT(A6,A70)
+ 15   FORMAT(A5,I3,A2,I8)
+ 16   FORMAT(A5,I3,A2,F8.2)      
+      OPEN(unit=4,file=filena,status='OLD')
+      istat = 1
+c     set standard parameters (full set)
+      CALL PAR_INI
+c     read new parameters from file
+      IF(ndebug.gt.0)WRITE(LUN,*)'reading parameter file: sibyll.par'
+      DO WHILE (istat.ge.0) 
+         READ(4,14,iostat=ISTAT) CNAME,NUMBER
+         IF(CNAME.eq.'IPAR  ')THEN
+            READ(NUMBER,*) j, ival
+            IF(ndebug.gt.1)write(LUN,15) 'IPAR(',j,')=', ival
+            IPAR(J) = iVAL
+         ELSEif(CNAME.eq.'PAR   ')THEN
+            READ(NUMBER,*) j, val
+            PAR(J) = VAL
+            IF(ndebug.gt.1)write(LUN,16) ' PAR(',j,')=', val
+         ELSE
+            WRITE(LUN,*)'wrong format in parameter file!'
+            WRITE(6,*)'wrong format in parameter file!'
+            WRITE(LUN,*) CNAME, NUMBER
+            stop
+         ENDIF
+      ENDDO
+C     copy parameter values to their respective COMMONs
+C...  valence quark distribution function
+c     large x suppression
+      do i=1,3                  ! quark flavors
+         CCHIK(i,13)=PAR(62)
+         CCHIK(i,14)=PAR(62)
+      enddo
+C...string fragmentation parameters
+c     effective quark mass
+      STR_mass_val = PAR(36) 
+      STR_mass_sea = PAR(41)
+C...fragmentation function
+      FAin = PAR(20)
+      FB0in = PAR(21)
+C...Strange fragmentation function
+      FAs1 = PAR(35)
+      FAs2 = PAR(35)
+C...leading baryon fragmentation function
+c     hard proton mixing
+      CLEAD = PAR(50)
+      END
+      
+C=======================================================================
+      
+      SUBROUTINE MESON_FLV_MRG_INI
+
+C-----------------------------------------------------------------------
+c     change flavor merging for pions (favor spin)
+C-----------------------------------------------------------------------
+      INTEGER KFLV
+      COMMON /S_KFLV/ KFLV(4,43)
+
+c     pi+ --> rho+
+      KFLV(2,1) = 25
+c     pi- --> rho-
+      KFLV(1,2) = 26
+c     pi0 --> rho0
+      KFLV(1,1) = 27
+      KFLV(2,2) = 27     
+      END
+C=======================================================================
+
+      BLOCK DATA PARAM_INI
+
+C-----------------------------------------------------------------------
+C....This block data contains default values
+C.   of the parameters used in fragmentation
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+      DOUBLE PRECISION FAs1, fAs2
+      COMMON /S_CZDISs/ FAs1, fAs2
+      DOUBLE PRECISION ZDMAX, EPSI
+      COMMON /S_CZDISc/ ZDMAX, EPSI
+
+      DOUBLE PRECISION CLEAD, FLEAD
+      COMMON /S_CZLEAD/ CLEAD, FLEAD
+      DOUBLE PRECISION CCHIK
+      COMMON /S_CPSPL/ CCHIK(4,99)
+
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      COMMON /CKFRAG/ KODFRAG
+      SAVE
+
+      DATA ITRY /20*0/
+      DATA NREJ /5,5,20,10,20,20,14*0/ 
+      DATA EPS3,EPS5,EPS8,EPS10 /1.D-3,1.D-5,1.D-8,1.D-10/
+      DATA PI,TWOPI,CMBARN/3.14159265358979D0,6.283185308D0,0.389385D0/
+      DATA FACN /2.D0,5.D0,15.D0,60.D0,250.D0,1500.D0,12000.D0,
+     &     120000.D0/
+
+C...  default output unit
+      DATA LUN /7/
+c...new fragmentation for charmed particles
+      DATA EPSI /2.D0/
+C...mass cutoff for soft strings
+      data STR_mass_val /0.35D0/ 
+      data STR_mass_val_hyp /0.4D0/ 
+      data STR_mass_sea /1.D0/ 
+C...Longitudinal Fragmentation function
+      DATA FAin /0.5D0/, FB0in /0.8D0/
+C...Longitudinal Fragmentation function for leading baryons
+      DATA CLEAD  /0.6D0/, FLEAD  /0.6D0/
+c     strange fragmentation
+      data FAs1 /3.D0/, fAs2 /3.D0/
+C...  Splitting parameters
+      DATA CCHIK /20*0.D0,28*2.D0,8*3.D0,48*0.D0,4*2.D0,24*0.D0,
+     &     24*3.D0,76*0.D0,8*2.D0,40*0.D0,12*2.D0,40*0.D0,24*3.D0,
+     &     40*0.D0/
+C...Parameters of flavor formation 
+c     last in use: 158
+      DATA PAR/0.04D0,0.3D0,0.3D0,0.14D0,0.3D0,0.3D0,0.15D0,0.D0,7.D0, ! 10
+     &     2*0.D0,0.9D0,0.2D0,4*0.04D0,0.5D0,0.8D0,0.5D0,              ! 20 
+     &     0.8D0,6.D0,0.5D0,0.004D0,5*0.D0,0.7D0,                      ! 30
+     &     2*0.D0,0.1D0,0.D0,3.D0,0.35D0,0.D0,0.5D0,2*0.D0,            ! 40
+     &     1.D0,2.D0,0.D0,0.99D0,0.D0,0.3D0,0.45D0,0.6D0,0.6D0,0.6D0,  ! 50
+     &     .03D0,.03D0,6.D0,0.2D0,4*0.D0,1.1D0,0.8D0,                  ! 60
+     &     .33D0,3.D0,1.D0,.25D0,.3D0,0.3D0,0.6D0,.007D0,.03D0,.007D0, ! 70
+     &     1.D0,0.3D0,0.D0,0.3D0,0.0D0,0.2D0,0.5D0,1.0D0,10.D0,0.D0,   ! 80
+     &     1000.D0,1000.D0,1.D0,6.D0,1.D0,0.D0,0.3D0,0.8D0,0.3D0,31.D0,! 90
+     &     1.D0,6.5D0,1.D0,1.D0,0.D0,1.0D0,0.004D0,1.D0,0.33D0,1.D0,   ! 100
+     &     1.D0,0.D0,2.D0,0.3D0,0.15D0,3*0.D0,20.D0,0.25D0,            ! 110
+     &     0.D0,0.7D0,0.3D0,0.D0,0.D0,1.D0,3*0.D0,1.D0,                ! 120
+     &     0.3D0,0.D0,0.3D0,1.D0,1.D0,1.D0,6.D0,1.D0,1.D0,6.D0,        ! 130
+     &     0.0001D0,0.5D0,31.10362D0,-15.29012D0,6.5D0,                ! 135
+     &     0.D0,4 *0.D0,                                               ! 140
+     &     1.D0,0.D0,0.5D0,0.D0,0.5D0,0.D0,0.3D0,0.8D0,0.08D0,0.004D0, ! 150
+     &     2.D0,1.D0,1.D0,1.D0,1.D0,1.D0,0.D0,1.D0,2*0.D0,             ! 160      
+     &     40*0.D0/                                                    ! 200
+c     last in use:93
+      DATA IPAR /9*0,1,0,1,8*0,20*0,    ! 40
+     &     9*0,0,2,9*0,                 ! 60
+     &     100,25*0,2,1,0,0,0,1,0,7*0/  ! 100   
+
+C...Fragmentation of nuclei
+      DATA KODFRAG /0/
+C...Debug label and event counter
+      DATA Ndebug /0/
+      DATA Ncall /0/
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE PARAM_PRINT(LUN)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON /S_CZLEAD/ CLEAD, FLEAD
+      COMMON /S_CPSPL/ CCHIK(4,99)
+      COMMON /S_DEBUG/ Ncall, Ndebug, Lunn
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+      DOUBLE PRECISION PPT02
+      COMMON /S_CQDIS2/ PPT02(44)
+      DOUBLE PRECISION PPT0,ptflag
+      COMMON /S_CQDIS/ PPT0(35),ptflag
+      SAVE
+
+      WRITE (LUN, 25)
+25      FORMAT( /,1x,40('-'), /
+     +   ' SIBYLL MONTE CARLO PROGRAM. Version 2.3.f',/,
+     +    1x,40('-'),/'  List of parameters: ' )
+
+      WRITE (LUN, 31) FAin, FB0in
+31      FORMAT ('  Parameters of longitudinal fragmentation: ', /,
+     +          '   f(z) = (1-z)**a * exp(-b * mt**2/z) ', /,
+     +          '   a = ', f9.3, 3x, ' b = ', f9.3, ' GeV**-2' )
+      WRITE (LUN, 32) CLEAD, 1.D0/FLEAD-1.D0
+32      FORMAT ('  Parameters of leading fragmentation: ', /,
+     +   '   f(z) = c + (1-z)**a ', /,
+     +   '   c = ',f9.3,3x,' a = ',f9.3) 
+
+        WRITE (LUN, 33) str_mass_val, str_mass_sea
+ 33     FORMAT ('  Mass cuts ', /,
+     +          '   val = ', f9.3, 3x, ' sea = ', f9.3, ' GeV' )
+
+      WRITE (LUN, 35) PPT02(1), PPT02(3), PPT02(11),ppt02(10),ppt02(20)
+35      FORMAT ('   <pT> of sea partons ', /,
+     +   3x,'<pT>(u/d) ',F8.3,2x,'<pT>(s) ',f8.3,2x,'<pT>(qq) ',f8.3,
+     +     2x,'<pT>(val) ',f8.3,2x,'<pT>(sea) ',f8.3)
+
+      WRITE (LUN, 120) (PAR(K),K=1,24)
+120      FORMAT (1x, ' Parameters of flavor formation: ',/,
+     +   3x,'PAR(1) = Prob(qq)/Prob(q)              = ',F10.2,/,
+     +   3x,'PAR(2) = Prob(s)/Prob(u)               = ',F10.2,/,
+     +   3x,'PAR(3) = Prob(us)/Prob(ud)             = ',F10.2,/,
+     +   3x,'PAR(4) = Prob(ud_0)/Prob(ud_1)         = ',F10.2,/,
+     +   3x,'PAR(5) = Prob(Vector)/Prob(Scalar)     = ',F10.2,/,
+     +   3x,'PAR(6) = Prob(K*)/Prob(K)              = ',F10.2,/,
+     +   3x,'PAR(7) = Prob(spin 3/2)/Prob(spin=1/2) = ',F10.2,/,
+     +   3x,'PAR(8) = Prob(B-M-Bbar)/Prob(B-Bbar)   = ',F10.2,/,
+     +   3x,'PAR(9) = Phase space suppression of MI = ',F10.2,/,
+     +   3x,'PAR(10)= Low-energy limit for pt cutoff= ',F10.2,/,
+     +   3x,'PAR(11)= Pt cutoff factor for exp      = ',F10.2,/,
+     +   3x,'PAR(12)= Pt cutoff factor for exp      = ',F10.2,/,
+     +   3x,'PAR(13)= max. mass in diffraction      = ',F10.2,/,
+     +   3x,'PAR(14)= Prob(qq)/Prob(q) std. value   = ',F10.2,/,
+     +   3x,'PAR(15)= Prob(qq)/Prob(q) in hard jets = ',F10.2,/,
+     +   3x,'PAR(16)= Prob(qq)/Prob(q) in diff.     = ',F10.2,/,
+     +   3x,'PAR(17)= not used                      = ',F10.2,/,
+     +   3x,'PAR(18)= not used                      = ',F10.2,/,
+     +   3x,'PAR(19)= not used                      = ',F10.2,/,
+     +   3x,'PAR(20)= not used                      = ',F10.2,/,
+     +   3x,'PAR(21)= not used                      = ',F10.2,/,
+     +   3x,'PAR(22)= effective scale in PDF (Q2)   = ',F10.2,/,
+     +   3x,'PAR(23)= not used                      = ',F10.2,/,
+     +   3x,'PAR(24)= Prob(s->c)                    = ',F10.2  )
+
+      WRITE (LUN, 130) (IPAR(K),K=1,17)
+130      FORMAT (1x, ' Model switches: ',/,
+     +   3x,'IPAR(1) = not used                      =',I4,/,
+     +   3x,'IPAR(2) = not used                      =',I4,/,
+     +   3x,'IPAR(3) = exponential pt                =',I4,/,
+     +   3x,'IPAR(4) = decouple qq/q in val. strings =',I4,/,
+     +   3x,'IPAR(5) = decouple qq/q in hm. diff.    =',I4,/,
+     +   3x,'IPAR(6) = decouple qq/q in hard strings =',I4,/,
+     +   3x,'IPAR(7) = remnant (not implemented yet) =',I4,/,
+     +   3x,'IPAR(8) = jet kinematic pdf set (DO/GRV)=',I4,/,
+     +   3x,'IPAR(9) = smear lowest diff. mass       =',I4,/,
+     +   3x,'IPAR(10)= high mass diff. mode (d:ON)   =',I4,/,
+     +   3x,'IPAR(11)= leading vec. meson prod. model=',I4,/,
+     +   3x,'IPAR(12)= inel. screening in pAir       =',I4,/,
+     +   3x,'IPAR(13)= decouple qq/q in val. strings =',I4,/,
+     +   3x,'IPAR(14)= fireball model                =',I4,/,
+     +   3x,'IPAR(15)= charm production              =',I4,/,
+     +   3x,'IPAR(16)= charmed transverse momentum   =',I4,/,
+     +   3x,'IPAR(17)= full charm model              =',I4 )
+
+      WRITE (LUN, 40)
+      WRITE (LUN, 41) CCHIK (1,13), CCHIK(2,13)
+ 40   FORMAT(' Parameters of hadron splitting ' )
+ 41   FORMAT('   p -> [(ud) u] splitting: alpha = ', F10.3, /,
+     +       '   p -> [(uu) d] splitting: alpha = ', F10.3 )
+c     print rho0 splitting
+      WRITE (LUN, 42) CCHIK (1,27), CCHIK(2,27)        
+ 42   FORMAT(' rho0 -> [u ubar] splitting: alpha = ', F10.3, /,
+     +       ' rho0 -> [d dbar] splitting: alpha = ', F10.3 )
+c     print d+ splitting
+      WRITE (LUN, 43) CCHIK (4,59), CCHIK(2,59)        
+ 43   FORMAT('  dp -> [c ubar] splitting: alpha = ', F10.3, /,
+     +       '  dp -> [dbar c] splitting: alpha = ', F10.3 )
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_LIST(LUN)
+
+C-----------------------------------------------------------------------
+C...This routine prints the event record for the
+C.  current event on unit LUN
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON /S_DEBUG/ Ncall, Ndebug, Lunn
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+      INTEGER LLIST1
+      COMMON /S_PLIST1/ LLIST1(8000)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      INTEGER IRMNT,KRB,KRT
+      DOUBLE PRECISION XRMASS,XRMEX
+      COMMON /S_RMNT/ XRMASS(2),XRMEX(2),IRMNT(NW_max),KRB,KRT(NW_max)
+
+      CHARACTER*7 CTGT(0:20)
+      CHARACTER CODE*18
+      CHARACTER*18 NAMDIF(0:3)
+      CHARACTER*18 NAMRMNT(0:3)
+      SAVE
+      DATA CTGT /'Air    ','Proton ',19*'Nucleus'/
+      DATA NAMDIF /'Non-diff. event   ',
+     &  'Beam diffraction  ','Target diffraction','Double diffraction'/
+      DATA NAMRMNT /'No resolvd remnant',
+     &  'Beam remnant     ','Target remnant    ','Double remnant    '/
+
+ 50   FORMAT(3X,88('-'),/,25X,'SIBYLL EVENT SUMMARY',25X,
+     &     /,3X,88('-'))
+ 52   FORMAT( 3X,'Beam + Target @ Energy:',2X,A6,2X,'+',2X,A7,2X,
+     &     '@',1p,E11.3,' GeV')
+ 53   FORMAT( 3X,'Beam + Target @ Energy:',2X,'Anti-',A6,2X,'+',2X,A7,
+     &     2X,'@',1p,E11.3,' GeV')
+
+      WRITE (LUN,50)
+      IF (KB .GT. 0 ) THEN
+        WRITE (LUN,52)
+     &     NAMP(IABS(KB)),CTGT(IAT),SQS
+      ELSE 
+        WRITE (LUN,53)
+     &     NAMP(IABS(KB)),CTGT(IAT),SQS
+      ENDIF
+      if(NWD.eq.1)THEN
+         WRITE (LUN,*) '  ',NAMDIF(JDIF(1))
+         IF(jdif(1).eq.0)
+     &    WRITE (LUN,*) '  ',NAMRMNT(abs(IRMNT(1)))
+      else
+         WRITE (LUN,*) '  ',NAMDIF(0)
+      endif
+
+      WRITE (LUN,*) '  A/N_w/N_s/N_j = ', IAT , NWD, NSOF, NJET
+      WRITE (LUN,100)
+
+C...Print particle list
+      kchar = 0
+      ibary = 0
+      ichmd = 0
+      istrg = 0
+      DO J=1,NP
+        L = MOD(LLIST(J),10000)
+        CODE = '                  '
+        CODE(1:6) = NAMP(IABS(L))
+        IF (L .LT. 0) CODE(7:9) = 'bar'
+        IF(IABS(LLIST(J)) .GT. 10000)   CODE(10:10) = '*'
+        WRITE (LUN,120) J, CODE, NIORIG(J),JDIF(NIORIG(J)),LLIST1(J), 
+     &       NPORIG(J), (P(J,K),K=1,4)
+        if(abs(LLIST(J)).LT.10000) then
+          kchar = kchar+sign(1,l)*ICHP(iabs(l))
+          ibary = ibary+sign(1,l)*IBAR(iabs(l))
+          ichmd = ichmd+sign(1,l)*ICHM(iabs(l))
+          istrg = istrg+sign(1,l)*ISTR(iabs(l))
+        endif
+      ENDDO
+      CALL PFSUM(1,NP,Esum,PXsum,PYsum,PZsum,NF)
+      WRITE(LUN,140) PXsum,PYsum,PZsum,Esum
+100      FORMAT(3X,'N  Particle',12X,'Int',2x,'Jdif',2x,'Prnt',2x,'Proc'
+     +         ,6x,'PX',9x,'PY',9x,'PZ',9x,'E', /, 3X,88('-'))
+120      FORMAT(I6,1X,A18,3I5,I8,2F10.3,1p,2E11.3)
+140      FORMAT(3X,88('-'),/,'  Tot =',41X,2F10.3,1p,2E11.3)
+         write(LUN,'(1x,a,i3,3x,a,i3)') ' Total charge:     ',kchar,
+     &        'total baryon number:',ibary
+         write(LUN,'(1x,a,i3,3x,a,i3)') ' Total strangeness:',istrg,
+     &        'total charm number: ',ichmd
+
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE KCODE (J,CODE,NC)
+
+C-----------------------------------------------------------------------
+C...Produce the code for parton J
+C.  Input K, Output CODE, NC=number of characters
+C..................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      CHARACTER*5 CODE
+      CHARACTER*1 NAMQ(4)
+      SAVE
+      DATA NAMQ /'u','d','s','c'/
+
+      CODE = '     '
+      IF(J.EQ.0)  THEN
+         CODE(1:3) = 'glu'
+         NC = 3
+         RETURN
+      ENDIF
+      JA = IABS(J)
+      J1 = MOD(JA,10)
+      J2 = (JA-J1)/10
+      IF(JA .GT. 10) THEN
+         CODE(1:1) = NAMQ(J2)
+         CODE(2:2) = NAMQ(J1)
+         NC = 2
+      ELSE
+         CODE(1:1) = NAMQ(J1)
+         NC = 1      
+      ENDIF
+      IF (J .LT. 0)  THEN
+         CODE(NC+1:NC+3) = 'bar'
+         NC = NC+3
+      ENDIF
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_PARTPR(LUN)
+
+C----------------------------------------------------------------
+C     prints the particles known to SIBYLL with their internal
+C     and PDG labels \FR'13
+C----------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      SAVE
+
+      WRITE(LUN,50)
+ 50   FORMAT(/,2X,16X,'SIBYLL PARTICLE TABLE:',/,2x,80('-'))
+      WRITE(LUN,100)
+ 100  FORMAT(2X,'Particle',4X,'SIB PID',6x,'SIB2PDG',6x,'SIB2PDG^-1', 
+     &     4x,'MASS',4x,'STRG',4x,'CHRM',4x,'BRYN'/, 2X,80('-'))
+
+      DO J=1,99
+         IA = ISIB_PID2PDG( j )         
+         IF(IA.ne.0)THEN
+            ISIBPDG2PIDIA=ISIB_PDG2PID( IA )
+         ELSE
+            WRITE(LUN,'(1X,A,I2)') 'PDG conversion not found! pid=', j
+         ENDIF         
+         WRITE (LUN,120)  NAMP(J), J, IA, ISIBPDG2PIDIA, AM(J), ISTR(J),
+     &        ICHM(J), IBAR(J)
+      ENDDO
+ 120  FORMAT(4X,A6,4X,I4,7X,I7,8X,I4,5X,F9.3,3(6X,I2))
+
+      END
+
+C=======================================================================
+
+      INTEGER FUNCTION ISIB_PID2PDG(Npid)
+
+C----------------------------------------------------------------
+C     conversion of SIBYLL internal particle code to PDG standard
+C
+C     input:     Npid        internal particle number
+C     output:    sib_pid2pdg  PDG particle number
+C
+C     based on similar phojet function \FR'13
+C----------------------------------------------------------------
+      COMMON /S_PDG2PID/ ID_PDG_LIST(99),ID_LIST(577)
+      INTEGER NPIDA,NPID
+      SAVE
+
+      Npida = iabs(Npid)
+      ISIB_PID2PDG = ID_PDG_LIST(Npida)
+      IF(NPID.lt.0)ISIB_PID2PDG = isign(ISIB_PID2PDG,Npid)
+      RETURN
+      END
+
+C=======================================================================
+
+      INTEGER FUNCTION ISIB_PDG2PID(Npdg)
+
+C-----------------------------------------------------------------------
+C     conversion of PDG standard particle code to SIBYLL internal
+C
+C     input:     Npdg        PDG particle number
+C     output:    sib_pdg2pid internal particle id
+C
+C     based on similar phojet function \FR'13
+C----------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /S_PDG2PID/ IPID_PDG_LIST(99),ID_LIST(577)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+      SAVE
+
+      Nin = abs(Npdg)
+      if((Nin.gt.999999).or.(Nin.eq.0)) then
+C  invalid particle number
+        if(ndebug.gt.5) write(6,'(1x,A,I10)')
+     &    ' ISIB_PDG2PID: invalid PDG ID number ',Npdg
+        ISIB_PDG2PID = 0
+        return
+      else If(Nin.le.577) then
+C  simple case
+        Nout = Nin
+      else
+C  use hash algorithm
+        Nout = mod(Nin,577)
+      endif
+
+ 100  continue
+
+C  particle not in table
+      if(ID_list(Nout).Eq.0) then
+         if(ndebug.gt.0) write(6,'(1x,A,I10)')
+     &    ' ISIB_PDG2PID: particle not in table ',Npdg
+        ISIB_PDG2PID = 0
+        return
+      endif
+      ID_out = ID_list(Nout)
+      IF(abs(ID_out).gt.99)then
+         ISIB_PDG2PID = 0
+         return
+      else
+
+         if(IPID_PDG_LIST(ID_list(Nout)).eq.Nin) then
+C     particle ID found
+            ISIB_PDG2PID = ID_list(Nout)
+            if (NPDG.lt.0) ISIB_PDG2PID = lbarp( ISIB_PDG2PID )
+            return
+         else
+C     increment and try again
+            Nout = Nout + 5
+            If(Nout.gt.577) Nout = Mod(Nout,577)
+            goto 100
+         endif
+      endif
+      END
+
+C=======================================================================
+
+      SUBROUTINE PDG_INI
+
+C-----------------------------------------------------------------------
+C     PDG conversion blocks \FR'13
+C----------------------------------------------------------------
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER ( ID_PDG_MAX = 260 )
+      COMMON /S_PDG2PID/ ID_PDG_LIST(99),ID_LIST(577)
+      SAVE
+      DATA ID_PDG_LIST /22,-11,11,-13,13,111,211,-211,321,-321, !10
+     &     130,310,2212,2112,12,-12,14,-14,-2212,-2112,         !20
+     &     311,-311,221,331,213,-213,113,323,-323,313,          !30
+     &     -313,223,333,3222,3212,3112,3322,3312,3122,2224,     !40
+     &     2214,2114,1114,3224,3214,3114,3324,3314,3334,0,      !50
+     &     202212,202112,212212,212112,4*0,411,-411,            !60
+     &     900111,900211,-900211,7*0,                           !70
+     &     421,-421,441,431,-431,433,-433,413,-413,423,         !80
+     &     -423,0,443,4222,4212,4112,4232,4132,4122,-15,        !90
+     &     15,-16,16,4224,4214,4114,4324,4314,4332/
+
+      IF(Ndebug.gt.2)
+     & WRITE(LUN,*) ' INITIALIZING PDG TABLES..'
+      CALL SIB_CPCINI(ID_pdg_max,ID_pdg_list,ID_list)
+      
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_CPCINI(Nrows,Number,List)
+
+C-----------------------------------------------------------------------
+C     initialization of particle hash table
+C
+C     input:   Number     vector with Nrows entries according to PDG
+C                         convention
+C
+C     output:  List       vector with hash table
+C
+C     (this code is based on the function initpns written by
+C      Gerry Lynch, LBL, January 1990)
+C
+C***********************************************************************
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      integer Number(*),List(*),Nrows
+      Integer Nin,Nout,Ip,I
+      SAVE
+
+      do I = 1,577
+        List(I) = 0
+      enddo
+
+C    Loop over all of the elements in the Number vector
+
+        Do 500 Ip = 1,Nrows
+            Nin = Number(Ip)
+
+C    Calculate a list number for this particle id number
+            If(Nin.Gt.999999.or.Nin.Le.0) Then
+                 Nout = -1
+            Else If(Nin.Le.577) Then
+                 Nout = Nin
+            Else
+               Nout = Mod(Nin,577)
+            End If
+
+ 200        continue
+
+            If(Nout.Lt.0) Then
+C    Count the bad entries
+               IF(Ndebug.gt.3) Write(LUN,'(1x,a,i10)')
+     &            ' SIB_CPCINI: invalid particle ID',Nin
+               Go to 500
+            End If
+            If(List(Nout).eq.0) Then
+                List(Nout) = Ip
+            Else
+                If(Nin.eq.Number(List(Nout))) Then
+                  IF(Ndebug.gt.3)Write(LUN,'(1x,a,i10)')
+     &              ' SIB_CPCINI: double particle  ID',Nin
+                End If
+                Nout = Nout + 5
+                If(Nout.Gt.577) Nout = Mod(Nout, 577)
+
+                Go to 200
+            End If
+ 500    Continue
+
+      END
+C=======================================================================
+
+      SUBROUTINE PFSUM(N1,N2,ETOT,PXT,PYT,PZT,NF)
+
+C-----------------------------------------------------------------------
+C...Return the energy,px,py,pz and the number of stable
+C.  particles in the list between N1 and N2
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+c      COMMON /S_PLIST/ P(8000,5), LLIST(8000), NP
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      SAVE
+
+      NF=0
+      ETOT=0.D0
+      PXT=0.D0
+      PYT=0.D0
+      PZT=0.D0
+      DO J=N1,N2
+         L = LLIST(J)     
+         IF (IABS(L) .LT. 10000)  THEN
+           NF = NF+1
+           ETOT = ETOT + ABS( P(J,4) )
+           PXT = PXT + P(J,1)
+           PYT = PYT + P(J,2)
+           PZT = PZT + P(J,3)
+         ENDIF
+      ENDDO
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE QNUM (JQ,JS,JC,JB,JBA, NC, NF)
+
+C-----------------------------------------------------------------------
+C...Return the quantum numbers of one event
+C.  JQ = charge, JB = baryon number, JS = strangeness, JC = charmedness
+C.  JBA = (number of baryons+antibaryons)
+C.  NC  = number of charged particles
+C.  NF  = number of final particles
+C..................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+      SAVE
+
+      JQ = 0
+      JB = 0
+      JS = 0
+      JC = 0
+      JBA= 0
+      NC = 0
+      NF = 0
+      DO J=1,NP
+          L = LLIST(J)
+          LL = IABS(L)
+          IF (LL .LT. 10000)  THEN
+              IF(ICHP(LL) .NE. 0) NC = NC + 1
+              NF = NF + 1
+              JQ = JQ + ICHP(LL)*ISIGN(1,L)
+              JB = JB + IBAR(LL)*ISIGN(1,L)
+              JBA= JBA+ IBAR(LL)
+              JS = JS + ISTR(LL)*ISIGN(1,L)
+              JC = JC + ICHM(LL)*ISIGN(1,L)
+          ENDIF
+      ENDDO
+      RETURN
+      END
+
+C=======================================================================
+
+      BLOCK DATA KFLV_INI
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER KFLV
+      COMMON /S_KFLV/ KFLV(4,43)
+      SAVE
+      DATA (KFLV(1,i),i=1,4) /6,8,10,71/
+      DATA (KFLV(1,i),i=5,43) /6*0,40,13,34,84,6*0,13,14,39,89,6*0,
+     &     34,39,37,87,6*0,84,85,87/      
+      DATA (KFLV(2,i),i=1,4) /7,6,21,59/
+      DATA (KFLV(2,i),i=5,43) /6*0,13,14,39,89,6*0,14,43,36,86,6*0,
+     &     39,36,38,88,6*0,84,85,87/     
+      DATA (KFLV(3,i),i=1,4) /9,22,33,74/
+      DATA (KFLV(3,i),i=5,43) /6*0,34,39,35,87,6*0,39,36,38,88,6*0,
+     &     35,36,49,99,6*0,84,85,87/
+      DATA (KFLV(4,i),i=1,4) /72,60,75,83/
+      DATA (KFLV(4,i),i=5,43) /6*0,84,85,87,0,6*0,85,86,88,0,6*0,
+     &     87,88,99,0,6*0,0,0,0/
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_I4FLAV (IFL1, IFL2_A, IRNK, IFL2, KF)
+
+C-----------------------------------------------------------------------
+C.  This subroutine receives as input IFL1 the flavor code
+C.  of a quark (antiquark) and  generates the antiquark (quark)
+C.  of flavor code IFL2 that combine with the original parton
+C.  to compose an hadron of code KF.
+C.
+C.  updated to 4 FLAVORS \FR'13
+C.  Baryon sector is from jetset code
+C.  assuming D*_s+- are J=1, only Charm=1 baryons
+C.
+C.  If (IFL2_A.NE.0) returns an hadron KF composed of IFL1 and IFL2_A
+c
+c     Input: IFL1 - flavor of first quark
+c            IFL2_A - flavor of second quark ( if 0 randomly chosen ) 
+c            IRNK - position in hadron chain
+c     Output: IFL2 - flavor of second quark partner to be passed on
+c             KF - final hadron
+C-----------------------------------------------------------------------
+Cf2py integer,intent(out) :: ifl2
+Cf2py integer,intent(out) :: kf
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)      
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      DIMENSION KFLA(4,4,2), CDIAG(16), KDIAG(8)
+      DIMENSION KBAR(40), CFR(28), KFR(80)
+      SAVE
+      DATA KFLA /0,8,10,71,7,0,22,59,9,21,0,74,72,60,75,0, ! spin-zero mesons
+     +     0,26,29,80,25,0,31,78,28,30,0,76,81,79,77,0/ ! spin-one mesons
+      DATA CDIAG/.5D0,.25D0,.5D0,.25D0,1.D0,.5D0,2.D0,1.D0, !spin-zero diagonal mesons
+     +     .5D0,0.D0,.5D0,0.D0,1.D0,1.D0,2.D0,1.D0/ ! spin-one diagonal mesons
+      DATA KDIAG /6,23,24,73,27,32,33,83/
+      DATA KBAR /13,14,34,35,36,37,38,84,85,86, !jetset -> sibyll part. code map
+     +     87,88,99,3*0,39,89,87,88, 
+     +     40,41,42,43,44,45,46,47,48,49,      
+     +     94,95,96,97,98,99,4*0/ ! spin-3/2 css baryon added to 1/2 css
+      DATA CFR /0.75D0,0.D0,0.5D0,0.D0,0.D0,1.D0,0.1667D0,0.3333D0,
+     $          0.0833D0,0.6667D0,0.1667D0,0.3333D0,-3.D0,1.D0,-2.D0,
+     $          -2.D0,1.D0,0.D0,0.D0,-3.D0,1.D0,1.D0,1.D0,5*0.D0/
+      DATA KFR/0,16,17,19,100,104,109,115,0,26,27,29,122,126,131,137
+     +  ,0,40,42,47,144,158,178,205,0,1,3,6,10,15,21,28,0,0,56,57,240,
+     +  246,256,271,0,0,1,3,6,10,15,21,60,61,64,70,292,307,328,356,
+     +  0,1,3,6,10,15,21,28,16*0/
+
+      IF(NDEBUG.gt.6)
+     &     WRITE(LUN,*)' SIB_FLAV: input:',IFL1, IFL2_A, IRNK, IFL2, KF
+
+c     set rho0 / ( omega, phi ) ratio, i.e. I=1 to I=0
+c     default: 0.5, 0.0 ( phi only created from s-sbar)
+      CDIAG(8+1) =  1.D0-PAR(143) ! u-flavor, Prob. I=1 vs 0
+      CDIAG(8+3) =  1.D0-PAR(143) ! d-flavor, Prob. I=1 vs 0
+
+      XDIQ = 1.D0
+      
+      IARNK = IABS(IRNK)
+      IFLA = IABS(IFL1)
+c     check if diq production allowed?
+c     for strings with leading diquarks the immediate formation of another diquark may be forbidden
+      if(ifla.gt.100.and.mod(ifla,100).lt.10)then
+         XDIQ = PAR(158)
+         ifl1 = mod(ifl1,100)
+         IFLA = IABS(IFL1)
+      endif
+      
+      IFL2A = IFL2_A
+      IF (IFL2A .NE. 0)  THEN
+c     combine existing flavors to hadron
+c     three cases: input diquark (MB=2): need to sample additional quark,
+c                  input quark (MB=0,1): sample quark (0) or diquark (1)?         
+         IFL2A = MOD(IFL2A,100)
+         IFL2 = IFL2A
+         IFLB = IABS(IFL2A)
+         MB = 0
+         IF (IFLB .GT. 10)   MB=1
+         IF (IFLA .GT. 10)   MB=2
+      ELSE
+c     sample new flavor
+         MB = 2
+         IF (IFLA .LT. 10)   THEN
+             MB = 1
+             IF ((1.D0+PAR(1))*S_RNDM(0).LT. 1.D0)  MB=0
+             XDIQ = 1.D0             
+c     suppress baryons close to the string end
+c     IPAR(55) defines largest forbidden rank
+c     PAR(101) is the rejection probability
+             IF (IPAR(54).eq.1)THEN
+                IF(IARNK.le.IPAR(55).and.S_RNDM(1).lt.PAR(101)) MB=0
+             ENDIF
+         ENDIF
+      ENDIF
+
+ 50   IF (MB .EQ. 0)  THEN
+c     flavor open, sample from u,d,s,c
+         IF (IFL2A.EQ.0)THEN
+            IF(IPAR(69).eq.2)THEN
+c     asymmetric between u,d
+               IFL2 = MIN(2,1+INT((2.D0+PAR(115))*S_RNDM(0)))
+               IFLS = 3*INT(INT((2.D0+PAR(2))*S_RNDM(1))*0.5D0)
+               IFL2 = MAX(IFL2,IFLS)
+               IFL2 = ISIGN(IFL2,-IFL1)
+            ELSE
+c     symmetric in u,d
+               IFL2=ISIGN(1+INT((2.D0+PAR(2))*S_RNDM(0)),-IFL1)
+            ENDIF
+            IF(IABS(IFL2).eq.3) THEN
+               IF(S_RNDM(1).lt.PAR(24)*PAR(125))
+     +              IFL2=ISIGN(4,-IFL1)
+            ENDIF
+         ENDIF
+         IFLD = MAX(IFL1,IFL2)
+         IFLE = MIN(IFL1,IFL2)
+         GOTO 100
+      ENDIF
+
+C...  Decide if the diquark must be split
+c     if diquark is from previous splitting (popcorn) do NOT split diquark
+c     jump to sample quark and form baryon      
+      IF (MB .EQ. 2 .AND. IFLA .GT. 100)   THEN
+         IFLA = MOD(IFLA,100)
+           GOTO 200
+      ENDIF
+c     split diquark? if yes sample single flavor and form meson
+c     diquark with any flavor combination is passed on with id+100        
+      IF (MB .EQ. 2 .AND. IFL2A .EQ. 0)   THEN
+          IF (S_RNDM(0) .LT. PAR(8))  THEN
+             MB = 0
+             IFLG = MOD(IFL1,10)
+             IFLH =(IFL1-IFLG)/10
+             IF (S_RNDM(1) .GT. 0.5D0)  THEN
+                IFLDUM = IFLG
+                IFLG = IFLH
+                IFLH = IFLDUM
+             ENDIF
+             IFL11=IFLG
+             IFL22=ISIGN(1+INT((2.D0+PAR(2))*S_RNDM(2)),-IFL1)
+             IFLD = MAX(IFL11,IFL22)
+             IFLE = MIN(IFL11,IFL22)
+             IFL2 = -IFLH*10+IFL22
+             IF (S_RNDM(3) .GT. 0.5D0)  IFL2 = IFL22*10-IFLH
+c     limit diquark splitting to B-M-B (default: yes)             
+             IF(IPAR(92).eq.1) IFL2 = IFL2+ISIGN(100,IFL2)
+          ENDIF
+      ENDIF
+       
+C...Form a meson: consider spin and flavor mixing for the diagonal states
+ 100  IF (MB .EQ. 0)  THEN
+         IF1 = IABS(IFLD)
+         IF2 = IABS(IFLE)
+         IFLC = MAX(IF1,IF2)
+         KSP = INT(PAR(5)+S_RNDM(0))
+         KSP = MIN(KSP,1)
+         IF (IFLC.EQ.3)  KSP = INT(PAR(6)+S_RNDM(1))
+         IF (IFLC.EQ.4)  KSP = INT(PAR(6)+S_RNDM(2))
+         IF (IF1 .NE. IF2)   THEN
+            KF = KFLA(IF1,IF2,KSP+1)
+         ELSE
+            R = S_RNDM(0)
+            JF=1+INT(R+CDIAG(8*KSP+2*IF1-1))+
+     +             INT(R+CDIAG(8*KSP+2*IF1))
+            JF = MIN(JF,4)
+            KF=KDIAG(JF+4*KSP)
+c     suppress neutral pions
+            IF(KF.eq.6)THEN
+               IF(IPAR(82).eq.1.and.
+     +              S_RNDM(kf).lt.PAR(137))then
+                  IF(IFL2A.ne.0) goto 100
+                  IF(IFLA.gt.10) mb = 2                  
+                  GOTO 50
+               endif
+c     suppress neutral pions, depending on rank
+               IF(IPAR(82).eq.2.and.S_RNDM(3).lt.PAR(137).and.
+     +              irnk.gt.0.and.irnk.lt.2) then
+                  IF(IFL2A.ne.0) goto 100
+                  IF(IFLA.gt.10) mb = 2
+                  GOTO 50
+               endif
+            ENDIF
+c     suppress rank1 (leading) omega
+            IF(KF.eq.32)THEN
+               IF(IPAR(83).ne.0.and.
+     +              S_RNDM(kf).lt.PAR(138))then
+                  IF(IFL2A.ne.0) goto 100
+                  IF(IFLA.gt.10) mb = 2                  
+                  GOTO 50
+               endif
+            ENDIF
+         ENDIF
+c         PRINT*,' I4FLAV returns :(IFL1,IFL2,LL)',IFL1,IFL2,KF
+        IF(NDEBUG.gt.6)
+     &     WRITE(LUN,*)' SIB_FLAV: output:',IFL1, IFL2_A, IRNK, IFL2, KF
+         RETURN
+      ENDIF
+
+C...Form a baryon
+ 200  IF (IFL2A .NE. 0)   THEN
+         IF (MB .EQ. 1)  THEN
+            IFLD = IFLA
+            IFLE = IFLB/10
+            IFLF = MOD(IFLB,10)
+         ELSE
+            IFLD = IFLB
+            IFLE = IFLA/10
+            IFLF = MOD(IFLA,10)
+         ENDIF
+         LFR = 3+2*((2*(IFLE-IFLF))/(1+IABS(IFLE-IFLF)))
+         IF(IFLD.NE.IFLE.AND.IFLD.NE.IFLF)  LFR=LFR+1
+      ELSE
+ 110     CONTINUE
+         IF(MB.EQ.1)   THEN     ! generate diquark
+            IFLD = IFLA
+ 120        IFLE = 1+INT((2.D0+PAR(2)*PAR(3))*S_RNDM(0))
+            IFLF = 1+INT((2.D0+PAR(2)*PAR(3))*S_RNDM(1))          
+            IF(IFLD.NE.4)THEN
+               IF(IFLE.EQ.3)THEN 
+                  IF(S_RNDM(2).lt.PAR(24)*PAR(125))
+     +                 IFLE=4
+               ENDIF
+               IF(IFLF.EQ.3.and.IFLE.NE.4)THEN 
+                  IF(S_RNDM(3).lt.PAR(24)*PAR(125))
+     +                 IFLF=4
+               ENDIF
+            ENDIF
+            IF(IFLE.GE.IFLF.AND.PAR(4).LT.S_RNDM(4))    GOTO 120
+            IF(IFLE.LT.IFLF.AND.PAR(4)*S_RNDM(5).GT.1.D0) GOTO 120     
+            IFL2=ISIGN(10*IFLE+IFLF,IFL1)
+         ELSE                   ! generate quark
+            IF(IPAR(69).eq.2)THEN
+c     asymmetric between u,d
+               IFL2 = MIN(2,1+INT((2.D0+PAR(115))*S_RNDM(6)))
+               IFLS = 3*(INT((2.D0+PAR(2))*S_RNDM(7))/2)
+               IFL2 = MAX(IFL2,IFLS)
+               IFL2 = ISIGN(IFL2,IFL1)
+            ELSE
+c     symmetric in u,d
+               IFL2=ISIGN(1+INT((2.D0+PAR(2))*S_RNDM(8)),IFL1)
+            ENDIF
+            IFLE=IFLA/10
+            IFLF=MOD(IFLA,10)
+            IF(IABS(IFL2).EQ.3.and.IFLF.ne.4.and.IFLE.ne.4) THEN
+               IF(S_RNDM(9).lt.PAR(24)*PAR(125))
+     +              IFL2=ISIGN(4,IFL1)
+            ENDIF
+            IFLD=IABS(IFL2)
+         ENDIF
+C...SU(6) factors for baryon formation
+         LFR=3+2*((2*(IFLE-IFLF))/(1+IABS(IFLE-IFLF)))
+         IF(IFLD.NE.IFLE.AND.IFLD.NE.IFLF)  LFR=LFR+1
+         WT = CFR(2*LFR-1)+PAR(7)*CFR(2*LFR)
+         IF(IFLE.LT.IFLF)  WT=WT/3.D0
+         IF (WT.LT.S_RNDM(0)) GOTO 110
+      ENDIF
+
+C...Form Baryon
+      IFLG=MAX(IFLD,IFLE,IFLF)
+      IFLI=MIN(IFLD,IFLE,IFLF)
+      IFLH=IFLD+IFLE+IFLF-IFLG-IFLI
+c      IF(IFLG+IFLH.gt.7) GOTO 200 ! forbid double charmed
+      KSP=2+2*INT(1.D0-CFR(2*LFR-1)+(CFR(2*LFR-1)+PAR(7)*
+     1       CFR(2*LFR))*S_RNDM(0))
+
+C...Distinguish Lambda- and Sigma- like particles
+      IF (KSP.EQ.2.AND.IFLG.GT.IFLH.AND.IFLH.GT.IFLI)  THEN
+         IF(IFLE.GT.IFLF.AND.IFLD.NE.IFLG) KSP=2+INT(0.75D0+S_RNDM(1))
+         IF(IFLE.LT.IFLF.AND.IFLD.EQ.IFLG) KSP=3
+         IF(IFLE.LT.IFLF.AND.IFLD.NE.IFLG) KSP=2+INT(0.25D0+S_RNDM(2))
+      ENDIF
+      KF=KFR(16*KSP-16+IFLG)+KFR(16*KSP-8+IFLH)+IFLI
+      IF(KBAR(KF-40).eq.0)THEN
+         WRITE(LUN,*)' jetset code missing,flvs:',kf,IFLG,IFLH,IFLI
+         CALL SIB_REJECT('SIB_I4FLAV      ')
+      ENDIF
+      KF=KBAR(KF-40)
+      IF(KF.le.14)THEN
+         IF(PAR(106).gt.S_RNDM(3).and.IARNK.le.IPAR(61)) KF=KF-13+51
+     &        +2*INT(PAR(108)+S_RNDM(4))
+      ENDIF
+      KF=ISIGN(KF,IFL1)
+c     if leading baryon, mark quark to supress baryon production in the next iteration
+c     i.e. forbid: Blead-Bbar-B combination
+      if(iarnk.eq.1.and.IPAR(93).eq.1.and.iabs(mod(ifl1,100)).gt.10)then
+         IFL2 = IFL2 + ISIGN(100,IFL2)
+      endif
+
+      IF(NDEBUG.gt.6)
+     &     WRITE(LUN,*)' SIB_FLAV: output:',IFL1, IFL2_A, IRNK, IFL2, KF
+      
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_ICFLAV( Q2, IS0, IS, IFL )
+
+C-----------------------------------------------------------------------
+C     Routine that samples symmetric between the available flavors
+C     Input: Q2 - mass scale, usually filled with s_hat
+C           IS0 - input flavor sign
+C     
+C     Output: IFL - flavor code: u,d,s,c or anti-quarks
+C              IS - flavor sign: quark or anti-quark, if 0 passed then
+C                   a new value is sampled      
+C     Parameters:   kT_s and kT_c i.e. width of the fermi function
+C-----------------------------------------------------------------------
+C     f2py double precision,intent(in) :: q2
+Cf2py integer,intent(in) :: is0
+Cf2py integer,intent(out) :: is
+Cf2py integer,intent(out) :: ifl
+      IMPLICIT NONE
+      DOUBLE PRECISION Q2
+      INTEGER IFL,IS
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      DOUBLE PRECISION XMS2,XMC2,P_S,P_C,S_RNDM,QMASS,FERMI
+      INTEGER IFL1,IS0
+      
+      IF( NDEBUG.gt.6 )
+     &     WRITE(LUN,*)'  SIB_ICFLAV: input (Q2,IFL,IS):',Q2,IFL,IS
+      
+c     quark or antiquark, sampled if input is zero
+      IF(IS0.eq.0) THEN
+         IS = -1 + 2*INT((2.D0-EPS8)*S_RNDM(IS0))
+      ELSE
+         IS = IS0
+      ENDIF
+      
+c     strange and charm quark masses
+      XMS2 = 4*QMASS(3)**2
+      XMC2 = 4*QMASS(4)**2 * PAR(153)
+      
+c     strange and charm parameters
+      IF(IPAR(89).eq.1)THEN
+c     exponential thresholds
+         P_S = PAR(154) *  EXP(-PAR(151)/Q2)
+         P_C = PAR(156) * EXP(-PAR(152)/Q2)
+      ELSE
+c     fermi func. threshold      
+c     P_s: 0 (u,d only) --> 1 (u,d,s equal) --> 2 (u+d,s+c equal)
+c     P_c: 0 (s only) --> 1 (s,c) equal
+         P_S = PAR(154) * FERMI( Q2, XMS2, -PAR(151) )
+     &        + PAR(155) * FERMI( Q2, XMC2, -PAR(152) )
+         P_C = PAR(156) * 0.5D0*FERMI( Q2, XMC2, -PAR(152) )
+      ENDIF
+      IF(NDEBUG.gt.6)THEN
+         WRITE(LUN,*)'  SIB_ICFLAV: (4*M_S**2, P_S, kT):',
+     &        xms2, P_s, PAR(151)
+         WRITE(LUN,*)'  SIB_ICFLAV: (4*M_C**2, P_C, kT):',
+     &        xmc2, P_c, PAR(152)
+      ENDIF
+
+c     sample u,d,s
+      IFL1 = MIN(INT((2.D0+P_S)*S_RNDM(IS0))+1,3)
+
+c     replace s with c
+      IFL1 = IFL1 + IFL1/3*MIN(INT(P_C+S_RNDM(IS0)),1)
+
+      IFL = IS*IFL1
+
+      IF(NDEBUG.gt.6)
+     &     WRITE(LUN,*)'  SIB_ICFLAV: output (Q2,IFL,IS):',Q2,IFL,IS
+
+      END
+C=======================================================================      
+      
+      SUBROUTINE SIB_DIFF (L0, JDIF1, Ecm, Irec, IREJ)
+
+C-----------------------------------------------------------------------
+C...diffraction dissociation
+C.  INPUT L0 = index of "beam particle"
+C.             the target is assumed to be a proton.
+C.    JDIF1 = 1  "beam diffraction"
+C.          = 2  "target diffraction"
+C.          = 3  "double diffraction"
+C     Irec  flag to avoid recursive calls of SIB_DIFF and SIB_NDIFF
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      DOUBLE PRECISION XM2MIN,ALXMIN,SLOP0,ASLOP,BSLOP,XMASS
+      COMMON /S_DIFMAss/ XM2MIN(6),ALXMIN(6),SLOP0,ASLOP,BSLOP,XMASS(2)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+      INTEGER LRNK
+      COMMON /SIB_RNK/ LRNK(8000)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      
+      DIMENSION P0(5),P1(5),P2(5)
+      
+C     mapping array from particle space to diff. mass
+c     six groups: proton, pion, kaons, hyperons,
+c                 charmed mesons, charmed baryons
+      INTEGER KK,I
+      DIMENSION KK(99)      
+      SAVE
+      DATA (KK(I), I= 1,39) /5*0,3*2,4*3,2*1,6*0,6*2,3,6*2,6*4/      
+      DATA (KK(I), I=40,99) /19*0,5,5,10*0,5,5,0,5,5,11*0,6,6,6,9*0,6/
+
+      if(Ndebug.gt.1) 
+     &  WRITE(LUN,*)' SIB_DIFF: called with (L0,JDIF1,Ecm):',
+     &  L0,JDIF1,Ecm
+
+      if(Irec.eq.1) THEN
+         Ipflag= -1
+         IIFLAG = 1
+c     add incoming target particles
+         PZ = PAWT(ECM,AM(IABS(L0)),AM(13))
+         E2 = SQRT(PZ**2+AM2(13))
+         CALL ADD_PRTN(0.D0,0.D0,-PZ,E2,AM(13),13,-2,0,IREFout)
+
+c     add interactions
+        xjdif = dble(jdif1)
+        CALL ADD_PRTN(0.D0,0.D0,xjdif,ecm,0.D0,1,-1,IREFout,IREF)
+      ENDIF
+      CALL GET_NPP(NPP_0,NPP0_0)
+
+      IDBAD = 0
+      NTRY = 0
+ 20   IREJ = 1
+      CALL INI_PRTN_STCK(NPP_0,NPP0_0)
+
+      IF(NTRY.gt.20*Irec) RETURN ! zero tolerance for recursive calls 
+      NTRY = NTRY + 1
+     
+      LL = L0
+      LA = IABS(L0)
+      XM2MAX = PAR(13)*Ecm*Ecm
+      if(Ndebug.gt.1) 
+     &   WRITE(LUN,*)' SIB_DIFF: max diff. mass (M,Xi):',XM2MAX,PAR(13)
+      
+C...Double diffraction
+      IF (JDIF1 .EQ. 3)   THEN
+         K = MAX(1,2-IBAR(LA)-ISTR(LA)-ICHM(LA))
+         IF(Irec.eq.1) K = KK(LA)
+c     minimal mass if larger than particle mass plus one pion
+         XMMIN = XM2MIN(K)
+         IF(Irec.eq.0) XMMIN = MAX(XMMIN,(AM(LA)+AM(7)+0.02D0)**2)
+         XMB2 = XM2DIS(XMMIN,XM2MAX,1.D0)
+         XMB = SQRT (XMB2)
+         XMT2 = XM2DIS(XM2MIN(1),XM2MAX,1.D0)
+         XMT = SQRT (XMT2)
+         CALL TRANSFONSHELL(ECM,XMB,XMT,XM2MAX,0,P1,P2,IBAD)
+         IF(IBAD.ne.0) goto 20
+         XMASS(1) = XMB
+         IF(Irec.eq.1)THEN
+c     add diffractive system to parton stack
+            CALL ADD_PRTN_4VEC(P1,3,0,0,Iref)
+            CALL ADD_INT_REF(Iref,1)
+            CALL ADD_PRTN_4VEC(P2,-3,0,0,Iref)
+            CALL ADD_INT_REF(Iref,1)
+         ENDIF
+         if(Ndebug.gt.1) 
+     &        write(lun,*)' double-diff.: (kb,xmb,kt,xmt)',LL,xmb,13,xmt
+         CALL DIFDEC (LL, Irec, IDBAD, P1)
+         IF(IDBAD.eq.1)goto 20
+         Ipflag= -2
+         XMASS(2) = XMT
+         CALL DIFDEC (13, Irec, IDBAD, P2)
+         IF(IDBAD.eq.1)goto 20
+         IREJ = 0
+         RETURN
+      ENDIF
+
+C...Single diffraction
+      IF (JDIF1.EQ. 1)  THEN
+         K = MAX(1,2-IBAR(LA))
+         IF(Irec.eq.1) K = KK(LA)
+         EM  = AM(13)
+         EM2 = AM2(13)
+         L = 13
+         ZD = -1.D0
+         if(Ndebug.gt.1) 
+     &        write(lun,*)' single-diff. (beam): (kb)',LL
+      ELSE
+         K = 1
+         EM  = AM(LA)
+         EM2 = AM2(LA)
+         L = LL
+         LL = 13
+         ZD = +1.D0
+         if(Ndebug.gt.1) 
+     &        write(lun,*)' single-diff. (target): (kt)', LL
+
+      ENDIF
+C...Generate the mass of the diffracted system Mx (1/Mx**2 distribution)
+      XMMIN = XM2MIN(K)
+      IF(Irec.eq.0) XMMIN = MAX(XMMIN,(AM(LA)+AM(7)+0.02D0)**2)
+      XM2 = XM2DIS(XMMIN,XM2MAX,1.D0)
+      ALX = log(XM2)
+c... added part
+      X = XM2/XM2MAX*PAR(13)
+      IF (X.GT.PAR(13)-0.05D0) THEN
+        PRO = 0.5D0*(1.D0+(X-PAR(13))/0.05D0)
+        IF (S_RNDM(0).LT.PRO) X = 2.D0*PAR(13)-X
+        XM2 = XM2MAX*X/PAR(13)
+      ENDIF
+c...
+
+      XM = SQRT (XM2)
+      XMB = XM
+      XMT = XM
+      XMASS(1) = XMB
+      XMASS(2) = XMT
+
+C..   kinematics
+      CALL TRANSFONSHELL(ECM,XMB,EM,XM2MAX,0,P1,P2,IBAD)
+      IF(IBAD.ne.0) goto 20
+
+C...Generate the Kinematics of the pseudoelastic hadron
+      NP = NP+1
+      P(NP,4) = P2(4)
+      P(NP,3) = abs(P2(3))*ZD
+      P(NP,1) = p2(1)
+      P(NP,2) = p2(2)
+      P(NP,5) = EM
+      LLIST(NP) = L
+      NPORIG(NP) = IPFLAG
+      niorig(NP) = iiflag
+      LRNK(NP) = 0
+      
+C...Generating the hadronic system recoiling against the produced particle
+      P0(5) = SQRT(XM2)
+      P0(4) = P1(4)
+      DO J=1,3
+         P0(J) = -P(NP,J)
+      ENDDO
+      IF(Irec.eq.1)THEN
+c     add diffractive system to parton stack
+         CALL ADD_PRTN_4VEC(P1,JDIF1,0,0,Iref)
+         CALL ADD_INT_REF(Iref,1)
+         CALL ADD_PRTN_4VEC(P2,int(zd),0,0,Iref)
+         CALL ADD_INT_REF(Iref,1)
+      ENDIF
+      CALL DIFDEC (LL, Irec, IDBAD, P0)
+      IF(IDBAD.eq.1)goto 20
+      IREJ = 0
+
+      END
+      
+C=======================================================================
+      
+      SUBROUTINE DIFF_INI
+
+C----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER I,NPION
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION XM2MIN,ALXMIN,SLOP0,ASLOP,BSLOP,XMASS
+      COMMON /S_DIFMAss/ XM2MIN(6),ALXMIN(6),SLOP0,ASLOP,BSLOP,XMASS(2)
+      INTEGER NIPAR_max,NPAR_max      
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      SAVE      
+C...  Diffractive mass parameters from Sibyll 2.1
+c     minimal mass
+      DATA (XM2MIN(I), I=1,3) /1.5D0, 0.2D0, 0.6D0/ ! M_x**2(min) GeV**2
+      DATA (ALXMIN(I), I=1,3)   ! log[M_x**2(min)]
+     &     /0.405465D0,-1.6094379D0,-0.5108256D0/ 
+C...  pt spectrum
+      DATA SLOP0 /6.5D0/                 ! b (slope_ for Mx**2 > 5 GeV**2
+      DATA ASLOP /31.10362D0/            ! fit to the slope parameter.
+      DATA BSLOP /-15.29012D0/
+
+C     minimal mass for strange and charmed hadrons: 
+C     m_beam + n_pi * m_pi
+      NPION = IPAR(86)
+      
+C     hyperons (4), lowest mass: lambda
+      XM2MIN(4) = AM2(39) + NPION * AM2(7)
+      ALXMIN(4) = log(XM2MIN(4))
+      
+C     charmed mesons (5), lowest mass: Dmeson
+      XM2MIN(5) = AM2(59) + NPION * AM2(7)
+      ALXMIN(5) = log(XM2MIN(5))
+      
+C     charmed baryons (6), lowest mass: lambda_c
+      XM2MIN(6) = AM2(89) + NPION * AM2(7)
+      ALXMIN(6) = log(XM2MIN(6))
+
+c     debug output
+      IF(NDEBUG.gt.1)THEN
+         WRITE(LUN,*)'DIFF_INI: setting diff. mass parameters'
+         WRITE(LUN,*)' min mass: ', (XM2MIN(I), I=1,6)
+         WRITE(LUN,*)' log min mass: ', (ALXMIN(I), I=1,6)
+      ENDIF
+      
+      END
+
+C=======================================================================      
+
+      DOUBLE PRECISION FUNCTION SIGELA_PN(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pn/np elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 02/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pn elastic cross section
+      DATA (PTPP(K),K=    1,   18) /
+     &  -1.0128D+00,-8.8365D-01,-7.8000D-01,-6.8973D-01,-5.7462D-01,
+     &  -4.2138D-01,-2.9384D-01,-1.1581D-01, 1.1309D-01, 5.3273D-01,
+     &   9.6497D-01, 1.4860D+00, 2.0449D+00, 2.6798D+00, 3.5939D+00,
+     &   4.9903D+00, 6.2215D+00, 6.8942D+00/
+      DATA (STPP(K),K=    1,   18) /
+     &1.0001D+02,8.2414D+01,6.5819D+01,5.4660D+01,4.7794D+01,4.0500D+01,
+     &3.5781D+01,3.3208D+01,2.9921D+01,2.3919D+01,1.8633D+01,1.4206D+01,
+     &1.1068D+01,9.0752D+00,7.5167D+00,6.6817D+00,6.8455D+00,6.8568D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 18
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_PN: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_pn = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_PN: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_pn = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGELA_PP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pp elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 02/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pp elastic cross section
+      DATA (PTPP(K),K=    1,   20) /
+     &  -1.0548D+00,-9.9070D-01,-8.2516D-01,-6.8608D-01,-4.7199D-01,
+     &  -2.7085D-01,-1.0784D-01,-7.6152D-03, 1.6806D-01, 3.3154D-01,
+     &   5.4551D-01, 8.2275D-01, 1.3768D+00, 2.0058D+00, 2.9862D+00,
+     &   3.7151D+00, 4.3182D+00, 5.1348D+00, 5.6750D+00, 6.2152D+00/
+      DATA (STPP(K),K=    1,   20) /
+     &4.2555D+01,3.7310D+01,2.8426D+01,2.4873D+01,2.2758D+01,2.2166D+01,
+     &2.3350D+01,2.4450D+01,2.5212D+01,2.4535D+01,2.2927D+01,1.9459D+01,
+     &1.4213D+01,1.0745D+01,8.4602D+00,7.3604D+00,6.8528D+00,6.6836D+00,
+     &6.6836D+00,6.6836D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 20
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_PP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_pp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_PP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_pp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_PN(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pn and np total cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 02/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pn total cross section
+      DATA (PTPP(K),K=    1,   17) /
+     &  -1.0129D+00,-8.4520D-01,-7.4136D-01,-5.3626D-01,-3.3210D-01,
+     &  -1.2859D-01, 8.7237D-02, 3.1519D-01, 6.7022D-01, 1.0889D+00,
+     &   1.5714D+00, 2.0792D+00, 2.6760D+00, 3.9453D+00, 4.9226D+00,
+     &   5.6207D+00, 6.7629D+00/
+      DATA (STPP(K),K=    1,   17) /
+     &1.0000D+02,7.9053D+01,6.0976D+01,4.5194D+01,3.6729D+01,3.3429D+01,
+     &3.3142D+01,3.7303D+01,4.0316D+01,4.1607D+01,4.0746D+01,3.9885D+01,
+     &3.8594D+01,3.8307D+01,3.8881D+01,3.9168D+01,4.1320D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 17
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_PN: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_pn = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_PN: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_pn = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_PP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pp 
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 02/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pp total cross section
+      DATA (PTPP(K),K=    1,   23) /
+     &  -1.4202D+00,-1.2583D+00,-1.0464D+00,-8.3253D-01,-6.0471D-01,
+     &  -3.6376D-01,-8.4289D-02, 6.8739D-02, 1.9666D-01, 3.2471D-01,
+     &   4.2673D-01, 5.5375D-01, 7.5675D-01, 1.0737D+00, 1.5176D+00,
+     &   2.1393D+00, 2.7230D+00, 3.5353D+00, 4.3223D+00, 5.1728D+00,
+     &   5.7949D+00, 6.2392D+00, 6.9122D+00/
+      DATA (STPP(K),K=    1,   23) /
+     &9.2081D+01,7.0000D+01,4.2437D+01,2.8579D+01,2.3858D+01,2.2335D+01,
+     &2.3858D+01,2.8883D+01,3.5888D+01,4.3807D+01,4.7157D+01,4.7766D+01,
+     &4.7157D+01,4.4569D+01,4.1523D+01,3.9695D+01,3.8782D+01,3.8173D+01,
+     &3.8173D+01,3.8477D+01,3.9391D+01,4.0000D+01,4.1523D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 23
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_PP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_pp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_PP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_pp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGELA_PIPP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pi+p elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pi+p elastic cross section
+      DATA (PTPP(K),K=    1,   24) /
+     &  -9.1117D-01,-8.4887D-01,-7.8656D-01,-6.6196D-01,-5.3736D-01,
+     &  -4.4390D-01,-3.6083D-01,-2.6738D-01,-1.8431D-01,-5.9706D-02,
+     &   5.4515D-02, 1.3758D-01, 2.4142D-01, 3.5564D-01, 4.0756D-01,
+     &   5.1140D-01, 6.9830D-01, 1.0410D+00, 1.6225D+00, 2.2455D+00,
+     &   2.9620D+00, 3.7407D+00, 4.6026D+00, 5.5163D+00/
+      DATA (STPP(K),K=    1,   24) /
+     &7.3812D+01,5.8453D+01,4.5967D+01,3.1602D+01,2.2652D+01,1.6133D+01,
+     &1.2044D+01,9.2818D+00,8.3978D+00,9.9448D+00,1.2818D+01,1.4144D+01,
+     &1.6354D+01,1.8011D+01,1.7238D+01,1.2928D+01,1.0055D+01,7.1823D+00,
+     &5.5249D+00,4.6409D+00,3.6464D+00,2.9834D+00,3.2044D+00,3.0939D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 24
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_PIPP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_pipp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_PIPP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_pipp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_PIPP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pi+p total cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pi+p total cross section
+      DATA (PTPP(K),K=    1,   37) /
+     &  -9.2155D-01,-8.6963D-01,-8.0733D-01,-7.2426D-01,-5.4774D-01,
+     &  -4.7505D-01,-4.1275D-01,-3.6083D-01,-3.0891D-01,-2.2585D-01,
+     &  -1.7393D-01,-8.0473D-02, 2.3363D-02, 1.5835D-01, 2.3104D-01,
+     &   2.9334D-01, 3.1411D-01, 3.5564D-01, 4.1794D-01, 4.2833D-01,
+     &   4.9063D-01, 5.7370D-01, 6.7754D-01, 7.2945D-01, 8.1252D-01,
+     &   8.8521D-01, 9.9943D-01, 1.1033D+00, 1.4044D+00, 1.7782D+00,
+     &   2.1313D+00, 2.6712D+00, 3.2942D+00, 3.8342D+00, 4.6441D+00,
+     &   5.4748D+00, 5.8382D+00/
+      DATA (STPP(K),K=    1,   37) /
+     &7.3812D+01,6.4420D+01,5.0939D+01,3.7790D+01,2.3867D+01,1.8674D+01,
+     &1.6022D+01,1.5138D+01,1.4365D+01,1.5138D+01,1.7127D+01,2.0773D+01,
+     &2.4420D+01,2.7845D+01,3.3591D+01,3.9116D+01,4.0773D+01,4.1215D+01,
+     &4.0000D+01,3.8232D+01,3.3370D+01,3.0608D+01,2.9061D+01,2.8619D+01,
+     &2.9834D+01,3.0829D+01,3.0497D+01,2.9061D+01,2.7514D+01,2.5746D+01,
+     &2.4862D+01,2.3646D+01,2.3094D+01,2.2873D+01,2.3204D+01,2.3978D+01,
+     &2.4420D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 37
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_PIPP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_pipp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_PIPP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_pipp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGELA_PIMP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pi-p elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pi-p elastic cross section
+      DATA (PTPP(K),K=    1,   56) /
+     &  -1.8980D+00,-1.5458D+00,-1.4323D+00,-1.3602D+00,-1.2880D+00,
+     &  -1.2571D+00,-1.1845D+00,-1.1531D+00,-1.1112D+00,-1.0691D+00,
+     &  -1.0063D+00,-9.1252D-01,-8.2935D-01,-7.0477D-01,-6.0118D-01,
+     &  -4.6652D-01,-4.1489D-01,-3.9435D-01,-3.6334D-01,-3.4267D-01,
+     &  -3.0100D-01,-2.6966D-01,-2.4866D-01,-2.1741D-01,-1.6542D-01,
+     &  -1.1357D-01,-9.2992D-02,-8.2923D-02,-4.1875D-02,-1.1054D-02,
+     &   3.0281D-02, 7.2145D-02, 8.2958D-02, 1.1458D-01, 1.5645D-01,
+     &   2.6051D-01, 3.4368D-01, 3.8539D-01, 4.7900D-01, 5.3080D-01,
+     &   6.3455D-01, 7.4898D-01, 9.1527D-01, 1.1023D+00, 1.3412D+00,
+     &   1.5594D+00, 1.9541D+00, 2.4007D+00, 2.7122D+00, 3.0653D+00,
+     &   3.4392D+00, 3.8130D+00, 4.2387D+00, 5.0175D+00, 5.3602D+00,
+     &   5.8897D+00/
+      DATA (STPP(K),K=    1,   56) /
+     &2.9793D+00,9.7103D+00,1.5007D+01,1.9862D+01,2.3393D+01,2.5269D+01,
+     &2.6041D+01,2.4276D+01,2.1076D+01,1.6772D+01,1.3021D+01,1.0372D+01,
+     &9.6000D+00,9.8207D+00,1.1697D+01,1.4234D+01,1.6441D+01,1.8207D+01,
+     &1.9310D+01,2.0083D+01,1.8979D+01,1.7545D+01,1.5779D+01,1.5007D+01,
+     &1.4455D+01,1.5007D+01,1.6441D+01,1.8869D+01,2.2621D+01,2.5159D+01,
+     &2.6703D+01,2.4166D+01,2.0855D+01,1.7214D+01,1.4676D+01,1.2910D+01,
+     &1.2138D+01,1.0814D+01,9.6000D+00,1.0483D+01,1.1145D+01,9.6000D+00,
+     &8.3862D+00,7.5034D+00,6.6207D+00,6.0690D+00,4.9655D+00,4.4138D+00,
+     &4.4138D+00,3.7517D+00,3.3103D+00,3.2000D+00,3.3103D+00,3.3103D+00,
+     &3.3103D+00,3.5310D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 56
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_PIMP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_pimp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_PIMP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_pimp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_PIMP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy pi-p total cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  pi-p total cross section
+      DATA (PTPP(K),K=    1,   53) /
+     &  -1.9302D+00,-1.8269D+00,-1.6617D+00,-1.5490D+00,-1.4577D+00,
+     &  -1.3146D+00,-1.2630D+00,-1.2211D+00,-1.1686D+00,-1.1364D+00,
+     &  -1.0937D+00,-1.0305D+00,-9.4645D-01,-8.5245D-01,-7.6915D-01,
+     &  -6.7584D-01,-5.2057D-01,-4.3813D-01,-4.0781D-01,-3.6669D-01,
+     &  -3.1507D-01,-2.8372D-01,-2.6240D-01,-2.0995D-01,-1.7861D-01,
+     &  -1.1661D-01,-9.6329D-02,-7.6149D-02,-3.5817D-02,-5.0811D-03,
+     &   1.5958D-02, 5.8095D-02, 1.1175D-01, 1.7444D-01, 1.9540D-01,
+     &   2.8868D-01, 3.7173D-01, 4.5500D-01, 5.4845D-01, 6.4176D-01,
+     &   7.1436D-01, 8.3919D-01, 9.6397D-01, 1.3069D+00, 1.7018D+00,
+     &   2.0447D+00, 2.5952D+00, 3.1249D+00, 3.6130D+00, 4.1426D+00,
+     &   4.8175D+00, 5.3159D+00, 5.9284D+00/
+      DATA (STPP(K),K=    1,   53) /
+     &1.1145D+01,1.5007D+01,2.2179D+01,3.4428D+01,5.0428D+01,6.7862D+01,
+     &7.0952D+01,6.7972D+01,6.3007D+01,5.5393D+01,4.6566D+01,3.9614D+01,
+     &3.1779D+01,2.7586D+01,2.5821D+01,2.6924D+01,3.0676D+01,3.5531D+01,
+     &4.1931D+01,4.5131D+01,4.7448D+01,4.5903D+01,4.1600D+01,3.7517D+01,
+     &3.6083D+01,3.8400D+01,4.2152D+01,4.6676D+01,5.5945D+01,5.9145D+01,
+     &5.7048D+01,5.2414D+01,3.9062D+01,3.6083D+01,3.4538D+01,3.5862D+01,
+     &3.6083D+01,3.4538D+01,3.4538D+01,3.5641D+01,3.6303D+01,3.4538D+01,
+     &3.3214D+01,3.1117D+01,2.8690D+01,2.7145D+01,2.5600D+01,2.4717D+01,
+     &2.4166D+01,2.4166D+01,2.3945D+01,2.4055D+01,2.5159D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 53
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_PIMP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_pimp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_PIMP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_pimp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGELA_KPP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy K+p elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  K+p elastic cross section
+      DATA (PTPP(K),K=    1,   22) /
+     &  -1.1500D+00,-8.0733D-01,-5.4774D-01,-4.1275D-01,-2.5700D-01,
+     &  -8.0474D-02, 7.5281D-02, 2.5180D-01, 3.7641D-01, 5.3216D-01,
+     &   6.8792D-01, 8.4368D-01, 1.0929D+00, 1.5913D+00, 1.9340D+00,
+     &   2.3182D+00, 2.8166D+00, 3.2215D+00, 3.4708D+00, 3.9276D+00,
+     &   4.6233D+00, 5.5475D+00/
+      DATA (STPP(K),K=    1,   22) /
+     &1.2227D+01,1.2570D+01,1.2499D+01,1.2498D+01,1.2428D+01,1.2012D+01,
+     &1.1183D+01,1.0284D+01,9.4544D+00,8.2796D+00,6.8977D+00,5.9300D+00,
+     &4.6854D+00,3.6461D+00,3.2293D+00,3.0193D+00,2.6704D+00,2.4602D+00,
+     &2.3203D+00,2.0407D+00,2.2426D+00,2.5809D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 22
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_KPP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_kpp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_KPP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_kpp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_KPP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy K+p total cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  K+p total cross section
+      DATA (PTPP(K),K=    1,   20) /
+     &  -1.0981D+00,-7.1388D-01,-4.7505D-01,-3.1930D-01,-1.7393D-01,
+     &  -8.0474D-02, 2.3363D-02, 9.6049D-02, 1.9989D-01, 3.2449D-01,
+     &   4.6986D-01, 6.2562D-01, 8.3329D-01, 1.0825D+00, 1.4355D+00,
+     &   2.1001D+00, 2.6920D+00, 3.5434D+00, 4.6337D+00, 5.7448D+00/
+      DATA (STPP(K),K=    1,   20) /
+     &1.2158D+01,1.2362D+01,1.2429D+01,1.2428D+01,1.3187D+01,1.4429D+01,
+     &1.5809D+01,1.7327D+01,1.8224D+01,1.8430D+01,1.7945D+01,1.7806D+01,
+     &1.7459D+01,1.7250D+01,1.7041D+01,1.7381D+01,1.7446D+01,1.7853D+01,
+     &1.8881D+01,2.0529D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 20
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_KPP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_kpp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_KPP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_kpp = FV(1) 
+
+      END
+
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGELA_KMP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy K-p elastic cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  K-p elastic cross section
+      DATA (PTPP(K),K=    1,   36) /
+     &  -1.7871D+00,-1.4709D+00,-1.2813D+00,-1.1867D+00,-1.0179D+00,
+     &  -8.8055D-01,-8.0666D-01,-7.9648D-01,-7.7560D-01,-6.5951D-01,
+     &  -5.6450D-01,-4.7995D-01,-3.9539D-01,-3.4256D-01,-2.7894D-01,
+     &  -2.4691D-01,-2.0439D-01,-1.1952D-01,-1.3598D-02, 6.0479D-02,
+     &   1.1311D-01, 1.4462D-01, 2.0784D-01, 2.6053D-01, 3.2387D-01,
+     &   4.4022D-01, 5.5672D-01, 6.9424D-01, 8.6348D-01, 1.2127D+00,
+     &   1.6678D+00, 2.3770D+00, 3.2133D+00, 3.9226D+00, 4.6425D+00,
+     &   5.1612D+00/
+      DATA (STPP(K),K=    1,   36) /
+     &6.8962D+01,5.6135D+01,4.7307D+01,4.0271D+01,3.5582D+01,3.2549D+01,
+     &3.0480D+01,2.6617D+01,2.3858D+01,2.0410D+01,1.7927D+01,1.6549D+01,
+     &1.5308D+01,1.4343D+01,1.5310D+01,1.7794D+01,1.9451D+01,2.1108D+01,
+     &2.1661D+01,2.1386D+01,1.8490D+01,1.6144D+01,1.3386D+01,1.1041D+01,
+     &9.3860D+00,8.4219D+00,8.8376D+00,7.8738D+00,6.4965D+00,4.7080D+00,
+     &3.8869D+00,3.3456D+00,2.6682D+00,2.5409D+00,2.6896D+00,2.6974D+00/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 36
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGELA_KMP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigela_kmp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGELA_KMP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigela_kmp = FV(1) 
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIGTOT_KMP(plab)
+
+C-----------------------------------------------------------------------
+C
+C     low-energy K-p total cross section
+C     (based on spline interpolations)
+C
+C                                              (R.Engel 05/01)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+
+      dimension PTPP(100),STPP(100),DERIV(100,2),Z(10),FV(10),FD(10,2)
+      logical init
+      SAVE
+      data init /.true./
+
+C  K-p total cross section
+      DATA (PTPP(K),K=    1,   43) /
+     &  -1.3500D+00,-1.2345D+00,-9.8216D-01,-8.2491D-01,-7.4143D-01,
+     &  -6.1508D-01,-4.5679D-01,-3.7223D-01,-2.9802D-01,-2.6595D-01,
+     &  -1.7037D-01,-1.0660D-01,-2.1599D-02,-2.5037D-04, 6.3445D-02,
+     &   8.4428D-02, 1.3703D-01, 1.5769D-01, 1.8898D-01, 2.4156D-01,
+     &   3.3667D-01, 3.5796D-01, 4.1106D-01, 5.1700D-01, 5.9099D-01,
+     &   6.5431D-01, 6.9651D-01, 7.7067D-01, 8.5538D-01, 9.6104D-01,
+     &   1.1303D+00, 1.3209D+00, 1.4266D+00, 1.5853D+00, 1.8075D+00,
+     &   1.9769D+00, 2.4743D+00, 3.0353D+00, 3.5222D+00, 4.0515D+00,
+     &   4.6550D+00, 5.1949D+00, 5.7455D+00/
+      DATA (STPP(K),K=    1,   43) /
+     &9.7669D+01,8.8840D+01,7.2700D+01,5.8076D+01,4.6625D+01,4.0142D+01,
+     &3.5315D+01,3.4074D+01,3.5041D+01,3.7939D+01,4.0838D+01,4.3185D+01,
+     &4.6084D+01,4.7740D+01,4.9397D+01,4.7603D+01,4.4430D+01,3.9601D+01,
+     &3.5186D+01,3.1876D+01,3.0221D+01,3.1325D+01,3.2982D+01,3.3674D+01,
+     &3.2571D+01,3.0640D+01,2.9261D+01,2.9814D+01,2.9953D+01,2.8023D+01,
+     &2.6922D+01,2.6924D+01,2.5684D+01,2.4859D+01,2.4034D+01,2.3761D+01,
+     &2.2112D+01,2.1155D+01,2.0472D+01,2.0480D+01,2.0627D+01,2.0773D+01,
+     &2.1472D+01/
+
+
+C  initialize cross section tables
+
+      if(init) then
+        N = 43
+        M = 0
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,-1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)') 
+     &      ' SIGTOT_KMP: spline initialization failed: ',IERR
+          stop
+        endif
+        NXY_save = NXY
+        init = .false.
+      endif
+
+C  spline interpolation 
+
+      sigtot_kmp = 0.D0
+      Z(1) = log(plab)
+
+      if((Z(1).gt.PTPP(1)).and.(Z(1).lt.PTPP(N))) then
+        M = 1
+        NXY = NXY_save
+        CALL SPLIN3(PTPP,STPP,DERIV,N,100,Z,FV,FD,M,10,1)
+        if(IERR.ne.0) then
+          write(6,'(1x,a,i6)')
+     &      ' SIGTOT_KMP: spline interpolation failed: ',IERR
+          return
+        endif
+      else
+        return
+      endif
+
+      sigtot_kmp = FV(1) 
+
+      END
+
+
+C=======================================================================
+
+      SUBROUTINE SPLIN3(X,Y,DERIV,N,NC,Z,FVALUE,FDERIV,M,MC,IOP)
+
+C-----------------------------------------------------------------------
+C
+C     CERN LIBRARY PROGRAM NO E-209.
+C
+C     REVISED VERSION JULY 1973.
+C
+C     CHANGED BY R.ENGEL (10/10/93) TO CONFORM WITH F77 STANDARD
+C
+C     PURPOSE = TO COMPUTE A NATURAL SPLINE APPROXIMATION OF THIRD ORDER
+C               FOR A FUNCTION Y(X) GIVEN IN THE N POINTS (X(I),Y(I)) ,
+C               I=1(1)N.
+C
+C     PARAMETERS (IN LIST).
+C
+C     X       = AN ARRAY STORING THE INPUT ARGUMENTS.DIMENSION X(N).
+C     Y       = AN ARRAY STORING THE INPUT FUNCTION VALUES.THE ELEMENT
+C               Y(I) REPRESENT THE FUNCTION VALUE Y(X) FOR X=X(I).
+C     DERIV   = AN ARRAY USED FOR STORING THE COMPUTED DERIVATIVES OF
+C               THE FUNCTION Y(X).IN DERIV(I,1) AND DERIV(I,2) ARE STOR-
+C               ED THE FIRST-AND SECOND ORDER DERIVATIVES OF Y(X) FOR
+C               X=X(I) RESPECTIVELY.
+C     N       = NUMBER OF INPUT FUNCTION VALUES.
+C     NC      = ARRAY DERIV IS DIMENSIONED DERIV(NC,2) IN CALLING
+C               PROGRAM.
+C     Z       = AN ARRAY STORING THE ARGUMENTS FOR THE INTERPOLATED
+C               VALUES TO BE COMPUTED.
+C     FVALUE  = AN ARRAY STORING THE COMPUTED INTERPOLATED VALUES.
+C               FVALUE(J) REPRESENT THE FUNCTION VALUE FVALUE(Z) FOR
+C               Z=Z(J).
+C     FDERIV    = AN ARRAY USED FOR STORING THE DERIVATIVES OF THE COM-
+C               PUTED INTERPOLATED VALUES.EXPLANATION AS FOR DERIV.
+C     M       = NUMBER OF INTERPOLATED VALUES TO BE COMPUTED.
+C     MC      = ARRAY FDERIV IS DIMENSIONED FDERIV(MC,2) IN CALLING
+C               PROGRAM.
+C     IOP     = OPTION PARAMETER.FOR IOP.LE.0 THE DERIVATIVES FOR EACH
+C               SUB-INTERVAL IN THE SPLINE APPROXIMATION ARE COMPUTED.
+C                                  IOP=-1, THE SECOND ORDER END-POINT
+C                                          DERIVATIVES ARE COMPUTED BY
+C                                          LINEAR EXTRAPOLATION.
+C                                  IOP=0 , THE SECOND ORDER END-POINT
+C                                          DERIVATIVES ASSUMED TO BE GI-
+C                                          VEN (SEE COMMON /SPAPPR/).
+C                                  IOP=1 , COMPUTE SPLINE APPROXIMATIONS
+C                                          FOR THE ARGUMENTS GIVEN IN
+C                                          THE ARRAY Z,THE DERIVATIVES
+C                                          BEEING ASSUMED TO HAVE BEEN
+C                                          CALCULATED IN A PREVIOUS CALL
+C                                          ON THE ROUTINE.
+C
+C     PARAMETERS (IN COMMON BLOCK / SPAPPR /).
+C
+C     SECD1   = VALUE OF THE SECOND DERIVATIVE D2Y(X)/DX2 FOR THE INPUT
+C               ARGUMENT X=X(1).
+C     SECDN   = VALUE OF THE SECOND DERIVATIVE D2Y(X)/DX2 FOR THE INPUT
+C               ARGUMENT X=X(N).
+C               NB. VALUES HAVE TO BE ASSIGNED TO SECD1 AND SECDN IN THE
+C               CALLING PROGRAM.IF A NATURAL SPLINE FIT IS WANTED PUT
+C               SECD1=SECDN=0.
+C     VOFINT  = COMPUTED APPROXIMATION FOR THE INTEGRAL OF Y(X) TAKEN
+C               FROM X(1) TO X(N).
+C     IERR    = ERROR PARAMETER.IERR=0,NO ERRORS OCCURED.
+C                               IERR=1,THE NUMBER OF POINTS TOO SMALL
+C                                      I.E.N LESS THAN 4.
+C                               IERR=2,THE ARGUMENTS X(I) NOT IN INCREA-
+C                                      SING ORDER.
+C                               IERR=3,ARGUMENT TO BE USED IN INTERPOLA-
+C                                      TION ABOVE RANGE.
+C                               IERR=4,ARGUMENT TO BE USED IN INTERPOLA-
+C                                      TION BELOW RANGE.
+C     NXY     = N (SEE ABOVE),HAS TO BE STORED FOR ENTRIES CORRESPONDING
+C               TO IOP=1.
+C
+C**********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      DIMENSION X(NC) , Y(NC) , DERIV(NC,2) , Z(MC) , FVALUE(MC) ,
+     1          FDERIV(MC,2)
+C
+      COMMON / SPAPPR / SECD1 , SECDN , VOFINT , IERR , NXY
+      SAVE
+      DATA THIRD , SIXTH / .333333333333333D0 , .166666666666667D0 /
+C
+C 1000 
+      IF (IOP.GT.0) GO TO 1110
+C
+      IERR=0
+C
+C     CHECK IF ENOUGH DATA-POINTS ARE AVAILABLEI.E. IF N LESS THAN 4 NO
+C     THIRD ORDER SPLINE APPROXIMATION IS POSSIBLE.
+C
+      IF (N.GE.4) GO TO 1010
+C
+      IERR=1
+      GO TO 2000
+C
+C     START CALCULATION OF COEFFICIENTS TO BE USED IN THE SYSTEM OF EQU-
+C     ATIONS FOR THE SECOND ORDER DERIVATIVES OF Y(X).
+C
+ 1010 IF (IOP.NE.-1) GO TO 1015
+      SECD1=0.D0
+      SECDN = 0.D0
+      BET1=1.D0/(1.D0+0.5D0*(X(2)-X(1))/(X(3)-X(2)))
+      ALF1=BET1*(1.D0- ((X(2)-X(1))/(X(3)-X(2)))**2)
+      BETN=1.D0/(1.D0+0.5D0*(X(N)-X(N-1))/(X(N-1)-X(N-2)))
+      ALFN=BETN*(1.D0- ((X(N)-X(N-1))/(X(N-1)-X(N-2)))**2)
+C
+ 1015 DERIV(1,2)=SECD1
+      DERIV(N,2)=SECDN
+      DERIV(1,1)=0.D0
+      DXPLUS=X(2)-X(1)
+C
+C     CHECK IF ARGUMENTS ARE IN INCREASING ORDER.IF NOT PRINT ERROR
+C     MESSAGE AND STOP.
+C
+      IF ( DXPLUS.GT.0.D0) GO TO 1020
+      IN=1
+      IERR=2
+      GO TO 2000
+C
+ 1020 DYPLUS=(Y(2)-Y(1))/DXPLUS
+      IU=N-1
+      DO 1040 I=2,IU
+      DXMIN =DXPLUS
+      DYMIN =DYPLUS
+      DXPLUS=X(I+1)-X(I)
+C
+C     CHECK IF ARGUMENTS ARE IN INCREASING ORDER.IF NOT PRINT ERROR
+C     MESSAGE AND STOP.
+C
+      IF (DXPLUS.GT.0.D0) GO TO 1030
+C
+      IN=I
+      IERR=2
+      GO TO 2000
+C
+ 1030 DXINV =1.D0/(DXPLUS+DXMIN)
+      DYPLUS=(Y(I+1)-Y(I))/DXPLUS
+      DIVDIF=DXINV*(DYPLUS-DYMIN)
+      ALF   =0.5D0*DXINV*DXMIN
+      BET   =0.5D0-ALF
+C
+      IF (I.EQ.2)  DIVDIF=DIVDIF-THIRD*ALF*DERIV(1,2)
+      IF (I.EQ.IU) DIVDIF=DIVDIF-THIRD*BET*DERIV(N,2)
+      IF (I.EQ.2) ALF=0.D0
+C
+      IF (IOP.NE.-1) GO TO 1035
+      IF (I.NE.2) GO TO 1032
+      BET=BET*ALF1
+      DIVDIF=DIVDIF*BET1
+      GO TO 1035
+ 1032 IF (I.NE.IU) GO TO 1035
+      ALF=ALF*ALFN
+      DIVDIF=DIVDIF*BETN
+C
+ 1035 DXINV =1.D0/(1.D0+ALF*DERIV(I-1,1))
+      DERIV(I,1)=-DXINV*BET
+      DERIV(I,2)= DXINV*(3.D0*DIVDIF-ALF*DERIV(I-1,2))
+ 1040 CONTINUE
+C
+C     COMPUTE THE SECOND DERIVATIVES BY BACKWARDS RECURRENCE RELATION.
+C     THE SECOND ORDER DERIVATIVES FOR X=X(N-1) ALREADY COMPUTED.
+C
+C 1050 
+      DO 1060 I=2,IU
+      J=N-I
+      DERIV(J,2)=DERIV(J,1)*DERIV(J+1,2)+DERIV(J,2)
+ 1060 CONTINUE
+C
+      IF (IOP.NE.-1) GO TO 1070
+      DERIV(1,2)=((X(3)-X(1))/(X(3)-X(2)))*DERIV(2,2)-((X(2)-X(1))/(X(3)
+     $-X(2)))*DERIV(3,2)
+      DERIV(N,2)=-((X(N)-X(N-1))/(X(N-1)-X(N-2)))*DERIV(N-2,2)+((X(N)-X(
+     $N-2))/(X(N-1)-X(N-2)))*DERIV(N-1,2)
+C
+C     CALCULATION OF THE SECOND ORDER DERIVATIVES FINISHED.START CAL-
+C     CULATION OF THE FIRST ORDER DERIVATIVES AND OF THE INTEGRAL.
+C
+ 1070 VOFINT=0.D0
+      DO 1080 I=1,IU
+      DXPLUS=X(I+1)-X(I)
+      DYPLUS=Y(I+1)-Y(I)
+      DIVDIF=DYPLUS/DXPLUS
+      DERIV(I,1)=DIVDIF-DXPLUS*(THIRD*DERIV(I,2)+SIXTH*DERIV(I+1,2))
+      DXPLUS=0.5D0*DXPLUS
+      VOFINT=VOFINT+DXPLUS*(Y(I+1)+Y(I)-THIRD*(DERIV(I+1,2)+DERIV(I,2))*
+     $DXPLUS**2)
+ 1080 CONTINUE
+C
+C     COMPUTE THE LAST FIRST ORDER DERIVATIVE.
+C
+      DXPLUS=X(N)-X(N-1)
+      DYPLUS=Y(N)-Y(N-1)
+      DIVDIF=DYPLUS/DXPLUS
+      DERIV(N,1)=DIVDIF+DXPLUS*(SIXTH*DERIV(N-1,2)+THIRD*DERIV(N,2))
+C
+C     CALCULATION OF FIRST ORDER DERIVATIVES AND INTEGRAL FINISHED.
+C
+C     SET VALUE OF N IN COMMON BLOCK / SPAPPR /.
+C
+      NXY=N
+C
+C     COMPUTE INTERPOLATED VALUES IF ANY.
+C
+ 1110 IF (M.LT.1) RETURN
+C
+      XL=X(1)
+      XU=X(2)
+      IP=3
+      IL=0
+C
+C 1120 
+      DO 1160 J=1,M
+      ARG=Z(J)
+      IF (ARG.GT.XU) GO TO 1170
+      IF (ARG.LT.XL) GO TO 1190
+C
+C     ARGUMENT IN CORRECT RANGE.CHECK IF POLYNOMIAL COEFFICIENTS HAVE
+C     TO BE CALCULATED.
+C
+C 1130 
+      IF (IL.GT.0) GO TO 1150
+C
+C     COMPUTE POLYNOMIAL COEFFICIENTS.
+C
+ 1140 II=IP-2
+      A0=Y(II)
+      A1=DERIV(II,1)
+      A4=DERIV(II,2)
+      A6=(DERIV(II+1,2)-A4)/(XU-XL)
+      A2=0.5D0*A4
+      A3=SIXTH*A6
+      A5=0.5D0*A6
+      IL=1
+C
+C     CALCULATION OF POLYNOMIAL COEFFICIENTS FINISHED.COMPUTE VALUES.
+C
+ 1150 ARG=ARG-XL
+      FVALUE(J)=((A3*ARG+A2)*ARG+A1)*ARG+A0
+      FDERIV(J,1)=(A5*ARG+A4)*ARG+A1
+      FDERIV(J,2)=A6*ARG+A4
+C
+ 1155 CONTINUE
+      GOTO 1160
+C
+C     RANGE MOVING
+C
+C
+C     ARGUMENT ABOVE PRESENT RANGE.SHIFT RANGE UPWARDS.
+C
+ 1170 IF(IP.GT.NXY) GO TO 1185
+      IPP=IP
+      DO 1180 I=IPP,NXY
+      IF (ARG.GT.X(I)) GO TO 1180
+      XL=X(I-1)
+      XU=X(I)
+      IP=I+1
+      IL=0
+      GO TO 1140
+C
+ 1180 CONTINUE
+C
+C     ARGUMENT  OUT OF RANGE,I.E. ARG GREATER THAN X(N).
+C
+ 1185 IERR=3
+      IP=NXY+1
+      GO TO 2010
+C
+C     ARGUMENT BELOW PRESENT RANGE.SHIFT DOWNWARDS.
+C
+ 1190 IPP=IP
+      DO 1200 I=1,IPP
+      II=IP-I-2
+      IF (II.EQ.0) GO TO 1210
+      IF (ARG.LT.X(II)) GO TO 1200
+      XL=X(II)
+      XU=X(II+1)
+      IP=II+2
+      IL=0
+      GO TO 1140
+C
+ 1200 CONTINUE
+C
+C     ARGUMENT OUT OF RANGE,I.E. ARG LESS THAN X(1).
+C
+ 1210 IERR=4
+      IP=3
+      GO TO 2010
+C
+ 2010 WRITE(6,3000)  IERR , ARG
+C
+      FVALUE(J)=0.D0
+      FDERIV(J,1)=0.D0
+      FDERIV(J,2)=0.D0
+C
+      II=IP-2
+      XL=X(II)
+      XU=X(II+1)
+      IL=0
+      GO TO 1155
+C
+C
+C     END OF INTERPOLATION LOOP
+C
+ 1160 CONTINUE
+C
+C     CALCULATION OF INTERPOLATED VALUES FINISHED.
+C
+      RETURN
+C
+C     PRINT ERROR MESSAGES.
+C
+ 2000 IF (IERR.EQ.1) WRITE(6,3000)  IERR
+      IF (IERR.EQ.2) WRITE(6,3000)  IERR , X(IN) , X(IN+1)
+      RETURN
+C
+ 3000 FORMAT(//5X,'*** SUBROUTINE SPLIN3 ERROR NO ',I2,' ***',
+     $       2(4X,E21.14))
+C
+      END
+C=======================================================================
+
+      SUBROUTINE FRAG_VLNCE(IDX,LBAD)
+
+C-----------------------------------------------------------------------
+C     routine that fragments a quark - quark system               \FR'14
+C
+C     INPUT: IDX : parton stack index of central string
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER IDX,LBAD
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      DOUBLE PRECISION PST,PBM,PTG,PSTH,P1,P2,GABE,EE,
+     &     PAR1_def,PAR24_def,PX1,PY1,PX2,PY2,GAM,BET,P1TOT,P2TOT,
+     &     SIF,COF,COD,SID,ANORF,PZ
+      DIMENSION PST(5),PBM(5),PTG(5),PSTH(5),P1(4),P2(4),GABE(4)
+      INTEGER LSTH,IPID,IBMST,ITGST,ISTH,IFLB,IFLT,IST,I,IFBAD,JJ,
+     &     NOLD,II,K,J
+      SAVE
+      
+      LBAD = 2
+      LSTH = 0
+      
+c     references are:
+c     string --> bm-parton --> tg-parton (--> merged string/hadron)
+c     read string 4momentum from stack
+      CALL RD_PRTN_4VEC(IDX,PST,IPID,IBMST)
+      CALL RD_PRTN_4VEC(IBMST,PBM,IFLB,ITGST)
+      CALL RD_PRTN_4VEC(ITGST,PTG,IFLT,ISTH)
+
+C     kinematic variables
+      EE = PST(5)            ! string mass
+      
+      IF(NDEBUG.gt.1) WRITE(LUN,*)' FRAG_VLNCE: IDX,EE,IFLB,IFLT',
+     &     IDX,EE,IFLB,IFLT
+
+      IF(IDX.ne.ISTH) then
+c     read merged string and add hadron to final particle stack..
+         CALL RD_PRTN_4VEC(ISTH,PstH,LSTH,IST)
+         IF(NDEBUG.gt.1) WRITE(LUN,*)' FRAG_VLNCE: found merged string',
+     &        LSTH,(PSTH(I),I=1,5)         
+         IF(IDX.ne.IST) then
+            write(lun,*) ' FRAG_VLNCE: reference loop broken!' , IDX
+            CALL SIB_REJECT('FRAG_VLNCE      ')
+         endif
+         NP = NP + 1
+         DO I=1,4
+            P(NP,I) = PST(I)
+         ENDDO
+         P(NP,5) = AM(IABS(LSTH))
+         LLIST(NP) = LSTH
+         NPORIG(NP) = IPFLAG*2+KINT
+         niorig(NP) = iiflag
+         LBAD = 0
+         RETURN
+      ENDIF
+
+c     baryon production setup
+      PAR1_def = PAR(1)
+      if( NSOF+NJET.gt.0) then
+         PAR(1)= PAR(15)
+      else
+         PAR(1)= PAR(14)
+      endif
+
+c     charm fractions in different parameterizations
+      PAR24_def = PAR(24)
+      IF(IPAR(15).gt.2.and.IPAR(15).ne.7.and.IPAR(15).lt.12)THEN
+         PAR(24) = PAR(25)*EXP(-PAR(26)/EE)
+      ENDIF
+
+      IF(NDEBUG.gt.1)
+     &     WRITE(LUN,*)' FRAG_VLNCE: parameters (CHM,DIQ,STR,VEC,POP)',
+     &     PAR(24),PAR(1),PAR(2),PAR(5),PAR(8)
+
+      NOLD=NP
+      IF(IPAR(38).eq.1.or.IPAR(38).eq.2)THEN
+C...  rotate strings instead of attaching all pt to string end hadrons
+         PX1 = 0.D0
+         PY1 = 0.D0
+         PX2 = 0.D0
+         PY2 = 0.D0
+      ELSEIF(IPAR(38).eq.0.or.IPAR(38).eq.3)THEN
+c     assign pt to hadrons at string end (old model)
+         PX1 = PBM(1)
+         PY1 = PBM(2)
+         PX2 = PTG(1)
+         PY2 = PTG(2)
+         GAM = PST(4)/EE
+         BET = PST(3)/PST(4)
+      ENDIF         
+
+C...  fragment strings in string restframe
+      CALL STRING_FRAG_4FLV
+     &     (EE,IFLB,IFLT,PX1,PY1,PX2,PY2,IFBAD,1)
+
+      PAR(24) = PAR24_def
+      PAR(1) = PAR1_def
+      KINT= 0
+      IF (IFBAD .EQ. 1) then
+         if(Ndebug.gt.1) 
+     &        WRITE(LUN,*)' STRING_FRAG: rejection (Ncall):',Ncall
+         RETURN
+      ENDIF
+
+C...  rotate and boost string
+      IF(IPAR(38).eq.1.or.IPAR(38).eq.2)THEN
+C     boost quark momentum to string center-of-mass 
+c     to calculate rotation angles in string center-of-mass
+         do jj=1,3
+            gabe(jj) = PST(jj)/PST(5)
+         enddo
+         GABE(4) = PST(4)/PST(5)
+         CALL SIB_ALTRA(gabe(4),-gabe(1),-gabe(2),-gabe(3),
+     &        PBM(1),pbm(2),pbm(3),pbm(4),
+     &        P1TOT,p1(1),p1(2),p1(3),p1(4))
+         CALL SIB_ALTRA(gabe(4),-gabe(1),-gabe(2),-gabe(3),
+     &        PTG(1),pTG(2),ptg(3),ptg(4),
+     &        P2TOT,p2(1),p2(2),p2(3),p2(4))
+
+c     should be back-to-back...
+         IF(ndebug.gt.1)THEN
+            write(lun,*)
+     &      ' FRAG_VLNCE: string c.m. momentum, parton 1 (Pabs,P(i)):' ,
+     &           P1TOT, (P1(j),j=1,4)
+            write(lun,*)
+     &      ' FRAG_VLNCE: string c.m. momentum, parton 2 (Pabs,P(i)):' ,
+     &           P2TOT, (P2(j),j=1,4)
+            write(lun,*) '  partons should be back to back...'
+         ENDIF
+c     rotation factors
+         COD= P1(3)/P1TOT
+         SID= DSQRT(P1(1)**2+P1(2)**2)/P1TOT
+         COF=1.D0
+         SIF=0.D0
+         IF(P1TOT*SID.GT.EPS5) THEN
+            COF=P1(1)/(SID*P1TOT)
+            SIF=P1(2)/(SID*P1TOT)
+            ANORF=DSQRT(COF*COF+SIF*SIF)
+            COF=COF/ANORF
+            SIF=SIF/ANORF
+         ENDIF
+c     rotate string final state
+         DO K=NOLD+1,NP
+            CALL SIB_TRANI(P(K,1),P(k,2),P(k,3),cod,sid,cof,sif
+     &           ,P2(1),P2(2),P2(3))
+            do ii=1,3
+               P(K,ii)=P2(ii)
+            enddo
+         ENDDO
+c     boost to hadron - hadron center-of-mass
+         DO K=NOLD+1,NP
+            CALL SIB_ALTRA(gabe(4),gabe(1),gabe(2),
+     &           gabe(3),P(k,1),p(k,2),p(k,3),p(k,4),
+     &           P1TOT,p2(1),p2(2),p2(3),p2(4))
+            do ii=1,4
+               P(K,ii)=P2(ii)
+            enddo
+         ENDDO
+      ELSEIF(IPAR(38).eq.0.or.IPAR(38).eq.3)THEN
+C...  boost string
+         DO K=NOLD+1,NP
+            PZ = P(K,3)
+            P(K,3) = GAM*(PZ+BET*P(K,4))
+            P(K,4) = GAM*(P(K,4)+BET*PZ)
+         ENDDO
+      ENDIF
+      LBAD = 0
+      END
+
+
+C-----------------------------------------------------------------------
+C     fragmentation functions in SIBYLL                        \FR'14
+C=======================================================================
+
+      FUNCTION ZDIS_4FLV (IFL1,IFL2, XMT2)
+
+C-----------------------------------------------------------------------
+C...z distribution
+c     includes charmed fragmentation (Peterson/SLAC)
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+      DOUBLE PRECISION FAs1, fAs2
+      COMMON /S_CZDISs/ FAs1, fAs2
+      DOUBLE PRECISION ZDMAX, EPSI
+      COMMON /S_CZDISc/ ZDMAX, EPSI
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      IAFL1 = IABS(mod(IFL1,100))
+      IAFL2 = IABS(mod(IFL2,100))
+c     SLAC-Peterson fragmentation function for charm
+      IF ((IAFL1/10.eq.4.or.mod(IAFL1,10).eq.4)
+     +     .or.(IAFL2/10.eq.4.or.mod(IAFL2,10).eq.4))THEN
+ 90      z = max(S_RNDM(0),1.e-8)
+         tcp = zmefn(z,epsi)/zdmax
+         if (tcp .lt. S_RNDM(1)) goto 90
+         zdis_4flv = z
+      else                      
+c     original lund function, non charm
+         fa=fain                ! lund parameter a
+         fb0=fb0in              ! lund parameter b
+c     parameters for hard scattering (gluon) fragmentation
+         IF(IPAR(6).eq.2)THEN
+            fa= PAR(18)
+            fb0= PAR(19)
+         ENDIF   
+c     special parameters for strange fragmentation
+c     only active for baryon beams (or K0,K0bar)
+C     DH   correction  may 10-1996
+         if (iabs(kb).ge.13) then ! baryons only
+            if (iafl2.eq.3)  fa=fain+fas2
+            if (iafl1.eq.3)  fa=fain+fas1
+         endif
+c     special parameters for baryon fragmentation
+c     similar to pythia
+         IF((IAFL1+IAFL2).gt.10.and.
+     &        (IPAR(36).eq.1.or.IPAR(20).eq.3))then
+            fa = fain + PAR(45)
+            fb0 = PAR(60)
+         ENDIF        
+         FB = FB0*XMT2
+         IF(FA.GT.0.01D0.AND.ABS(FA-1.D0)/FB.LE.0.01D0)
+     +         ZMAX=FB/(1.D0+FB)+(1.D0-FA)*FB**2/(1.D0+FB)**3
+         IF(FA.GT.0.01D0.AND.ABS(FA-1.D0)/FB.GT.0.01D0)
+     +     ZMAX=0.5D0*(1.D0+FB-DSQRT((1.D0-FB)**2+4.D0*FA*FB))/(1.D0-FA)
+         IF(ZMAX.LT.0.1D0)  ZDIV=2.75D0*ZMAX
+         IF(ZMAX.GT.0.85D0) 
+     +        ZDIV=ZMAX-0.6D0/FB**2+(FA/FB)*dLOG((0.01D0+FA)/FB)
+C...  Choice if z, preweighted for peaks at low or high z
+ 100     Z=S_RNDM(0)
+         IDIV=1
+         FPRE=1.D0
+         IF (ZMAX.LT.0.1D0)  THEN
+            IF(1.D0.LT.S_RNDM(1)*(1.D0-dLOG(ZDIV)))  IDIV=2
+            IF (IDIV.EQ.1)  Z=ZDIV*Z
+            IF (IDIV.EQ.2)  Z=ZDIV**Z
+            IF (IDIV.EQ.2)  FPRE=ZDIV/Z
+         ELSEIF (ZMAX.GT.0.85D0)  THEN
+            IF(1.D0.LT.S_RNDM(2)*(FB*(1.D0-ZDIV)+1.D0)) IDIV=2
+            IF (IDIV.EQ.1)  Z=ZDIV+dLOG(Z)/FB
+            IF (IDIV.EQ.1)  FPRE=dEXP(FB*(Z-ZDIV))
+            IF (IDIV.EQ.2)  Z=ZDIV+Z*(1.D0-ZDIV)
+         ENDIF
+C...weighting according to the correct formula
+         IF (Z.LE.FB/(50.D0+FB).OR.Z.GE.1.D0)  GOTO 100
+         FVAL=(ZMAX/Z)*dEXP(FB*(1.D0/ZMAX-1.D0/Z))
+         IF(FA.GT.0.01D0)  FVAL=((1.D0-Z)/(1.D0-ZMAX))**FA*FVAL
+         IF(FVAL.LT.S_RNDM(3)*FPRE)  GOTO 100
+         ZDIS_4FLV=Z
+         
+      ENDIF
+      
+      RETURN
+      END
+C=======================================================================
+      
+      SUBROUTINE ZNORMAL
+
+C-----------------------------------------------------------------------
+C...  normalisation for Peterson/SLAC frag. func
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION ZDMAX, EPSI
+      COMMON /S_CZDISc/ ZDMAX, EPSI
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      SAVE
+
+c     get the maximum zmefn value first for normalisation
+      jmax = 1000
+      zdmax = 1.D-10
+
+      DO j = 1, jmax
+         z = dble(j)/dble(jmax+1)
+         zdmax = max(zdmax, zmefn(z,epsi))
+      enddo
+      if (ndebug .gt. 0) WRITE(LUN,*)' ZDMAX,EPS:',zdmax, epsi
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION ZMEFN(z,eps)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+C...  Peterson/SLAC frag. func
+cdh   zmefn = (z*(1.D0-z**(-1)-eps/(1.D0-z))**2)**(-1)
+      zmefn = 1.D0/(z*(1.D0-z**(-1)-eps/(1.D0-z))**2)
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION ZBLEAD (LB)
+
+C-----------------------------------------------------------------------
+C...fragmentation function for leading baryon
+C.  simple form:  f(z) = a + x**b
+C   INPUT : LB = particle code.
+C..................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION CLEAD, FLEAD
+      COMMON /S_CZLEAD/ CLEAD, FLEAD
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+c      ncall = ncall + 1
+c      print*,'leading baryon frag. called:',lb,ncall
+
+C...  leading z lower bound
+c     used for protons only in Sib21 (if ..)
+c     used for all baryons alike in Sib22 (else..)    
+      ZLMIN = PAR(55)
+      ZSMR = PAR(56)
+
+      IF(IPAR(30).ne.0)THEN
+C     Sibyll 2.1 hard fragmentation function
+
+        IC = ICHP(LB)*ISIGN(1,LB)
+      
+        if (LB.ge.34.and.LB.le.39)  then ! Lambda's and Sigma's
+           IF(IPAR(35).eq.1)then
+              zblead=zdisn(1)     ! zblead**2   !soft
+           ELSE
+ 665          ZBLEAD = S_RNDM(LB)
+              if (zblead.le.0.01D0) goto 665
+           ENDIF
+c     zblead=zdisn(1) ! blead**2   ! soft
+        elseif (ic.eq.0)     then
+           if(IPAR(30).eq.2)then
+ 555          zblead = S_RNDM(1)
+              if (zblead .le. 0.01D0) goto 555     
+           else
+              zblead=zdisn(1)     ! blead**2   !soft
+           endif
+        elseif (ic.eq.1)  then   ! fast protons only
+           if (abs(lb).eq.13) then
+ 661          IF (S_RNDM(2) .LT. CLEAD)  THEN
+ 666             ZBLEAD = S_RNDM(0)
+                 if (zblead.le.0.01D0) goto 666
+              ELSE
+                 zblead=1.D0-zdisn(1) ! zblead**2   !hard
+              ENDIF
+c     truncated zblead to fix antiprotons
+              if (zblead.le.ZLMIN+ZSMR*(1.D0-2.D0*S_RNDM(LB))) goto 661
+           else
+              zblead=zdisn(1)     ! zblead**2   !hard
+           endif   
+        else if (ic.eq.2)  then   ! fast delta++
+           zblead=1.D0- zdisn(1)    ! (zblead)**.3333
+        else
+           zblead=S_RNDM(0)       ! zdisn(1)     !hard
+        endif
+        RETURN
+      ELSE
+C...  Sein's flat baryon fragmentation function a.k.a. Sibyll 2.2
+ 999     zblead = S_RNDM(0)
+         if (zblead .le. 0.01D0) goto 999
+c     truncated zblead to fix instring pair production (antiprotons)
+         if (zblead.le.ZLMIN+ZSMR*(1.D0-2.D0*S_RNDM(LB))) goto 999
+         RETURN
+      ENDIF
+      END
+
+C=======================================================================
+
+      FUNCTION ZDISN (n)
+
+C-----------------------------------------------------------------------
+C...Generate (1-x)**n
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+666   rmin=1.1D0
+      do i=1,n+1
+         R1=S_RNDM(i)
+         IF (R1.LE.RMIN) RMIN=R1
+      ENDDO
+      ZDISn=RMIN
+      if (zdisn.le.0.01D0) goto 666
+      if (zdisn.ge.0.99D0) goto 666
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_SIG(Jint,SIB_SQS,SIB_PTmin,SIB_SIG_tot,
+     &                 SIB_SIG_ine,SIB_diff,SIB_diff2,SIB_B_el,SIB_PJET)
+
+C-----------------------------------------------------------------------
+C
+C...SIBYLL 2.1 cross sections 
+C
+C   input parameter: SIB_SQS   c.m.s. energy (GeV)
+C                    Jint      1 p-p cross sections
+C                              2 pi-p cross sections
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      DOUBLE PRECISION SIB_PJET(0:NS_max,0:NH_max)
+      DOUBLE PRECISION SIB_SQS,SIB_PTmin,
+     &     SIB_SIG_ine,SIB_SIG_tot,SIB_diff(3),SIB_diff2(3,2),SIB_B_el
+
+
+      COMMON /SIGMAS/SQS,SIGTOT,SIGEL,SIGINE,
+     &               SIGSD1(2),SIGSD2(2),SIGDD(2),
+     &               SLOPE,SLOPEc,RHO,PROB(0:NS_max,0:NH_max),SIGSUM
+
+
+      COMMON /PROFILE/XNUS2,XMUS2,XNUSPI2,
+     &                XNUH2,XMUH2,XNUHPI2,
+     &                ENHPP,ENHPIP,al1,be1,al2,be2
+
+      COMMON /S_CHDCNV/ABR(2,400),ABP(2,400),ABH(2,400),DB,NB
+
+      DIMENSION XI(50)
+
+      DIMENSION SIG_BRN(3)
+      DIMENSION SIG_dif_1(2),SIG_dif_2(2),SIG_dd(2)
+
+      DIMENSION IHAR(2)
+
+      PARAMETER ( NPARFIT = 22 )
+      DOUBLE PRECISION PARS
+      COMMON /XSCTN_FIT/ PARS( 50 , 2 )
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      COMMON /QCD_XSCTN/SIGQCD(61,2),INIT
+      DOUBLE PRECISION SIGQCD
+      SAVE
+      DATA INIT /0/
+      DATA (SIGQCD(K,1),K=    1,   61) /
+     &8.4663D-02,1.8246D-01,3.3880D-01,5.6845D-01,8.8686D-01,1.3116D+00,
+     &1.8626D+00,2.5645D+00,3.4445D+00,4.5343D+00,5.8715D+00,7.4962D+00,
+     &9.4579D+00,1.1811D+01,1.4620D+01,1.7955D+01,2.1890D+01,2.6522D+01,
+     &3.1952D+01,3.8303D+01,4.5704D+01,5.4307D+01,6.4284D+01,7.5818D+01,
+     &8.9121D+01,1.0447D+02,1.2213D+02,1.4240D+02,1.6562D+02,1.9221D+02,
+     &2.2260D+02,2.5733D+02,2.9694D+02,3.4207D+02,3.9348D+02,4.5194D+02,
+     &5.1838D+02,5.9376D+02,6.7921D+02,7.7609D+02,8.8578D+02,1.0099D+03,
+     &1.1504D+03,1.3090D+03,1.4882D+03,1.6903D+03,1.9183D+03,2.1754D+03,
+     &2.4650D+03,2.7912D+03,3.1582D+03,3.5707D+03,4.0341D+03,4.5538D+03,
+     &5.1360D+03,5.7883D+03,6.5193D+03,7.3358D+03,8.2428D+03,9.2498D+03,
+     &1.0369D+04/
+      DATA (SIGQCD(K,2),K=    1,   61) /
+     &1.5665D-01,2.8800D-01,4.7863D-01,7.4235D-01,1.0949D+00,1.5547D+00,
+     &2.1433D+00,2.8859D+00,3.8118D+00,4.9547D+00,6.3534D+00,8.0525D+00,
+     &1.0103D+01,1.2563D+01,1.5498D+01,1.8986D+01,2.3111D+01,2.7971D+01,
+     &3.3678D+01,4.0358D+01,4.8154D+01,5.7228D+01,6.7762D+01,7.9965D+01,
+     &9.4071D+01,1.1034D+02,1.2909D+02,1.5063D+02,1.7536D+02,2.0370D+02,
+     &2.3613D+02,2.7321D+02,3.1553D+02,3.6379D+02,4.1875D+02,4.8129D+02,
+     &5.5238D+02,6.3311D+02,7.2470D+02,8.2854D+02,9.4614D+02,1.0792D+03,
+     &1.2298D+03,1.3999D+03,1.5920D+03,1.8089D+03,2.0534D+03,2.3291D+03,
+     &2.6396D+03,2.9892D+03,3.3825D+03,3.8248D+03,4.3219D+03,4.8803D+03,
+     &5.5072D+03,6.2109D+03,7.0001D+03,7.8849D+03,8.8764D+03,9.9871D+03,
+     &1.1231D+04/
+
+
+      IF(INIT.EQ.0) THEN
+*        CALL HAR_INI
+        CALL FACT_INI
+        IHAR(1) = 0
+        IHAR(2) = 0
+        INIT = 1
+      ENDIF
+
+      ECM = SIB_SQS
+
+      IF(JINT.EQ.1) THEN
+c     K = 1 , proton
+         DO K=1,NPARFIT
+            XI(K) = PARS(K,1)
+         ENDDO
+
+      ELSE IF(JINT.EQ.2) THEN
+c     K = 2 , pion
+         DO K=1,NPARFIT
+            XI(K) = PARS(K,2)
+         ENDDO
+
+      ENDIF
+
+      XNUS2   = XI(12)
+      XMUS2   = XI(13)
+      XNUSPI2 = XI(14)
+
+      XNUH2   = XI(15)
+      XMUH2   = XI(16)
+      XNUHPI2 = XI(17)
+
+      CALL HAD_CONV(IABS(JINT))
+
+      PTCUT = XI(10)+XI(21)*dEXP(XI(22)*DSQRT(2.D0*dLOG(ECM)))
+      INDX = abs(JINT)
+      IHAR(INDX) = IHAR(INDX)+1
+      SIGHAR = SIGQCD(IHAR(INDX),INDX)
+
+      S = ECM**2
+
+      BREG =  ABS(XI(18)) + XI(19)*dLOG(S)
+      BPOM =  ABS(XI(12)) + XI(13)*dLOG(S)
+      IK = ABS(JINT)
+      DO JB=1,NB
+        B = DB*DBLE(JB-1)
+        ABR(IK,JB) = 2.D0/(8.D0*PI*BREG)*dEXP(-B**2/(4.D0*BREG))
+        ABP(IK,JB) = 2.D0/(8.D0*PI*BPOM)*dEXP(-B**2/(4.D0*BPOM))
+      ENDDO
+
+C  reggeon
+      SIGSR = ABS(XI(2))*S**(-ABS(XI(4)))
+      SIG_BRN(1) = SIGSR/CMBARN
+C  pomeron (soft part)
+      SIGSP = ABS(XI(1))*S**ABS(XI(3))
+      SIG_BRN(2) = SIGSP/CMBARN
+C  pomeron (hard part)
+      SIG_BRN(3) = SIGHAR/CMBARN
+
+C  2x2 channel low-mass model and separate high-mass diffraction
+        
+      al1 = XI(5)
+      be1 = XI(6)
+      al2 = al1
+      be2 = be1
+      EnhPP  = XI(9)
+      EnhPiP = EnhPP
+
+      CALL SIG_JET_3 (SIG_brn,JINT,SIG_tot,SIG_ela,SIG_ine,SIG_sum,
+     &                SIG_dif_1,SIG_dif_2,SIG_dd,B_el,PROB)
+
+      SIGTOT = SIG_tot*CMBARN
+      SIGINE = SIG_ine*CMBARN
+      SIGSUM = SIG_sum*CMBARN
+      SIGELc = SIGTOT-SIGINE
+      SIGEL  = SIG_ela*CMBARN
+      SIGSD1(1) = SIG_dif_1(1)*CMBARN
+      SIGSD1(2) = SIG_dif_1(2)*CMBARN
+      SIGSD2(1) = SIG_dif_2(1)*CMBARN
+      SIGSD2(2) = SIG_dif_2(2)*CMBARN
+      SIGDD(1)  = SIG_dd(1)*CMBARN
+      SIGDD(2)  = SIG_dd(2)*CMBARN
+      SLOPE  = B_EL
+      SLOPEc = SIG_tot**2/(16.D0*PI*SIG_ela)
+
+      DE = ABS(SIGEL+SIGINE-SIGTOT)/SIGTOT
+      IF(DE.GT.0.01D0) THEN
+        print *,'SIBSIG:      Ecm: ',ECM
+        print *,'          SIGTOT: ',SIGTOT
+        print *,'        SIGEL1/2: ',SIGEL,SIGELc
+        print *,'        SLOPE1/2: ',SLOPE,SLOPEc
+        print *,'        SIGDIF 1: ',SIGSD1
+        print *,'        SIGDIF 2: ',SIGSD2
+        print *,'         SIGDDIF: ',SIGDD
+        print *,'      SUM-SIGTOT: ',SIGEL+SIGINE-SIGTOT
+      ENDIF
+
+C  SIBYLL interface to single precision
+
+      SIB_PTmin   = PTCUT
+      SIB_SIG_tot = SIGTOT
+      SIB_SIG_ine = SIGINE
+      SIB_diff(1) = SIGSD1(1)+SIGSD1(2)
+      SIB_diff(2) = SIGSD2(1)+SIGSD2(2)
+      SIB_diff(3) = SIGDD(1)+SIGDD(2)
+      SIB_B_el    = SLOPE
+      DO I=0,NS_max
+        DO K=0,NH_max
+          SIB_PJET(I,K) = PROB(I,K)
+        ENDDO
+      ENDDO
+c     full diff. cross section 
+c     ( ( b.single , t.single , double ) , ( low mass , high mass ) ) 
+      SIB_diff2(1,1) = SIGSD1(1)
+      SIB_diff2(1,2) = SIGSD1(2)
+      SIB_diff2(2,1) = SIGSD2(1)
+      SIB_diff2(2,2) = SIGSD2(2)
+      SIB_diff2(3,1) = SIGDD(1)
+      SIB_diff2(3,2) = SIGDD(2)
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIG_JET_3 (SIG_brn, JINT, SIG_TOT, SIG_ELA, 
+     &        SIG_INE, SIG_sum, SIG_DIF1, SIG_DIF2, SIG_DD, B_EL, P_int)
+
+C-----------------------------------------------------------------------
+C
+C...This subroutine  receives in INPUT:
+C.       SIG_brn (GeV-2)  Born graph cross sections
+C.       JINT (1 = pp interaction)    (2 pi-p interaction)
+C.       neg. value: without calculation of interaction probabilities
+C.
+C.  and returns as output:
+C.       SIG_???  , B_el
+C.       and P_int(0:NS_max,0:NH_max)   interaction probabilities
+C
+C   two x two -channel approximation for diffraction
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DIMENSION SIG_brn(3)
+      PARAMETER (NS_max = 20, NH_max = 80)
+
+      COMMON /S_CFACT/ FACT(0:NH_max), CO_BIN(0:NH_max,0:NH_max)
+      COMMON /S_CHDCNV/ABR(2,400),ABP(2,400),ABH(2,400),DB,NB
+
+      COMMON /PROFILE/XNUS2,XMUS2,XNUSPI2,
+     &                XNUH2,XMUH2,XNUHPI2,
+     &                EnhPP,EnhPiP,al1,be1,al2,be2
+
+      DIMENSION SIG_DIF1(2),SIG_DIF2(2),SIG_DD(2),
+     &          P_int(0:NS_max,0:NH_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+ 
+      DO J=0,NH_max
+        DO I=0,NS_max
+          P_int(I,J) = 0.D0
+        ENDDO
+      ENDDO
+
+      ga1 = dsqrt(al1*al1+be1*be1)
+      ga2 = dsqrt(al2*al2+be2*be2)
+
+      fe_a_1  = (1.D0+al1/ga1)/2.D0
+      fe_a_2  = (1.D0-al1/ga1)/2.D0
+      fd_a_1  = sqrt(1.D0-(al1/ga1)**2)/2.D0
+      fd_a_2  = -fd_a_1
+
+      fe_b_1  = (1.D0+al2/ga2)/2.D0
+      fe_b_2  = (1.D0-al2/ga2)/2.D0
+      fd_b_1  = dsqrt(1.D0-(al2/ga2)**2)/2.D0
+      fd_b_2  = -fd_b_1
+
+      fe_11 = fe_a_1*fe_b_1
+      fe_22 = fe_a_2*fe_b_2
+      fe_12 = fe_a_1*fe_b_2
+      fe_21 = fe_a_2*fe_b_1
+
+      fd_a_11 = fd_a_1*fe_b_1
+      fd_a_22 = fd_a_2*fe_b_2
+      fd_a_12 = fd_a_1*fe_b_2
+      fd_a_21 = fd_a_2*fe_b_1
+
+      fd_b_11 = fe_a_1*fd_b_1
+      fd_b_22 = fe_a_2*fd_b_2
+      fd_b_12 = fe_a_1*fd_b_2
+      fd_b_21 = fe_a_2*fd_b_1
+
+      fdd_11 = fd_a_1*fd_b_1
+      fdd_22 = fd_a_2*fd_b_2
+      fdd_12 = fd_a_1*fd_b_2
+      fdd_21 = fd_a_2*fd_b_1
+
+
+      sum_abs = 0.D0
+      sum_tot = 0.D0
+      sum_ela = 0.D0
+      sum_sd_a = 0.D0
+      sum_sd_b = 0.D0
+      sum_dd  = 0.D0
+      sum_B   = 0.D0
+
+      IK = ABS(JINT)
+      if(JINT.GT.0) then
+        I0MAX = NS_max
+        J0MAX = NH_max
+      ELSE
+        I0MAX = 1
+        J0MAX = 1
+      ENDIF
+      SIG_REG = SIG_BRN(1)
+      SIG_POM = SIG_BRN(2)
+      SIG_HAR = SIG_BRN(3)
+
+      DO JB=1,NB
+
+         B = DB*DBLE(JB-1)
+
+         ABREG = ABR(IK,JB)
+         ABPOM = ABP(IK,JB)
+         ABHAR = ABH(IK,JB)
+
+         chi2_soft = ABREG*SIG_REG+ABPOM*SIG_POM
+         chi2_soft_11 = (1.D0-al1+ga1)*(1.D0-al2+ga2)*chi2_soft
+         chi2_soft_22 = (1.D0-al1-ga1)*(1.D0-al2-ga2)*chi2_soft
+         chi2_soft_12 = (1.D0-al1+ga1)*(1.D0-al2-ga2)*chi2_soft
+         chi2_soft_21 = (1.D0-al1-ga1)*(1.D0-al2+ga2)*chi2_soft
+
+         chi2_hard = ABHAR*SIG_HAR
+         chi2_hard_11 = (1.D0-al1+ga1)*(1.D0-al2+ga2)*chi2_hard
+         chi2_hard_22 = (1.D0-al1-ga1)*(1.D0-al2-ga2)*chi2_hard
+         chi2_hard_12 = (1.D0-al1+ga1)*(1.D0-al2-ga2)*chi2_hard
+         chi2_hard_21 = (1.D0-al1-ga1)*(1.D0-al2+ga2)*chi2_hard
+          
+
+         ef_11 = dexp(-0.5D0*(chi2_soft_11+chi2_hard_11))
+         ef_22 = dexp(-0.5D0*(chi2_soft_22+chi2_hard_22))
+         ef_12 = dexp(-0.5D0*(chi2_soft_12+chi2_hard_12))
+         ef_21 = dexp(-0.5D0*(chi2_soft_21+chi2_hard_21))
+
+         esf_11  = ef_11**2
+         esf_22  = ef_22**2
+         esf_12  = ef_12**2
+         esf_21  = ef_21**2
+
+         F_ine = B*(1.D0 - fe_11*esf_11 - fe_12*esf_12 
+     &                   - fe_21*esf_21 - fe_22*esf_22)
+         F_tot = 1.D0 - fe_11*ef_11 - fe_12*ef_12
+     &                - fe_21*ef_21 - fe_22*ef_22
+         F_ela = B*F_tot**2
+         F_tot = B*F_tot
+
+         F_sd_a = B*(fd_a_11*ef_11 + fd_a_12*ef_12
+     &             + fd_a_21*ef_21 + fd_a_22*ef_22)**2
+         F_sd_b = B*(fd_b_11*ef_11 + fd_b_12*ef_12
+     &             + fd_b_21*ef_21 + fd_b_22*ef_22)**2
+         F_dd  = B*(fdd_11*ef_11 + fdd_12*ef_12
+     &            + fdd_21*ef_21 + fdd_22*ef_22)**2
+
+         sum_abs = sum_abs+F_ine
+         sum_tot = sum_tot+F_tot
+         sum_ela = sum_ela+F_ela
+
+         sum_sd_a = sum_sd_a+F_sd_a
+         sum_sd_b = sum_sd_b+F_sd_b
+         sum_dd  = sum_dd +F_dd 
+
+         sum_B   = sum_b+B**2*F_tot
+
+         fac_11 = B*esf_11
+         fac_22 = B*esf_22
+         fac_12 = B*esf_12
+         fac_21 = B*esf_21
+         soft_rec_11 = 1.D0/chi2_soft_11
+         soft_rec_22 = 1.D0/chi2_soft_22
+         soft_rec_12 = 1.D0/chi2_soft_12
+         soft_rec_21 = 1.D0/chi2_soft_21
+         chi2_hard_11 = max(chi2_hard_11,EPS10)
+         chi2_hard_22 = max(chi2_hard_22,EPS10)
+         chi2_hard_12 = max(chi2_hard_12,EPS10)
+         chi2_hard_21 = max(chi2_hard_21,EPS10)
+         DO I=0,I0MAX
+           soft_rec_11 = soft_rec_11*chi2_soft_11
+           soft_rec_22 = soft_rec_22*chi2_soft_22
+           soft_rec_12 = soft_rec_12*chi2_soft_12
+           soft_rec_21 = soft_rec_21*chi2_soft_21
+           hard_rec_11 = 1.D0/chi2_hard_11
+           hard_rec_22 = 1.D0/chi2_hard_22
+           hard_rec_12 = 1.D0/chi2_hard_12
+           hard_rec_21 = 1.D0/chi2_hard_21
+           DO J=0,J0MAX
+             hard_rec_11 = hard_rec_11*chi2_hard_11
+             hard_rec_22 = hard_rec_22*chi2_hard_22
+             hard_rec_12 = hard_rec_12*chi2_hard_12
+             hard_rec_21 = hard_rec_21*chi2_hard_21
+             P_int(I,J) = P_int(I,J) 
+     &                + fe_11*soft_rec_11*hard_rec_11*fac_11
+     &                + fe_22*soft_rec_22*hard_rec_22*fac_22
+     &                + fe_12*soft_rec_12*hard_rec_12*fac_12
+     &                + fe_21*soft_rec_21*hard_rec_21*fac_21
+           ENDDO
+         ENDDO
+
+      ENDDO
+
+      SIG_abs  = SUM_abs*TWOPI*DB
+      SIG_tot  = SUM_tot*4.D0*PI*DB
+      SIG_ela  = SUM_ela*TWOPI*DB
+      SIG_dif1(1) = SUM_sd_a*TWOPI*DB
+      SIG_dif2(1) = SUM_sd_b*TWOPI*DB
+      SIG_dd(1)   = SUM_dd*TWOPI*DB
+      SIG_ine  = SIG_abs + SIG_dif1(1) + SIG_dif2(1) + SIG_dd(1)
+      B_EL     = sum_B/SUM_tot/2.D0
+
+      SA = 0.D0
+      P_int(0,0) = 0.D0
+      DO I=0,I0MAX
+        DO J=0,J0MAX
+          fac = FACT(I)*FACT(J)
+          P_int(I,J) = P_int(I,J)/fac
+          SA = SA + P_int(I,J)
+        ENDDO
+      ENDDO
+
+      SIG_hmsd = EnhPP*(P_int(1,0)+P_int(0,1))*TWOPI*DB
+      SIG_hmdd = be1**2*SIG_hmsd + be2**2*SIG_hmsd
+     &          + EnhPP**2*P_int(1,1)*TWOPI*DB
+
+      SIG_dif1(2) = SIG_hmsd
+      SIG_dif2(2) = SIG_hmsd
+      SIG_dd(2)   = SIG_hmdd
+
+      SIG_sum = SA*TWOPI*DB
+
+      DO I=0,I0MAX
+        DO J=0,J0MAX
+          P_int(I,J) = P_int(I,J)/SA
+        ENDDO
+      ENDDO
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE HAD_CONV(JINT)
+
+C-----------------------------------------------------------------------
+C
+C...Convolution of hadrons profile
+C.  [function A(b) of Durand and Pi]
+C.  precalculate and put  in COMMON block
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      COMMON /S_CHDCNV/ABR(2,400),ABP(2,400),ABH(2,400),DB,NB
+
+      DOUBLE PRECISION NU2, MU2, NUPI2, NU, MU, NUPI
+      COMMON /S_CH0CNV/ NU2, MU2, NUPI2, NU, MU, NUPI
+
+C
+      COMMON /PROFILE/XNUS2,XMUS2,XNUSPI2,
+     &                XNUH2,XMUH2,XNUHPI2,
+     &                ENHPP,ENHPIP,al1,be1,al2,be2
+      SAVE
+
+C...integration constants
+      BMAX = 50.D0
+      NB  = 400
+      DB = BMAX/DBLE(NB)
+
+C  soft reggeon interactions
+
+      NU2   = XNUS2
+      MU2   = XMUS2
+      NUPI2 = XNUSPI2
+
+      NU = SQRT(NU2)
+      MU = SQRT(ABS(MU2))
+      NUPI = SQRT(NUPI2) 
+
+      DO JB=1,NB
+         B = DB*DBLE(JB-1)
+         IF(JINT.EQ.1) THEN
+           ABR(JINT,JB) = A_PP(B)
+         ELSE
+           ABR(JINT,JB) = A_PIP(B)
+         ENDIF
+      ENDDO 
+
+C  soft pomeron interactions
+
+      NU2   = XNUS2
+      MU2   = XMUS2
+      NUPI2 = XNUSPI2
+
+      NU = SQRT(NU2)
+      MU = SQRT(ABS(MU2))
+      NUPI = SQRT(NUPI2)
+
+      DO JB=1,NB
+         B = DB*DBLE(JB-1)
+         IF(JINT.EQ.1) THEN
+           ABP(JINT,JB) = A_PP(B)
+         ELSE
+           ABP(JINT,JB) = A_PIP(B)
+         ENDIF
+      ENDDO
+
+C  hard pomeron interactions
+
+      NU2   = XNUH2
+      MU2   = XMUH2
+      NUPI2 = XNUHPI2
+
+      NU = SQRT(NU2)
+      MU = SQRT(ABS(MU2))
+      NUPI = SQRT(NUPI2)
+
+      DB = BMAX/DBLE(NB)
+      DO JB=1,NB
+         B = DB*DBLE(JB-1)
+         IF(JINT.EQ.1) THEN
+           ABH(JINT,JB) = A_PP(B)
+         ELSE
+           ABH(JINT,JB) = A_PIP(B)
+         ENDIF
+      ENDDO
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION A_PP (b)
+
+C-----------------------------------------------------------------------
+C...Convolution of parton distribution for pp interaction
+      IMPLICIT DOUBLE PRECISION (A-Z)
+C
+      DOUBLE PRECISION NU2, MU2, NUPI2, NU, MU, NUPI
+      COMMON /S_CH0CNV/ NU2, MU2, NUPI2, NU, MU, NUPI
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      ETA = NU2/MU2
+ 
+      IF(ETA.LT.0.D0) THEN
+   
+        c = nu**5/(96.D0*PI)
+        if (b .gt. 0.0001D0)  then
+           A_pp = c*b**3 * bessk (3, b*nu)
+        else
+           A_pp = nu**2/(12.D0*PI)
+        endif
+
+      ELSE
+
+        X = B*NU
+        Y = B*MU
+        C = NU2/(12.D0*PI)/(1.D0-ETA)**2
+        IF(X.GT.0.0001D0) THEN
+          A_PP = C*(1.D0/8.D0*X**3*BESSK(3,X)
+     &          -3.D0/2.D0*ETA/(1.D0-ETA)*X**2*BESSK(2,X)
+     &          + 9.D0*ETA**2/(1.D0-ETA)**2*X*BESSK1(X)
+     &          -24.D0*ETA**3/(1.D0-ETA)**3*(BESSK0(X)-BESSK0(Y))
+     &          + 3.D0*ETA**3/(1.D0-ETA)**2*Y*BESSK1(Y))
+        ELSE
+          A_PP = C*(1.D0 /8.D0*8.D0
+     &          -3.D0/2.D0*ETA/(1.D0-ETA)*2.D0
+     &          +9.D0*ETA**2/(1.D0-ETA)**2*1.D0
+     &          -24.D0*ETA**3/(1.D0-ETA)**3*LOG(MU/NU)
+     &          +3.D0*ETA**3/(1.D0-ETA)**2*1.D0)
+        ENDIF
+
+      ENDIF
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION A_PIP (b)
+
+C-----------------------------------------------------------------------
+C...Convolution of parton distribution for pip interaction
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-Z)
+C
+      DOUBLE PRECISION NU2, MU2, NUPI2, NU, MU, NUPI
+      COMMON /S_CH0CNV/ NU2, MU2, NUPI2, NU, MU, NUPI
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      eta = nu2/nupi2
+      c = nu2/(2.D0*PI) * 1.D0/(1.D0-eta)
+
+      if (b .gt. 0.0001D0)  then
+         b1 = b*nu
+         b2 = b*nupi
+         f1 = 0.5D0*b1 * bessk1(b1)
+         f2 = eta/(1.D0-eta)*(bessk0(b2)- bessk0(b1))
+         A_pip = c*(f1+f2)
+      else
+         A_pip = c*(0.5D0 + eta/(1.D0-eta)*log(nu/nupi))
+      endif
+      return
+      end
+C
+C
+C-----------------------------------------------------------------------
+C  Bessel functions
+C=======================================================================
+
+      FUNCTION BESSK0(X)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      DOUBLE PRECISION P1,P2,P3,P4,P5,P6,P7,
+     *                 Q1,Q2,Q3,Q4,Q5,Q6,Q7
+      SAVE
+      DATA P1,P2,P3,P4,P5,P6,P7/-0.57721566D0,0.42278420D0,
+     *    0.23069756D0,0.3488590D-1,0.262698D-2,0.10750D-3,0.74D-5/
+      DATA Q1,Q2,Q3,Q4,Q5,Q6,Q7/1.25331414D0,-0.7832358D-1,
+     * 0.2189568D-1,-0.1062446D-1,0.587872D-2,-0.251540D-2,0.53208D-3/
+
+      IF (X.LE.2.0D0) THEN
+        Y=X*X/4.D0
+        BESSK0=(-LOG(X/2.D0)*BESSI0(X))+(P1+Y*(P2+Y*(P3+
+     *        Y*(P4+Y*(P5+Y*(P6+Y*P7))))))
+      ELSE
+        Y=(2.D0/X)
+        BESSK0=(EXP(-X)/SQRT(X))*(Q1+Y*(Q2+Y*(Q3+
+     *        Y*(Q4+Y*(Q5+Y*(Q6+Y*Q7))))))
+      ENDIF
+      RETURN
+      END
+C
+C=======================================================================
+
+      FUNCTION BESSK1(X)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      DOUBLE PRECISION P1,P2,P3,P4,P5,P6,P7,
+     *                 Q1,Q2,Q3,Q4,Q5,Q6,Q7
+      SAVE
+      DATA P1,P2,P3,P4,P5,P6,P7/1.0D0,0.15443144D0,-0.67278579D0,
+     *    -0.18156897D0,-0.1919402D-1,-0.110404D-2,-0.4686D-4/
+      DATA Q1,Q2,Q3,Q4,Q5,Q6,Q7/1.25331414D0,0.23498619D0,
+     *    -0.3655620D-1,0.1504268D-1,-0.780353D-2,0.325614D-2,
+     *    -0.68245D-3/
+
+      IF (X.LE.2.D0) THEN
+        Y=X*X/4.D0
+        BESSK1=(LOG(X/2.D0)*BESSI1(X))+(1.D0/X)*(P1+Y*(P2+
+     *      Y*(P3+Y*(P4+Y*(P5+Y*(P6+Y*P7))))))
+      ELSE
+        Y=2.D0/X
+        BESSK1=(EXP(-X)/SQRT(X))*(Q1+Y*(Q2+Y*(Q3+
+     *      Y*(Q4+Y*(Q5+Y*(Q6+Y*Q7))))))
+      ENDIF
+      RETURN
+      END
+C
+C=======================================================================
+
+      FUNCTION BESSK(N,X)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+C
+      IF (N.LT.2) stop 'bad argument N in BESSK'
+      TOX=2.D0/X
+      BKM=BESSK0(X)
+      BK=BESSK1(X)
+      DO 11 J=1,N-1
+        BKP=BKM+J*TOX*BK
+        BKM=BK
+        BK=BKP
+11    CONTINUE
+      BESSK=BK
+      RETURN
+      END
+C
+C=======================================================================
+
+      FUNCTION BESSI0(X)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      DOUBLE PRECISION P1,P2,P3,P4,P5,P6,P7,
+     *                 Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9
+      SAVE
+      DATA P1,P2,P3,P4,P5,P6,P7/1.0D0,3.5156229D0,3.0899424D0,
+     *    1.2067492D0, 0.2659732D0,0.360768D-1,0.45813D-2/
+      DATA Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9/0.39894228D0,0.1328592D-1,
+     *    0.225319D-2,-0.157565D-2,0.916281D-2,-0.2057706D-1,
+     *    0.2635537D-1,-0.1647633D-1,0.392377D-2/
+
+      IF (ABS(X).LT.3.75D0) THEN
+        Y=(X/3.75D0)**2
+        BESSI0=P1+Y*(P2+Y*(P3+Y*(P4+Y*(P5+Y*(P6+Y*P7)))))
+      ELSE
+        AX=ABS(X)
+        Y=3.75D0/AX
+        BESSI0=(EXP(AX)/SQRT(AX))*(Q1+Y*(Q2+Y*(Q3+Y*(Q4
+     *      +Y*(Q5+Y*(Q6+Y*(Q7+Y*(Q8+Y*Q9))))))))
+      ENDIF
+      RETURN
+      END
+C
+C=======================================================================
+
+      FUNCTION BESSI1(X)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      DOUBLE PRECISION P1,P2,P3,P4,P5,P6,P7,
+     *                 Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9
+      SAVE
+      DATA P1,P2,P3,P4,P5,P6,P7/0.5D0,0.87890594D0,0.51498869D0,
+     *    0.15084934D0,0.2658733D-1,0.301532D-2,0.32411D-3/
+      DATA Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9/0.39894228D0,-0.3988024D-1,
+     *    -0.362018D-2,0.163801D-2,-0.1031555D-1,0.2282967D-1,
+     *    -0.2895312D-1,0.1787654D-1,-0.420059D-2/
+
+      IF (ABS(X).LT.3.75D0) THEN
+        Y=(X/3.75D0)**2
+        BESSI1=X*(P1+Y*(P2+Y*(P3+Y*(P4+Y*(P5+Y*(P6+Y*P7))))))
+      ELSE
+        AX=ABS(X)
+        Y=3.75D0/AX
+        BESSI1=(EXP(AX)/SQRT(AX))*(Q1+Y*(Q2+Y*(Q3+Y*(Q4+
+     *      Y*(Q5+Y*(Q6+Y*(Q7+Y*(Q8+Y*Q9))))))))
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE FACT_INI
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      COMMON /S_CFACT/ FACT(0:NH_max), CO_BIN(0:NH_max,0:NH_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+      
+      FACT(0) = 1.D0
+      FACT(NS_max) = 1.D0  ! avoid unused warning and keep parameter block
+      DO J=1,NH_max
+         FACT(J) = FACT(J-1)*DBLE(J)
+      ENDDO
+      DO J=0,NH_max
+         DO K=0,J
+            CO_BIN(J,K) = FACT(J)/(FACT(K)*FACT(J-K))
+         ENDDO
+      ENDDO
+
+      END
+cC=======================================================================
+c
+c      SUBROUTINE SAMPLE_SOFT (STR_mass_min, X1,X2,PT)
+c
+C-----------------------------------------------------------------------
+C...  Routine for the sampling the kinematical variables of sea quarks
+C.     according to (1-x)**b / x**2
+C.  INPUT:  STR_mass_min : minimal string mass ** 2 = x1 * x2 * s
+C.          SLOPE : large x suppression exponent
+C.  OUTPUT:  gluon 4momenta on parton stack (GeV)                /FR'14
+C-----------------------------------------------------------------------
+c      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c      IMPLICIT INTEGER(I-N)
+c
+c      INTEGER NW_max
+c      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+c
+c     EVENT INFO COMMON
+c     contains overall interaction properties, like
+c     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+c      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+c      INTEGER KB,IAT,KT
+c      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+c
+c      INTEGER NCALL, NDEBUG, LUN
+c      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c
+c      DOUBLE PRECISION PPT02
+c      COMMON /S_CQDIS2/ PPT02(44)
+c      INTEGER NIPAR_max,NPAR_max
+c      PARAMETER (NPAR_max=200,NIPAR_max=100)
+c      DOUBLE PRECISION PAR
+c      INTEGER IPAR
+c      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+c
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+c      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+c      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+c
+c      DOUBLE PRECISION PI,TWOPI,CMBARN
+c      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+c
+c      DOUBLE PRECISION FACN
+c      DIMENSION FACN(3:10)
+c      COMMON /SIB_FAC/ FACN
+c      SAVE
+c
+c      SLOPE = max(1.D0,PAR(42))
+c      ZSOF = 2.D0*dLOG(STR_mass_min/SQS) ! minim. mass ~ x1 * x2
+c 50   XMIN = dEXP(ZSOF)
+c      axmin = 1.D0/xmin
+c 100  Z1 = -1.D0*dLOG(axmin-(axmin-1.D0)*S_RNDM(0))
+c      x1 = dexp(z1)
+c      XR = dlog(1.D0-X1) - dlog(1.D0-xmin)
+c      if(SLOPE*XR.le.log(S_RNDM(0))) goto 100
+c
+c 200  Z2 = -1.D0*dLOG(axmin-(axmin-1.D0)*S_RNDM(0))
+c      X2 = dEXP(Z2)
+c      XR = dlog(1.D0-X2) - dlog(1.D0-dEXP(ZSOF))
+c      if(SLOPE*XR.le.dlog(S_RNDM(0))) goto 200     
+c
+c      IF(Z1+Z2.LE.ZSOF) GOTO 50
+c      STR_mass2 = dsqrt(X1*X2*S)/2.D0
+c      PPTT = PPT02(10)
+c 150  PT = PPTT*dSQRT(-dLOG(MAX(EPS10,S_RNDM(0))))
+c      IF(IPAR(3).eq.6)THEN
+c         XM = 0.D0
+c         XM2 = XM**2
+c         RNDM = MAX(EPS10,S_RNDM(IFL))
+c         XMT = PPTT * dLOG(RNDM) - XM
+c         XMT2 = XMT**2
+c         PT = dSQRT(XMT2-XM2)
+c      ENDIF
+c      IF(PT.GT.PTmin) GOTO 150
+c      IF(PT.GE.STR_mass2) GOTO 150
+c      END
+c
+cC=======================================================================
+c
+c      SUBROUTINE SAMPLE_SOFT2 (STR_mass_min, X1,X2,PT)
+c
+C-----------------------------------------------------------------------
+C...Routine for sampling the kinematical variables
+C.  that characterize a soft cut pomeron (x1,x2, pT)
+C.  from the differential cross section:
+C.     d3sigma/(dx1 dx2 dpT)
+C.      ~ 1/x_i**a .*. exp(-mT)
+C.  INPUT: STR_mass_min : minimal string mass defined by kinematic limits
+C.                        of the string fragmentation
+C.  PAR:   PAR(42) : exponent a
+C.  OUTPUT:  X1, X2, PT (GeV)
+C-----------------------------------------------------------------------
+c      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c      IMPLICIT INTEGER(I-N)
+c      INTEGER NW_max
+c      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+c
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+c      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+c      INTEGER KB,IAT,KT
+c      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+c
+c      INTEGER NCALL, NDEBUG, LUN
+c      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c
+c      DOUBLE PRECISION PPT02
+c      COMMON /S_CQDIS2/ PPT02(44)
+c      INTEGER NIPAR_max,NPAR_max
+c      PARAMETER (NPAR_max=200,NIPAR_max=100)
+c      DOUBLE PRECISION PAR
+c      INTEGER IPAR
+c      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+c
+cC--------------------------------------------------------------------
+cC     SIBYLL utility common blocks containing constants       \FR'14
+cC--------------------------------------------------------------------
+c      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+c      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+c
+c      DOUBLE PRECISION PI,TWOPI,CMBARN
+c      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+c
+c      DOUBLE PRECISION FACN
+c      DIMENSION FACN(3:10)
+c      COMMON /SIB_FAC/ FACN
+c      SAVE
+c
+c      SLOPE = PAR(42)
+c      ZSOF = 2.D0*dLOG(STR_mass_min/SQS) ! zmin
+c      zsof = zsof * slope
+c 100  Z1=1.D0/SLOPE*(-zsof*S_RNDM(0)+zsof)
+c      Z2=1.D0/SLOPE*(-zsof*S_RNDM(0)+zsof)
+cc      print *,'zsof,z1,z2',zsof,z1,z2
+c      IF(Z1+Z2.LE.ZSOF) GOTO 100
+c      X1=dEXP(Z1)
+c      X2=dEXP(Z2)
+c      STR_mass2 = sqrt(X1*X2*S)/2.D0
+c      if(str_mass2.lt.0.9D0)goto 100
+c      PPTT = PPT02(10)
+cc      print *,'ptmin,str_mass:',ptmin,str_mass2
+c 150  PT = PPTT*dSQRT(-dLOG(MAX(EPS10,S_RNDM(0))))
+c      IF(IPAR(3).eq.6)THEN
+c         XM = 0.D0
+c         XM2 = XM**2
+c         RNDM = MAX(EPS10,S_RNDM(IFL))
+c         XMT = PPTT * dLOG(RNDM) - XM
+c         XMT2 = XMT**2
+c         PT = dSQRT(XMT2-XM2)
+c      ENDIF
+c      IF(PT.GT.PTmin) GOTO 150
+c      IF(PT.GE.STR_mass2) GOTO 150
+c      PHI = TWOPI*S_RNDM(L)
+c      END
+cC=======================================================================
+cc
+c      SUBROUTINE SAMPLE_SOFT3 (STR_mass_min, X1,X2,PT)
+c
+cC-----------------------------------------------------------------------
+cC...Routine for the sampling the kinematical variables
+cC.  that characterize a soft cut pomeron (x1,x2, pT)
+cC.  from the differential cross section:
+cC.     d3sigma/(dx1 dx2 dpT)
+cC.  INPUT:  L=1 incident proton, L=2  incident pi
+cC.          (soft strings identical for pi and p interactions)
+cC.  OUTPUT:  X1, X2, PT (GeV)
+cC-----------------------------------------------------------------------
+c      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c      IMPLICIT INTEGER(I-N)
+c      INTEGER NW_max
+c      PARAMETER (NW_max = 20)
+cC--------------------------------------------------------------------
+cC     SIBYLL common blocks containing event information       \FR'14
+cC--------------------------------------------------------------------
+c
+cC     EVENT INFO COMMON
+cC     contains overall interaction properties, like
+cC     SQS : center-of-mass energy
+cC     S   :         "       "     squared
+cC     PTmin : low pt cut of QCD cross section, 
+cC             i.e. minimal pt of hard minijets
+cC     Xmin : low-x bound for PDFs, 
+cC            i.e. minimal momentum fraction of hard partons
+cC     Zmin : logarithm of that
+cC     KB : PID of beam hadron
+cC     KT() : PID of target
+cC     IAT : mass number of target
+c      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+c      INTEGER KB,IAT,KT
+c      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+c
+c      INTEGER NCALL, NDEBUG, LUN
+c      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c
+c      DOUBLE PRECISION PPT02
+c      COMMON /S_CQDIS2/ PPT02(44)
+c      INTEGER NIPAR_max,NPAR_max
+c      PARAMETER (NPAR_max=200,NIPAR_max=100)
+c      DOUBLE PRECISION PAR
+c      INTEGER IPAR
+c      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+c
+cC--------------------------------------------------------------------
+cC     SIBYLL utility common blocks containing constants       \FR'14
+cC--------------------------------------------------------------------
+c      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+c      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+c
+c      DOUBLE PRECISION PI,TWOPI,CMBARN
+c      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+c
+c      DOUBLE PRECISION FACN
+c      DIMENSION FACN(3:10)
+c      COMMON /SIB_FAC/ FACN
+c      SAVE
+c
+c      SLOPE = max(1.D0,PAR(42))
+c      ZSOF = 2.D0*dLOG(STR_mass_min/SQS) ! minim. mass ~ x1 * x2
+c 100  Z1=-ZSOF*S_RNDM(0)+ZSOF   ! sample envelope 1/x
+c      X1 = dEXP(Z1)
+cc      print *,'z1,x1:',z1,x1
+c      XR = dlog(1.D0-X1) - dlog(1.D0-dEXP(ZSOF))
+cc      print *,'ratio:',(1.-X1)/(1.-EXP(ZSOF)),(1.-X1),1.-EXP(ZSOF)
+cc      print *,'log ratio:',xr,log(1.-X1),log(1.-EXP(ZSOF))
+c      if(SLOPE*XR.le.dlog(S_RNDM(0))) goto 100
+c
+c 200  Z2=-ZSOF*S_RNDM(0)+ZSOF   ! sample envelope 1/x
+c      X2 = dEXP(Z2)
+c      XR = dlog(1.D0-X2) - dlog(1.D0-dEXP(ZSOF))
+c      if(SLOPE*XR.le.dlog(S_RNDM(0))) goto 200     
+cc      print *,'zsof,z1,z2',zsof,z1,z2
+c      IF(Z1+Z2.LE.ZSOF) GOTO 100
+c      STR_mass2 = sqrt(X1*X2*S)/2.D0
+c      PPTT = PPT02(10)
+c      IF(IPAR(3).eq.8) PPTT = PPT02(20)
+c 150  PT = PPTT*dSQRT(-dLOG(MAX(EPS10,S_RNDM(0))))
+c      IF(IPAR(3).ge.6)THEN
+c         XM = 0.D0
+c         XM2 = XM**2
+c         RNDM = MAX(EPS10,S_RNDM(IFL))
+c         XMT = PPTT * dLOG(RNDM) - XM
+c         XMT2 = XMT**2
+c         PT = dSQRT(XMT2-XM2)
+c      ENDIF
+c      IF(PT.GT.PTmin) GOTO 150
+c      IF(PT.GE.STR_mass2) GOTO 150
+c      PHI = TWOPI*S_RNDM(L)
+c      END
+cC=======================================================================
+c
+c      SUBROUTINE SAMPLE_SOFT5 (STR_mass_min, X1,X2,PT)
+c
+cC-----------------------------------------------------------------------
+cC...Routine for the sampling the kinematical variables of sea quarks
+cC.     according to (1-x)**b / x**2
+cC.  INPUT:  STR_mass_min : minimal string mass ** 2 = x1 * x2 * s
+cC.          SLOPE : large x suppression exponent
+cC.  OUTPUT:  X1, X2, PT (GeV)                                   /FR'14
+cC-----------------------------------------------------------------------
+c      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c      IMPLICIT INTEGER(I-N)
+c      INTEGER NW_max
+c      PARAMETER (NW_max = 20)
+cc      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, kb ,kt
+cC--------------------------------------------------------------------
+cC     SIBYLL common blocks containing event information       \FR'14
+cC--------------------------------------------------------------------
+c
+cC     EVENT INFO COMMON
+cC     contains overall interaction properties, like
+cC     SQS : center-of-mass energy
+cC     S   :         "       "     squared
+cC     PTmin : low pt cut of QCD cross section, 
+cC             i.e. minimal pt of hard minijets
+cC     Xmin : low-x bound for PDFs, 
+cC            i.e. minimal momentum fraction of hard partons
+cC     Zmin : logarithm of that
+cC     KB : PID of beam hadron
+cC     KT() : PID of target
+cC     IAT : mass number of target
+c      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+c      INTEGER KB,IAT,KT
+c      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+c
+c      INTEGER NCALL, NDEBUG, LUN
+c      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c
+c      DOUBLE PRECISION PPT02
+c      COMMON /S_CQDIS2/ PPT02(44)
+c      INTEGER NIPAR_max,NPAR_max
+c      PARAMETER (NPAR_max=200,NIPAR_max=100)
+c      DOUBLE PRECISION PAR
+c      INTEGER IPAR
+c      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+c
+cC--------------------------------------------------------------------
+cC     SIBYLL utility common blocks containing constants       \FR'14
+cC--------------------------------------------------------------------
+c      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+c      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+c
+c      DOUBLE PRECISION PI,TWOPI,CMBARN
+c      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+c
+c      DOUBLE PRECISION FACN
+c      DIMENSION FACN(3:10)
+c      COMMON /SIB_FAC/ FACN
+c      SAVE
+c
+c      SLOPE = max(1.D0,PAR(42))
+c      ZSOF = 2.D0*dLOG(STR_mass_min/SQS) ! minim. mass ~ x1 * x2
+c 50   XMIN = dEXP(ZSOF)
+c      axmin = 1.D0/xmin
+c 100  Z1 = -1.D0*dLOG(axmin-(axmin-1.D0)*S_RNDM(0))
+c      x1 = dexp(z1)
+c      XR = dlog(1.D0-X1) - dlog(1.D0-xmin)
+c      if(SLOPE*XR.le.log(S_RNDM(0))) goto 100
+c
+c 200  Z2 = -1.D0*dLOG(axmin-(axmin-1.D0)*S_RNDM(0))
+c      X2 = dEXP(Z2)
+c      XR = dlog(1.D0-X2) - dlog(1.D0-dEXP(ZSOF))
+c      if(SLOPE*XR.le.dlog(S_RNDM(0))) goto 200     
+c
+c      IF(Z1+Z2.LE.ZSOF) GOTO 50
+c      STR_mass2 = dsqrt(X1*X2*S)/2.D0
+c      PPTT = PPT02(10)
+c      IF(IPAR(3).eq.8) PPTT = PPT02(20)
+c 150  PT = PPTT*dSQRT(-dLOG(MAX(EPS10,S_RNDM(0))))
+c      IF(IPAR(3).ge.6)THEN
+c         XM = 0.D0
+c         XM2 = XM**2
+c         RNDM = MAX(EPS10,S_RNDM(IFL))
+c         XMT = PPTT * dLOG(RNDM) - XM
+c         XMT2 = XMT**2
+c         PT = dSQRT(XMT2-XM2)
+c      ENDIF
+c      IF(PT.GT.PTmin) GOTO 150
+c      IF(PT.GE.STR_mass2) GOTO 150
+c      END
+c
+C=======================================================================
+
+      SUBROUTINE SAMPLE_SOFT6 (STR_mass_min, X1,X2,PT)
+
+C-----------------------------------------------------------------------
+C...Routine for the sampling the kinematical variables of sea quarks
+C.     according to (1-x)**b / x
+C.  INPUT:  STR_mass_min : minimal string mass ** 2 = x1 * x2 * s
+C.          SLOPE : large x suppression exponent
+C.  OUTPUT:  X1, X2, PT (GeV)                                   /FR'14
+C-----------------------------------------------------------------------
+Cf2py double precision, intent(in) :: STR_mass_min
+Cf2py double precision, intent(out) :: X1
+Cf2py double precision, intent(out) :: X2
+Cf2py double precision, intent(out) :: PT
+
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      DOUBLE PRECISION PPT02
+      COMMON /S_CQDIS2/ PPT02(44)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+      
+      NOSLOPE = 0
+      SLOPE = PAR(42)
+      IF(SLOPE.lt.0.5D0) NOSLOPE = 1
+      XMAX = 0.8D0
+      ZSOF = 2.D0*LOG(STR_mass_min/SQS)       ! minim. mass ~ x1 * x2
+      XMINA = MAX(EXP(ZSOF),EPS10)
+      AXMINA = 1.D0/XMINA
+      IF(ndebug.gt.2)
+     &    write(lun,*) ' SAMPLE_SOFT6: Mmin,ZSOF,XMINA,XMAX,SLOPE:',
+     &     STR_mass_min,ZSOF,XMINA,XMAX,SLOPE
+      
+ 100  X1 = XM2DIS(XMINA,XMAX,1.D0)            ! ~(1/x)**alpha
+      IF(NOSLOPE.eq.1) goto 200
+      XRNDM = S_RNDM(0)
+      XR = LOG(1.D0-X1)-LOG(1.D0-XMINA)
+      IF(ndebug.gt.5)
+     &     write(lun,*) '  X1,XR,SLOPE*XR:',X1,XR,SLOPE*XR
+      if(SLOPE*XR.le.LOG(max(xrndm,eps10))) goto 100
+
+ 200  X2 = XM2DIS(XMINA,XMAX,1.D0)            ! ~(1/x)**alpha
+      IF(NOSLOPE.eq.1) goto 300
+      XRNDM = S_RNDM(1)
+      XR = log(1.D0-X2) - log(1.D0-XMINA)
+      IF(ndebug.gt.5)
+     &    write(lun,*) '  X2,XR,SLOPE*XR:',X2,XR,SLOPE*XR
+      if(SLOPE*XR.le.log(max(xrndm,eps10))) goto 200
+
+ 300  Z1 = log(X1)
+      Z2 = log(X2)
+      IF(Z1+Z2.LE.ZSOF) GOTO 100     
+      STR_mass2 = sqrt(X1*X2*S)/2.D0
+      PPTT = PPT02(10)
+      IF(IPAR(3).eq.8) PPTT = PPT02(20)
+      IF(ndebug.gt.2)
+     &    write(lun,*) ' SAMPLE_SOFT6: PPTT,Mmin2,PTmin:',
+     &PPTT,STR_mass2,PTmin
+ 150  PT = PPTT*SQRT(-LOG(MAX(EPS10,S_RNDM(0))))
+      IF(IPAR(3).ge.6)THEN
+         XM = 0.D0
+         XM2 = XM**2
+         RNDM = MAX(EPS10,S_RNDM(1))
+         XMT = PPTT * LOG(RNDM) - XM
+         XMT2 = XMT**2
+         PT = SQRT(XMT2-XM2)
+      ENDIF
+      IF(ndebug.gt.2)
+     &    write(lun,*) '  XM,XMT2,PT:',XM,XMT2,PT
+      IF(PT.GT.PTmin) GOTO 150
+      IF(PT.GE.STR_mass2) GOTO 150
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_START_EV (SQS, L, IA, IAFLG, NW, JDIF)
+
+C-----------------------------------------------------------------------
+C...Beginning of a SIBYLL interaction 
+C.
+C.  add l.m. Glauber SD cross section for pAir  13/FR
+C.
+C.  INPUT : SQS = c.m.s. energy (GeV)
+C.          L = 1:proton, 2:charged pion
+C.          IA = mass of target nucleon
+C.          IAFLG = target is air
+C. 
+C.  OUTPUT: NW    = number of wounded nucleons
+C.          JDIF(JW)  = diffraction code    !!!! changed to field !!!!
+C.                  (0 : non-diffractive interaction)
+C.                  (1 : forward diffraction)
+C.                  (2 : backward diffraction)
+C.                  (3 : double diffraction)
+C.
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c     external type declarations
+      INTEGER NW_max,JDIF,IA,L,IAFLG,NW
+      DOUBLE PRECISION SQS
+      PARAMETER (NW_max = 20)
+      DIMENSION JDIF(NW_max)
+      
+      DOUBLE PRECISION B, BMAX
+      INTEGER NTRY, NA
+      COMMON /S_CNCM0/ B, BMAX, NTRY, NA
+      DOUBLE PRECISION XM2MIN,ALXMIN,SLOP0,ASLOP,BSLOP,XMASS
+      COMMON /S_DIFMAss/ XM2MIN(6),ALXMIN(6),SLOP0,ASLOP,BSLOP,XMASS(2)
+      DOUBLE PRECISION XI_MAX, ALAM
+      COMMON /GLAUB_SCR/ XI_MAX, ALAM(61)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+c     local type declarations
+      DOUBLE PRECISION SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO,
+     &     SIGPROD,SIGBDIF,S_RNDM,S,PF,PB,PD,P0,P1,P2,R
+      DIMENSION SIGDIF(3)
+      INTEGER K
+      SAVE
+
+      IF(NDEBUG.gt.0)
+     &WRITE(LUN,*)'SIB_START_EV:', SQS, L, IA, IAFLG, NW, JDIF
+      
+C...sample number of wounded nucleons
+c     read hadron-nucleon cross section from table
+      CALL SIB_SIGMA_HP(L,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO) 
+
+      IF (IA .GT. 1)  THEN
+         IF(IPAR(12).NE.0)THEN
+            IF(IPAR(12).eq.3)THEN
+c     distinguish between nuclear cross sections..
+               IF(IAFLG.eq.0)THEN
+c     if target is nucleus calc. hadron-nucleus cross section (slow)
+                  CALL SIB_SIGMA_HNUC(L,IA,SQS,SIGprod,SIGbdif)
+               ELSE
+c     if target is air read hadron-air cross section from table
+                  CALL SIB_SIGMA_HAIR(L,SQS,SIGprod,SIGbdif)
+               ENDIF
+            ELSE
+c     always use air cross section...
+               CALL SIB_SIGMA_HAIR(L,SQS,SIGprod,SIGbdif)
+            ENDIF
+C     2channel low-mass (coherent) diffraction?
+            IF(S_RNDM(L).LT.SIGbdif/SIGprod)THEN
+               NW = 1
+               JDIF(1) = 1
+               RETURN
+            ENDIF
+         ENDIF
+c     sample number of wounded nucleons
+         CALL INT_H_NUC (IA, SIGT, SLOPE, RHO) 
+      ELSE
+         NA = 1
+      ENDIF      
+      NW = NA
+
+      IF(NDEBUG.gt.0) 
+     &   WRITE(LUN,'(A50,2I3,1P,3E10.3)')
+     &   '  START_EVT: IA, NW, SIGT, SLOPE, RHO:',IA,NW,SIGT,SLOPE,RHO
+C...new treatment of diffraction 
+      IF(IA.GT.1) THEN
+c     hadron-nucleus case
+         IF(NW.eq.1)THEN
+            IF(IPAR(12).NE.0)THEN
+c     high mass (incoherent) diffraction?
+               S = SQS ** 2
+               PF =(1.D0-dLOG(S*XI_MAX/XM2MIN(L))/
+     &              dLOG(S*PAR(13)/XM2MIN(L)))*SIGDIF(1)/SIGINEL
+               PB = SIGDIF(2)/SIGINEL
+               PD = SIGDIF(3)/SIGINEL
+            ELSE
+               PF = SIGDIF(1)/SIGINEL
+               PB = SIGDIF(2)/SIGINEL
+               PD = SIGDIF(3)/SIGINEL
+            ENDIF
+         ELSE
+c     Nw>1:
+            IF(IPAR(12).EQ.1)THEN
+c     all interactions with Nw>1 are non-diff.
+               DO K=1, NW
+                  JDIF(K) = 0
+               ENDDO
+               RETURN
+            ELSE
+c     some Nw>1 are attached by diff. 
+               PF = PAR(124)*SIGDIF(1)/SIGINEL
+               PB = PAR(124)*SIGDIF(2)/SIGINEL
+               PD = PAR(124)*SIGDIF(3)/SIGINEL
+            ENDIF
+         ENDIF
+      ELSE
+c     hadron-nucleon case
+         PF = SIGDIF(1)/SIGINEL
+         PB = SIGDIF(2)/SIGINEL
+         PD = SIGDIF(3)/SIGINEL
+      ENDIF
+      P0 = 1.D0-PF-PB-PD
+      P1 = P0 + PF
+      P2 = P1 + PB
+      DO K=1, NW
+         R = S_RNDM(0)
+         IF (R .LT. P0)  THEN
+            JDIF(K) = 0
+         ELSE IF (R .LT. P1)  THEN
+            JDIF(K) = 1
+         ELSE IF (R .LT. P2)  THEN
+            JDIF(K) = 2
+         ELSE 
+            JDIF(K) = 3
+         ENDIF
+      ENDDO
+      
+      END
+C=======================================================================
+
+      SUBROUTINE INI_EVENT(ECM,KBEAM,IATARG,IMOD)
+
+C-----------------------------------------------------------------------
+C     initializes the stacks and event info common
+c     if Imod : 0 - initiate subevent in recursive call
+c                  ( keeps the final hadron stack intact )
+C             : 1 - initiate entire new event
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+c     external type declarations
+      DOUBLE PRECISION ECM
+      INTEGER KBEAM,IATARG,IMOD
+
+c     COMMONs
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER II2,JJ2
+      DOUBLE PRECISION U2,C2,CD2,CM2
+      COMMON /SIB_RAND/ U2(97),C2,CD2,CM2,II2,JJ2
+
+c     local types
+      DOUBLE PRECISION PZ,E1,PAWT,S_RNDM,R,FOX
+      INTEGER KK,JJ,II,KBA,IREFout,JN
+      SAVE
+      DATA FOX /0.21522D0/  !atomic percentage of 'non-nitrogen' in air
+ 
+      
+      IF(NDEBUG.gt.0.and.IMOD.eq.1) 
+     &     WRITE(LUN,'(A50,F10.2,I4,I3,I3)')
+     &     '  INI_EVENT: called with (ECM,KBEAM,IATARG,NCALL):',
+     &     ECM,KBEAM,IATARG,NCALL
+
+c     set final particle stack to zero
+      IF(IMOD.eq.1)then
+         NP = 0
+         NWD = 0
+         NJET = 0
+         NSOF = 0
+      endif
+
+      CALL INI_PRTN_STCK(0,0)
+
+c     clear index cache
+      do kk=1,3
+         IBMRDX(kk) = 0
+      ENDDO
+      do jj=1,NW_max
+         do kk=1,3
+            ICSTDX(jj,kk) = 0
+            ICSTDX(jj+1,kk) = 0
+            ITGRDX(jj,kk) = 0
+            IINTDX(jj) = 0
+         ENDDO
+         do ii=1,NH_max
+            IHMJDX(NH_max*(JJ-1)+II) = 0
+         enddo
+         do ii=1,NS_max
+            ISMJDX(NS_max*(JJ-1)+II) = 0
+         enddo
+      ENDDO
+
+      SQS   = Ecm
+      S     = SQS*SQS
+      
+      KB = KBEAM
+      KBA = IABS(KBEAM)
+c     add beam particles to parton stack, lvl -2
+      PZ = PAWT(SQS,AM(KBA),AM(13))
+      E1 = SQRT(PZ**2+AM2(KBA))
+      CALL ADD_PRTN(0.D0,0.D0,PZ,E1,AM(KBA),KB,-2,0,IREFout)
+      IF(IMOD.eq.1)THEN
+         IAT = IATARG
+         IF(IATARG.EQ.1)THEN
+            KT(1) = 13
+         ELSE
+            IF(IATARG.eq.0)THEN
+C...  Generate an 'air' interaction by choosing Nitrogen or Oxygen
+               R = S_RNDM(0)
+               IATARG = 14
+               IF (R .LT. FOX)  IATARG = 16
+               if (NDEBUG.gt.0) 
+     *           WRITE(lun,*)'fox,rndm,iatarg,eps:',fox,r,iatarg,eps8
+            ENDIF
+            DO JN=1,IATARG
+c     for nuclear target: proton (13) or neutron (14)
+               KT(JN) = 13 + INT((2.D0-EPS8)*S_RNDM(JN))
+            ENDDO
+         ENDIF
+      ELSE
+         KT(1) = IATARG
+      ENDIF
+
+C...energy-dependent transverse momentum cutoff
+c...EJA correction 2007.03.27
+      IF(IPAR(27).eq.1)THEN
+         PTmin = PAR(10)+PAR(11)*EXP(PAR(12)*SQRT(LOG(SQS)))
+      else
+         PTmin = PAR(10)+PAR(11)*EXP(PAR(12)*SQRT(LOG(S)))
+      endif
+      XMIN = 4.D0*PTmin**2/S
+      ZMIN = LOG(XMIN)
+      IF(ndebug.gt.0)then
+         write(lun,*) ' INI_EVENT: ncall:', ncall
+         write(lun,'(2X,A33,F10.2,1X,F16.2,F8.5,E10.3,F10.5)')
+     &        'INI_EVENT: (SQS,S,PTmin,Xmin,Zmin)',
+     &        SQS,S,PTmin,Xmin,Zmin
+         write(lun,*) ' INI_EVENT: KB,IAT,IATARG,KT',KB,IAT,IATARG
+         write(lun,*) '         ',(KT(jj),jj=1,IATARG)
+      endif
+
+      CALL PTSETUP_4FLV(ECM)
+
+      return
+      END
+C-----------------------------------------------------------------------
+C     parton level administration tools for SIBYLL                \FR'14
+C-----------------------------------------------------------------------
+
+C...  COMMON /S_PRTNS/ : parton stack
+c     PP: 4momentum of parton, px,py,pz,energy,mass
+c     LPID(1): parton id, i.e. flavor (u:1,d:2,s:3,c:4) for quarks
+c     LPID(2): level of parton
+c              fragmenting systems (strings,remnants) are marked as level0
+c              partons that make up these systems are marked as level1
+c     LPID(3): 'downward' reference 
+c               pointer from level1 partons to their level0 parent
+c     LPID(4): 'upward' reference 
+c               pointer from level0 partons to their level-1 parent
+c     LVL0IDX: index cache for level0 partons
+c     NPP: total number of partons on stack
+c     NPP0: number of level0 partons on stack
+
+C=======================================================================
+
+      SUBROUTINE ADD_PRTN(PX,PY,PZ,E,XMS,IPID,LVL,IREFin,IREFout)
+
+C-----------------------------------------------------------------------
+C     routine to add a parton to the stack \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      PP(NPP+1,1) = PX
+      PP(NPP+1,2) = PY
+      PP(NPP+1,3) = PZ
+      PP(NPP+1,4) = E
+      PP(NPP+1,5) = XMS
+      LPID(NPP+1,1) = IPID
+      LPID(NPP+1,2) = LVL     
+      LPID(NPP+1,3) = IREFin
+      NPP = NPP + 1
+c     level0 index
+      IF(LVL.eq.0)THEN
+         LVL0IDX(NPP0+1) = NPP
+         NPP0 = NPP0 + 1
+      ENDIF
+      IREFout = NPP
+      IF(NDEBUG.gt.6)THEN
+         WRITE(LUN,*) ' ADD_PRTN: (#,PID,LEVEL,REF)',
+     &        NPP,LPID(NPP,1),LPID(NPP,2),LPID(NPP,3)
+         WRITE(LUN,*) '  4momentum:        ',(PP(NPP,JJ),JJ=1,5)
+      ENDIF
+      END
+
+C=======================================================================
+
+      SUBROUTINE ADD_PRTN_4VEC(PIN,IPID,LVL,IREFin,IREFout)
+
+C-----------------------------------------------------------------------
+C     wrapper for ADD_PRTN to add 4momentum directly \FR'14
+C----------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DIMENSION PIN(5)
+      SAVE
+
+      CALL ADD_PRTN
+     &     (PIN(1),PIN(2),PIN(3),PIN(4),PIN(5),IPID,LVL,IREFin,IRF)
+      IREFout = IRF
+      END
+
+C=======================================================================
+
+      SUBROUTINE ADD_REF(IDX,Irefin)
+
+C-----------------------------------------------------------------------
+C     routine to add a reference label to a particle
+C     after it has been added to the stack        \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+      
+c      IF(LPID(IDX,3).ne.0)  WRITE(LUN,*)
+c     &     ' ADD_REF: warning particle already has defined reference,',
+c     &     IDX,' overwritting..'
+      IF(NDEBUG.gt.6)
+     &WRITE(LUN,*) ' ADD_REF: (IDX,REFin)',IDX,Irefin
+      LPID(IDX,3) = Irefin
+      END
+
+C=======================================================================
+
+      SUBROUTINE RD_REF(IDX,Irefout)
+
+C-----------------------------------------------------------------------
+C     routine to add a reference label to a particle
+C     after it has been added to the stack        \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      Irefout = LPID(IDX,3)
+      IF(NDEBUG.gt.6)
+     &  WRITE(LUN,*) ' RD_ref: (IDX,REFout)',IDX,Irefout
+      END
+
+C=======================================================================
+
+      SUBROUTINE ADD_INT_REF(IDX,Irefin)
+
+C-----------------------------------------------------------------------
+C     routine to add a reference label to an interaction
+C     after it has been added to the stack        \FR'15
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      IF(NDEBUG.gt.6)
+     &    WRITE(LUN,*) ' ADD_INT_REF: (IDX,REFin)',IDX,Irefin
+      LPID(IDX,4) = Irefin
+      END
+
+C=======================================================================
+
+      SUBROUTINE RD_INT(IDX,Irefout,Iout)
+
+C-----------------------------------------------------------------------
+C     routine to add a reference label to an interaction
+C     after it has been added to the stack        \FR'15
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      Irefout = LPID(IDX,4)
+      IF(Irefout.ne.0) Iout = LPID(Irefout,1)
+      IF(NDEBUG.gt.6)
+     &  WRITE(LUN,*) ' RD_INT: (IDX,REFout,Iint)',IDX,Irefout,Iout
+      END
+
+C=======================================================================
+
+      SUBROUTINE EDT_PRTN(IDX,PX,PY,PZ,EN,XMS,IREFout)
+
+C-----------------------------------------------------------------------
+C     routine to edit a parton already on stack   \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      IF(NDEBUG.gt.6)THEN
+         WRITE(LUN,*) ' EDT_PRTN: (#,PID,LEVEL,REF)',
+     &        IDX,LPID(IDX,1),LPID(IDX,2),LPID(IDX,3)
+         WRITE(LUN,*) '  initial 4momentum:',(PP(IDX,JJ),JJ=1,5)
+      ENDIF
+      PP(IDX,1) = PX
+      PP(IDX,2) = PY
+      PP(IDX,3) = PZ
+      PP(IDX,4) = EN
+      PP(IDX,5) = XMS
+c     return reference to other partons
+      IREFout = LPID(IDX,3)
+      IF(NDEBUG.gt.6)
+     &     WRITE(LUN,*) '  final 4momentum:  ',(PP(IDX,JJ),JJ=1,5)
+      END
+
+C=======================================================================
+
+      SUBROUTINE RD_PRTN(IDX,PX,PY,PZ,EN,XMS,IFL,IREFout)
+
+C-----------------------------------------------------------------------
+C     routine to read a parton from the stack     \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      IF(NDEBUG.gt.6)THEN
+         WRITE(LUN,*) ' RD_PRTN: (#,PID,LEVEL,REF)',
+     &        IDX,LPID(IDX,1),LPID(IDX,2),LPID(IDX,3)
+         WRITE(LUN,*) '  4momentum:        ',(PP(IDX,JJ),JJ=1,5)
+      ENDIF
+      PX = PP(IDX,1)
+      PY = PP(IDX,2)
+      PZ = PP(IDX,3)
+      EN = PP(IDX,4)
+      XMS = PP(IDX,5)
+      IFL = LPID(IDX,1)
+c     return reference to other partons
+      IREFout = LPID(IDX,3)
+      END
+
+C=======================================================================
+
+      SUBROUTINE RD_PRTN_4VEC(IDX,Pin,IFL,IREFout)
+
+C-----------------------------------------------------------------------
+C     routine to read a parton from the stack     \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      DIMENSION Pin(5)
+      SAVE
+
+      IF(IDX.EQ.0) THEN
+         WRITE(LUN,*) ' RD_PRTN_4VEC: invalid index!',IDX
+         xa = -1.D0
+         xa = log(xa)
+         RETURN
+      ELSE         
+         do ii = 1,5
+            PIN(ii) = PP(IDX,ii)
+         enddo
+         IFL = LPID(IDX,1)
+c     return reference to other partons
+         IREFout = LPID(IDX,3)
+         IF(NDEBUG.gt.6)THEN
+            WRITE(LUN,*) ' RD_PRTN: (#,PID,LEVEL,REF)',
+     &           IDX,IFL,LPID(IDX,2),IREFout
+            WRITE(LUN,*) '  4momentum:        ',(PIN(JJ),JJ=1,5)
+         ENDIF
+
+      ENDIF
+      END
+
+C=======================================================================
+
+      SUBROUTINE ITR_LVL0_PRTN(JJ,IDX,LID)
+
+C-----------------------------------------------------------------------
+C     routine that serves as iterator over the level0
+C     partons on the stack                        \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+ 
+      IDX = LVL0IDX(JJ)
+      IF(ndebug.gt.6)
+     &  WRITE(LUN,*) ' ITR_LVL0_PRTN: JJ,IDX',JJ,IDX
+      LID = LPID(IDX,1)
+      IF(JJ+1.gt.NPP0) THEN
+         JJ = -1
+         RETURN
+      ELSE
+         JJ = JJ + 1
+      ENDIF      
+      END
+
+C=======================================================================
+
+      SUBROUTINE INI_PRTN_STCK(NOLD,N0OLD)
+
+C-----------------------------------------------------------------------
+C     reset parton stack                          \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      IF(NDEBUG.gt.6) WRITE(LUN,*) ' PRTN_STCK: reset .. '
+      IF(NDEBUG.gt.6) WRITE(LUN,*) '  old state: NPP,NPP0',NPP,NPP0
+      
+      NPP = NOLD
+      NPP0 = N0OLD
+
+      IF(NDEBUG.gt.6) WRITE(LUN,*) '  new state: NPP,NPP0',NPP,NPP0
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE GET_NPP(NPPLD,NPP0LD)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      NPPLD = NPP
+      NPP0LD = NPP0
+      END
+
+C=======================================================================
+
+      SUBROUTINE GET_LVL0(NPP0LD,IDXLIST)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      DIMENSION IDXLIST(NPP0_max)
+      INTEGER   N
+      SAVE
+
+      NPP0LD = NPP0
+      DO N = 1, NPP0_max
+        IDXLIST(N) = LVL0IDX(N)
+      ENDDO
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE PRNT_PRTN_STCK
+
+C-----------------------------------------------------------------------
+C     as the name suggests, prints the current state
+C     of the parton stack                         
+C     print unit is defined in S_DEBUG:LUN        \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      CHARACTER*5 CDE
+      CHARACTER*9 CODE
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      SAVE
+
+      WRITE (LUN,50) 
+ 50   FORMAT(3X,88('-'),/,21X,'SIBYLL PARTON LEVEL EVENT SUMMARY',21X,
+     &     /,3X,75('-'),13('-'))
+
+c     beam particles
+      WRITE(LUN,*) '  BEAM PARTICLES'
+ 52   FORMAT(4X,'#',3X,'PID',2x,'LVL',2x,'REF',20x,'PX',9x,'PY',7x,
+     +     'PZ',9x,'E',11X,'Mass', /, 3X,75('-'),13('-'))
+      WRITE (LUN,52)
+      DO J=1,NPP
+         IF(LPID(J,2).eq.-2)then
+            WRITE (LUN,60) J, (LPID(J,KK),KK=1,3), (PP(J,K),K=1,5)
+         ENDIF
+      ENDDO
+c     level -2 format
+ 60   FORMAT(4I5,14X,2F11.3,1p,2E11.3,0p,F9.3)
+      WRITE(LUN,61)
+ 61   FORMAT(3X,75('-'),13('-'))
+
+c     interactions
+      WRITE(LUN,*) '  INTERACTIONS'
+ 62   FORMAT(4X,'#',3X,'PID',2x,'LVL',2x,'REF',20x,'NSOF',8x,'NJET',7x,
+     +     'JDIF',7x,'E',11X,'Mass', /, 3X,75('-'),13('-'))
+      WRITE (LUN,62)
+      DO J=1,NPP
+         IF(LPID(J,2).eq.-1)then
+            WRITE (LUN,63) J, (LPID(J,KK),KK=1,3), (PP(J,K),K=1,5)
+         ENDIF
+      ENDDO
+c     level -1 format
+ 63   FORMAT(4I5,12X,4F12.0,F11.3)
+ 64   FORMAT(3X,75('-'),13('-'))
+      WRITE(LUN,64)
+      
+c     partons
+      WRITE (LUN,100)
+      DO J=1,NPP
+         IF(LPID(J,2).eq.0)then
+            WRITE (LUN,120) J, (LPID(J,KK),KK=1,3), (PP(J,K),K=1,5)
+         elseif(LPID(J,2).eq.1)then
+            CALL KCODE(LPID(J,1),cde,nc)
+            WRITE (LUN,121) J, CDE(1:nc),(LPID(J,KK),KK=2,3), 
+     &           (PP(J,K),K=1,5)
+         elseif(LPID(J,2).eq.2)then
+            CODE = '        '
+            L = LPID(J,1)
+            CODE(1:6) = NAMP(IABS(L))
+            IF (L .LT. 0) CODE(7:9) = 'bar'
+            WRITE (LUN,122) J,CODE,(LPID(J,KK),KK=2,3), (PP(J,K),K=1,5)
+         endif
+      ENDDO
+      CALL PPSUM(1,NPP,Esum,PXsum,PYsum,PZsum,NF)
+      WRITE(LUN,140) PXsum,PYsum,PZsum,Esum
+ 
+ 100  FORMAT(4X,'#',3X,'PID',2x,'LVL',2x,'REF',20x,'PX',9x,'PY',7x,
+     +     'PZ',9x,'E',11X,'Mass', /, 3X,75('-'),13('-'))
+c     level 0 format
+ 120  FORMAT(4I5,14X,2F11.3,1p,2E11.3,0p,F11.3)
+c     level 1 format cjoe
+ 121  FORMAT(I7,1X,A5,2I5,14X,2F11.3,1p,2E11.3,0p,F11.3)
+c     level 2 format
+ 122  FORMAT(I10,1X,A9,2I5,10X,2F11.3,1p,2E11.3,0p,F11.3)
+ 140  FORMAT(3X,75('-'),13('-'),/,'  Tot = ',26X,2F11.3,1p,2e11.3)
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE PPSUM(N1,N2,ETOT,PXT,PYT,PZT,NF)
+
+C-----------------------------------------------------------------------
+C     Return the energy,px,py,pz of level0 partons 
+C     in the list between N1 and N2
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      NF=0
+      ETOT=0.D0
+      PXT=0.D0
+      PYT=0.D0
+      PZT=0.D0
+      DO J=N1,N2
+         IF (LPID(J,2) .EQ. 0)  THEN
+           NF = NF+1
+           ETOT = ETOT + ABS( PP(J,4) )
+           PXT = PXT + PP(J,1)
+           PYT = PYT + PP(J,2)
+           PZT = PZT + PP(J,3)
+         ENDIF
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE FOUR_LENGTH(XP,XM2)
+
+C-----------------------------------------------------------------------
+C     Calculate the length of a 4vector (+---)    \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION XP(5)
+      SAVE
+
+      XM2 = XP(4)**2 - XP(1)**2 - XP(2)**2 - XP(3)**2
+      END
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION CALC_INVM(XP1,XP2)
+
+C-----------------------------------------------------------------------
+C     Calculate the invariant mass of two 4vectors FR'15
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION XP1(5),XP2(5)
+      SAVE
+
+      CALC_INVM = (XP1(4)+ XP2(4))**2
+      DO I=1,3
+         CALC_INVM = CALC_INVM-(XP1(I)+XP2(I))**2         
+      ENDDO
+      CALC_INVM = SQRT(CALC_INVM)
+      END
+
+C=======================================================================
+      
+      SUBROUTINE GET_XMT2(IDX,XM2)
+
+C-----------------------------------------------------------------------
+C     Calculate the transverse mass of a parton 
+C     on the stack                                \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      XM2 = PP(IDX,1)**2 + PP(IDX,2)**2 + PP(IDX,5)**2
+      END
+C=======================================================================
+
+      SUBROUTINE GET_IMASS2(IDX,XM2)
+
+C-----------------------------------------------------------------------
+C     Calculate the invariant mass squared of a parton 
+C     on the stack  (+---)                        \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      SAVE
+
+      XM2 = PP(IDX,1)**2 + PP(IDX,2)**2 + PP(IDX,3)**2
+      XM2 = PP(IDX,4)**2 - XM2
+      END
+
+C=======================================================================
+
+      SUBROUTINE GET_MASS(IDX,XM)
+
+C-----------------------------------------------------------------------
+C     read mass of parton on stack                \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      IF(IDX.EQ.0) THEN 
+         XM2 = 0.D0
+      else
+         XM = PP(IDX,5)
+      ENDIF
+      END
+C=======================================================================
+
+      SUBROUTINE GET_MASS2(IDX,XM2)
+
+C-----------------------------------------------------------------------
+C     read mass of parton on stack                \FR'14
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      IF(IDX.EQ.0) THEN 
+         XM2 = 0.D0
+      else
+         XM2 = PP(IDX,5)**2
+      ENDIF
+      END
+
+C=======================================================================
+
+      SUBROUTINE GET_VRTLTY(IDX,XX)
+
+C-----------------------------------------------------------------------
+C     calculate virtuality of parton on stack     \FR'14
+C     = on-shell mass - inv. mass
+C-------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NPP_max = 1000, NPP0_max = 500)
+      COMMON /S_PRTNS/ PP(NPP_max,5), LPID(NPP_max,4), LVL0IDX(NPP0_max)
+     &     ,NPP,NPP0
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      SAVE
+
+      IF(IDX.EQ.0) XM2 = 0.D0
+      CALL GET_IMASS2(IDX,xm2)
+      XX = PP(IDX,5)**2-xm2
+      END
+
+C=======================================================================
+
+      SUBROUTINE ADD_4VECS(P1,P2,POUT)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DIMENSION P1(5),P2(5),POUT(5)
+      SAVE
+
+      DO II=1,4
+         POUT(II) = P1(II) + P2(II)
+      ENDDO
+      CALL FOUR_LENGTH(POUT,XM2)
+      IF(XM2.LT.0)THEN
+c     virtual particle
+         POUT(5) = -1.D0
+         IF(NDEBUG.gt.6)then
+            WRITE(LUN,*)
+     &           ' ADD_4VECS: resulting particle virtual!! (m**2):',XM2
+            WRITE(LUN,*) ' p**2' , POUT(1)**2+POUT(2)**2+POUT(3)**2
+            WRITE(LUN,*) ' E**2: ', POUT(4)**2
+         ENDIF
+      ELSE
+         POUT(5) = sqrt(xm2)
+      ENDIF
+      END
+C=======================================================================
+
+      SUBROUTINE DECPAR (LA,P0,ND,LL,P)
+
+C-----------------------------------------------------------------------
+C...This subroutine generates the decay of a particle
+C.  with ID = LA, and 5-momentum P0(1:5)
+C.  into ND particles of 5-momenta P(j,1:5) (j=1:ND)
+C.
+C.  If the initial particle code is LA=0
+C.  then ND and LL(1:ND) are considered as  input and
+C.  the routine generates a phase space decay into ND
+C.  particles of codes LL(1:nd)
+C.
+C.  june 1992
+C.  This version  contains the decay of polarized muons
+C.  The muon codes are  L =  4 : mu+ R
+C.                          -4 : mu+ L
+C.                           5 : mu- L
+C.                          -5 : mu- R
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      DIMENSION P0(5), LL(10), P(10,5)
+      DIMENSION PV(10,5), RORD(10), UE(3),BE(3)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+      
+C...Phase space decay into the particles in the list
+      IF (LA .EQ. 0)  THEN
+          MAT = 0
+          MBST = 0
+          PS = 0.D0
+          DO J=1,ND
+CDH          following statements corrected by D.H. dec 20.,1995
+             P (J,5) = AM(IABS(LL(J)))
+             PV(J,5) = AM(IABS(LL(J)))
+             PS = PS+P(J,5)
+          ENDDO
+          DO J=1,4
+             PV(1,J) = P0(J)
+          ENDDO
+          PV(1,5) = P0(5)
+          GOTO 140
+      ENDIF
+         
+C...Choose decay channel
+      L = IABS(LA)
+      ND=0
+      IDC = IDB(L)-1
+      IF (IDC+1 .LE.0)  RETURN
+      RBR = S_RNDM(0)
+110   IDC=IDC+1
+      IF(RBR.GT.CBR(IDC))  GOTO 110
+
+      KD =6*(IDC-1)+1
+      ND = KDEC(KD)
+      MAT= KDEC(KD+1)
+      MBST=0
+      IF (MAT .GT.0 .AND. P0(4) .GT. 20.D0*P0(5)) MBST=1
+      IF (MAT .GT.0 .AND. MBST .EQ. 0) 
+     +        BETA = DSQRT(P0(1)**2+P0(2)**2+P0(3)**2)/P0(4)
+      PS = 0.D0
+c     reduce omega mass by 50MeV to allow on-shell N(1710) decay
+      Xmomega = am(32)
+      IF(L.eq.53.or.L.eq.54) AM(32) = AM(32)-0.05D0
+      DO J=1,ND
+         LL(J) = KDEC(KD+1+J)
+         P(J,5)  = AM(LL(J))
+         PV(J,5) = AM(LL(J))
+         PS = PS + P(J,5)
+      ENDDO
+      AM(32) = Xmomega
+      DO J=1,4
+         PV(1,J) = 0.D0
+         IF (MBST .EQ. 0)  PV(1,J) = P0(J)
+      ENDDO
+      IF (MBST .EQ. 1)  PV(1,4) = P0(5)
+      PV(1,5) = P0(5)
+
+140   IF (ND .EQ. 2) GOTO 280
+
+      IF (ND .EQ. 1)  THEN
+         DO J=1,4
+            P(1,J) = P0(J)
+         ENDDO
+         RETURN
+      ENDIF
+
+C...Calculate maximum weight for ND-particle decay
+      WWTMAX = 1.D0/FACN(ND)      
+      PMAX=PV(1,5)-PS+P(ND,5)
+      PMIN=0.D0
+      DO IL=ND-1,1,-1
+         PMAX = PMAX+P(IL,5)
+         PMIN = PMIN+P(IL+1,5)
+         WWTMAX = WWTMAX*PAWT(PMAX,PMIN,P(IL,5))
+      ENDDO
+
+C...generation of the masses, compute weight, if rejected try again
+240   RORD(1) = 1.D0
+      DO 260 IL1=2,ND-1
+        RSAV = S_RNDM(0)
+        DO 250 IL2=IL1-1,1,-1
+          IF(RSAV.LE.RORD(IL2))   GOTO 260
+250     RORD(IL2+1)=RORD(IL2)
+260   RORD(IL2+1)=RSAV
+      RORD(ND) = 0.D0
+      WT = 1.D0      
+      DO 270 IL=ND-1,1,-1
+        PV(IL,5)=PV(IL+1,5)+P(IL,5)+(RORD(IL)-RORD(IL+1))*(PV(1,5)-PS)
+270   WT=WT*PAWT(PV(IL,5),PV(IL+1,5),P(IL,5))
+      IF (WT.LT.S_RNDM(1)*WWTMAX)   GOTO 240
+
+C...Perform two particle decays in respective cm frame
+280   DO 300 IL=1,ND-1
+        PA=PAWT(PV(IL,5),PV(IL+1,5),P(IL,5))
+        UE(3)=2.D0*S_RNDM(IL)-1.D0
+        PHI=TWOPI*S_RNDM(3)
+        UT = DSQRT(1.D0-UE(3)**2)
+        UE(1) = UT*dCOS(PHI)
+        UE(2) = UT*dSIN(PHI)
+        DO 290 J=1,3
+          P(IL,J)=PA*UE(J)
+290     PV(IL+1,J)=-PA*UE(J)
+        P(IL,4)=DSQRT(PA**2+P(IL,5)**2)
+300   PV(IL+1,4)=DSQRT(PA**2+PV(IL+1,5)**2)
+
+C...Lorentz transform decay products to lab frame
+      DO 310 J=1,4
+310   P(ND,J)=PV(ND,J)
+      DO 340 IL=ND-1,1,-1
+        DO 320 J=1,3
+320     BE(J)=PV(IL,J)/PV(IL,4)
+        GA=PV(IL,4)/PV(IL,5)
+        DO 340 I=IL,ND
+          BEP = BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+          DO 330 J=1,3
+330       P(I,J)=P(I,J)+GA*(GA*BEP/(1.D0+GA)+P(I,4))*BE(J)
+340   P(I,4)=GA*(P(I,4)+BEP)
+      
+C...Weak decays
+      IF (MAT .EQ. 1)  THEN
+         F1=P(2,4)*P(3,4)-P(2,1)*P(3,1)-P(2,2)*P(3,2)-P(2,3)*P(3,3)     
+         IF (MBST.EQ.1)  THEN
+C           WT = P0(5)*P(1,4)*F1
+            WT = P0(5)*(P(1,4)+DBLE(LA/L)*P(1,3))*F1
+         ENDIF
+         IF (MBST.EQ.0)  THEN  
+            WT=F1*(P(1,4)*P0(4)-P(1,1)*P0(1)-P(1,2)*P0(2)-P(1,3)*P0(3))
+            IF(L.lt.50)
+     +           WT= WT-DBLE(LA/L)*(P0(4)*BETA*P(1,4)-P0(4)*P(1,3))*F1
+         ENDIF
+         WTMAX = P0(5)**4/8.D0
+         IF(WT.LT.S_RNDM(0)*WTMAX)   GOTO 240
+      ENDIF
+
+C...Boost back for rapidly moving particle
+      IF (MBST .EQ. 1)   THEN
+         DO 440 J=1,3
+440      BE(J)=P0(J)/P0(4)
+         GA= P0(4)/P0(5)
+         DO 460 I=1,ND
+           BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+           DO 450 J=1,3
+450        P(I,J)=P(I,J)+GA*(GA*BEP/(1.D0+GA)+P(I,4))*BE(J)
+460      P(I,4)=GA*(P(I,4)+BEP)
+      ENDIF
+
+C...labels for antiparticle decay
+      IF (LA .LT. 0 .AND. L .GT. 18)  THEN
+           DO J=1,ND
+            LL(J) = LBARP(LL(J))
+         ENDDO
+      ENDIF
+
+      RETURN
+      END
+
+C=======================================================================
+
+      BLOCK DATA DATDEC
+
+C-----------------------------------------------------------------------
+C...initialization of SIBYLL particle data
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      DOUBLE PRECISION AW,AW2
+      COMMON /S_WIDTH1/ AW(99), AW2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      SAVE
+c     CBR contains the normed sum of the branching ratios of the decay channels
+c     indexed by IDB, i.e. a particle with 4 decay channels will have the entries
+c     [B1/Btot, (B1+B2)/Btot, (B1+B2+B3)/Btot, 1.]
+      DATA CBR /3*1.D0,0.D0,1.D0,1.D0,0.6354D0,0.8422D0,0.8981D0,
+     + 0.9157D0,0.9492D0,1.D0,0.6354D0,0.8422D0,0.8981D0,0.9157D0,
+     + 0.9492D0,1.D0,0.1965D0,0.3224D0,0.4579D0,0.5934D0,0.7967D0,1.D0,
+     + 0.6925D0,1.D0,3*0.D0,0.5D0,1.D0,0.5D0,1.D0,
+     + 0.3941D0,0.7197D0,0.9470D0,0.9930D0,1.D0,                     ! eta
+     + 0.4285D0,0.7193D0,0.9487D0,0.9750D0,0.9973D0,0.9999D0,1.D0,   ! eta'
+     + 3*1.D0,                                                       ! rho-mesons
+     + 0.6670D0,1.D0,                                                ! K*+
+     + 0.4894D0,0.8317D0,0.9850D0,0.9981D0,0.9994D0,0.9997D0,1.D0,   ! phi(1020)
+     + 2*0.D0,                                                       ! (empty)      
+     + 0.6670D0,1.D0,                                                ! K*-
+     + 0.6670D0,1.D0,                                                ! K*0
+     + 0.6670D0,1.D0,                                                ! K*0 bar
+     + 0.8940D0,0.9830D0,1.D0,                                       ! omega
+     + 4*0.D0,                                                       ! (empty)
+     + 0.5160D0,5*1.D0,0.6410D0,2*1.D0,0.67D0,1.D0,0.33D0,2*1.D0,
+     + 0.88D0,0.94D0,1.D0,0.88D0,0.94D0,1.D0,0.88D0,0.94D0,1.D0,0.33D0,
+     + 1.D0,0.67D0,1.D0,0.678D0,0.914D0,1.D0,0.217D0,0.398D0,0.506D0,
+     + 0.595D0,0.684D0,0.768D0,0.852D0,0.923D0,0.976D0,1.D0,0.217D0,
+     + 0.398D0,0.506D0,0.595D0,0.684D0,0.768D0,0.852D0,0.923D0,0.976D0,
+     + 1.D0,0.2490D0,0.4604D0,0.5338D0,0.5703D0,0.7440D0,0.7840D0,
+     + 0.8460D0,0.8880D0,0.9230D0,0.9650D0,1.D0,0.2490D0,0.4604D0,
+     + 0.5338D0,0.5703D0,0.7440D0,0.7840D0,0.8460D0,0.8880D0,0.9230D0,
+     + 0.9650D0,1.D0,0.1666D0,0.3332D0,0.4998D0,0.6664D0,0.8330D0,1.D0,
+     + 0.6770D0,0.9840D0,1.D0,
+     + 0.6770D0,0.9840D0,1.D0,0.6190D0,1.D0,0.6190D0,1.D0,0.0602D0,
+     + 0.1203D0,1.D0,3*1.D0,0.06D0,0.08D0,0.14D0,0.16D0,0.73D0,0.855D0,
+     + 0.98D0,1.D0,0.08D0,0.16D0,0.92D0,1.D0,0.2335D0,0.4283D0,0.6446D0,
+     + 0.7099D0,0.8080D0,0.9080D0,0.9380D0,0.9540D0,0.9840D0,1.D0,
+     + 3*1.D0,0.5D0,1.D0,0.5D0,1.D0,0.08D0,0.16D0,0.92D0,1.D0,0.942D0,
+     + 1.D0,0.942D0,1.D0,0.2493D0,0.4061D0,0.5602D0,0.6860D0,0.7608D0,
+     + 0.8305D0,0.8818D0,0.9277D0,0.9691D0,1.D0,0.2493D0,0.4061D0,
+     + 0.5602D0,0.6860D0,0.7608D0,0.8305D0,0.8818D0,0.9277D0,0.9691D0,
+     + 1.D0,
+     & 0.466D0,0.7D0,0.899D0,1.D0,0.466D0,0.7D0,0.899D0,1.D0, ! N1440+-
+     & 0.3334D0,0.5D0,0.6334D0,0.7634D0,0.8734D0,0.9394D0,1.D0, ! N1710+
+     & 0.3334D0,0.5D0,0.6334D0,0.7634D0,0.8734D0,0.9394D0,1.D0, ! N1710-
+     & 0.5D0, 1.D0, 0.5D0, 1.D0, 0.5D0, 1.0D0, ! pi1+-0      
+     & 0.6666D0,1.D0, 0.6666D0,1.D0,0.6666D0,1.D0,0.6666D0,1.D0/ ! K0*
+      DATA AM / 0.0,2*0.511D-3, 2*0.10566, 0.13497, 2*0.13957,
+     +   2*0.49368, 2*0.49761, 0.93827, 0.93957, 4*0.0,0.93827,
+     +   0.93957, 2*0.49761, 0.54785,0.95766,2*0.76690,0.76850,
+     +   2*0.89166D0,2*0.89600,0.78265,1.01946D0,1.18937D0,1.19264D0,
+     +   1.19745,1.31486,1.32171,1.11568,1.23100,1.23500,
+     +   1.23400,1.23300,1.38280,1.38370,1.38720,
+     +   1.53180,1.53500,1.67245,0.,1.44,1.44,1.71,1.71,4*0.0,
+     +   2*1.86926,1.30,1.30,1.30,4*1.430, 3*0.0,      
+     +   2*1.86484,2.9803,2*1.9685,2*2.1123,2*2.01027,2*2.00697,
+     +   0.0,3.09692,2.45402,2.4529,2.45376,2.4679,2.4710,
+     +   2.28646, 2*1.777, 2*0.0, 2.5184,2.5175, 2.5180, 2.6466,
+     +   2.6461, 2.6975 /
+      DATA AM2 /0.0,2*2.61121D-07,2*0.011164,0.018217,0.019480,
+     + 0.019480,0.243720,0.243720,0.247616,0.247616,0.880351,
+     + 0.882792,0.000000,0.000000,0.000000,0.000000,0.880351,
+     + 0.882792,0.247616,0.247616,0.300140,0.917113,0.588136,
+     + 0.588136,0.590592,0.795058,0.795058,0.802816,0.802816,
+     + 0.612541,1.039299,1.414601,1.422390,1.433887,1.728857,
+     + 1.746917,1.244742,1.515361,1.525225,1.522765,1.520289,
+     + 1.912136,1.914626,1.924324,2.346411,2.356225,2.797022,
+     + 0.,2.0736,2.0736,2.9241,2.9241,4*0.0, 2*3.49414,
+     + 1.690, 1.690, 1.690, 4*2.0449, 3*0.0, 2*3.477628, 8.882188,       
+     + 2*3.8750,2*4.4618,2*4.041186,2*4.027928, 0.0, 9.590914, 6.022214,
+     + 6.016718, 6.020938,6.09053, 6.105841, 5.227899, 2*3.158, 2*0.0,
+     + 6.342339, 6.337806, 6.340323,7.004492, 7.001845, 7.276506/
+      DATA AW /24*0.D0,0.022231D0,0.022231D0,0.022231D0,0.002581D0,
+     &     0.002581D0,0.D0,0.D0,7.20801D-05,1.81476D-05,6*0.D0,
+     &     0.013689D0,0.013689D0,0.013689D0,0.013689D0,0.001296D0,
+     &     0.001295D0,0.00155D0,8.281D-05,9.801D-05,0.D0,0.D0,0.09D0,
+     &     0.01D0,0.09D0,0.01D0,6*0.D0,0.1D0,0.1D0,0.1D0,4*0.27D0,
+     &     32*0.D0/
+      DATA AW2 /24*0.D0,0.022231D0,0.022231D0,0.022231D0,0.002581D0,
+     &     0.002581D0,0.D0,0.D0,7.20801D-05,1.81476D-05,6*0.D0,
+     &     0.013689D0,0.013689D0,0.013689D0,0.013689D0,0.001296D0,
+     &     0.001295D0,0.00155D0,8.281D-05,9.801D-05,0.D0,0.D0,0.09D0,
+     &     0.01D0,0.09D0,0.01D0,6*0.D0,0.01D0,0.01D0,0.01D0,4*0.0729D0,
+     &     32*0.D0/
+c     IDB is the index to the branching ratios (CBR) and decay channels (KDEC).
+c     always indicates the first decay channel
+      DATA IDB /
+     +     0,0,0,1,2,                                        ! leptons
+     +     3,5,6,7,13,19,25,                                 ! pions and kaons
+     +     8*0,30,32,34,39,46,47,48,49,60,62,64,66,51, !69,       ! meson resonances
+     +     73,75,76,77,78,79,81,82,84,86,87,90,93,96,98,100, ! baryons : Sibyll 2.1
+     +     0,224,228,232,239,4*0,                            ! Nucleon resonaces
+     +     103,113,246,248,250, 252,254,256,258,3*0,      
+     +     123,134,145,204,214,200,202,151,154,157,159,0,
+     +     161,164,165,166,167,175,179,4*0,189,190,191,192,194,196 /
+c     KDEC contains decay channels, format is [ND, MAT, LL(1:4)]
+c     where ND is the number of particles in the final state (max 4)
+C     MAT is 0, 1 for semi-leptonic (weak decay) or not
+c     (adds primitive matrix element)
+c     LL(1:4) are the particle ids of the final state particles
+      DATA KDEC /
+     + 3,1,15,2,18,0,3,1,16,3,17,0,2,0,1,1,8*0,2,0,4,17,0,0,2,0,5,18,0,
+     + 0,2,0,4,17,0,0,2,0,7,6,0,0,3,0,7,7,8,0,3,0,7,6,6,0,3,1,17,4,6,0,
+     + 3,1,15,2,6,0,2,0,5,18,0,0,2,0,8,6,0,0,3,0,8,8,7,0,3,0,8,6,6,0,3,
+     + 1,18,5,6,0,3,1,16,3,6,0,3,0,6,6,6,0,3,0,7,8,6,0,3,1,18,5,7,0,3,
+     + 1,17,4,8,0,3,1,16,3,7,0,3,1,15,2,8,0,2,0,7,8,0,0,2,0,6,6,20*0,1,
+     + 0,11,3*0,1,0,12,0,0,0,1,0,11,0,0,0,1,0,12,0,0,0,2,0,1,1,0,0,3,0,
+     + 6,6,6,0,3,0,7,8,6,0,3,0,1,7,8,0,3,0,1,3,2,0,
+     + 3,0,7,8,23,0, 3,0,6,6,23,0, 2,0,1,27,0,0, 2,0,1,32,0,0,           ! eta'
+     + 2,0,1,1,0,0, 3,0,6,6,6,0, 3,0,1,4,5,0,                            ! eta'
+     + 2,0,7,6,0,0,                                                      ! rho+
+     + 2,0,8,6,0,0,                                                      ! rho-
+     + 2,0,7,8,0,0,                                                      ! rho0
+     + 2,0,21,7,0,0, 2,0,9,6,0,0,                                        ! K*+
+     + 2,0,9,10,0,0, 2,0,11,12,0,0, 3,0,7,8,6,0, 2,0,1,23,0,0,           ! phi(1020)
+     + 2,0,1,6,0,0, 2,0,2,3,0,0, 2,0,4,5,0,0,                            ! phi(1020)                  
+     + 12*0,
+     + 2,0,22,8,0,0, 2,0,10,6,0,0,                                       ! K*-
+     + 2,0,9,8,0,0, 2,0,21,6,0,0,                                        ! K*0
+     + 2,0,10,7,0,0, 2,0,22,6,0,0,                                       ! K*0 bar
+     + 3,0,7,8,6,0, 2,0,1,6,0,0, 2,0,7,8,0,0,                            ! omega
+     + 24*0,
+     + 2,0,13,6,0,0,2,0,14,7,0,0,2,0,39,1,0,0,2,                         ! baryons
+     + 0,14,8,0,0,2,0,39,6,0,0,2,0,39,8,0,0,2,0,13,8,0,0,2,0,
+     + 14,6,0,0,2,0,13,7,0,0,2,0,13,6,
+     + 0,0,2,0,14,7,0,0,2,0,13,8,0,0,2,0,14,6,0,0,2,0,14,8,0,0,2,0,
+     + 39,7,0,0,2,0,34,6,0,0,2,0,35,7,0,0,2,0,39,6,0,0,2,0,34,8,0,0,
+     + 2,0,36,7,0,0,2,0,39,8,0,0,2,
+     + 0,35,8,0,0,2,0,36,6,0,0,2,0,37,6,0,0,2,0,38,7,0,0,2,0,
+     + 37,8,0,0,2,0,38,6,0,0,2,0,39,10,0,0,2,0,37,8,0,0,2,0,38,6,0,0,
+     + 3,0,22,7,6,0,3,0,22,9,22,0,2,0,22,7,0,0,3,1,2,15,22,0,3,1,4,17,
+     + 22,0,3,1,2,15,31,0,3,1,4,17,31,0,2,0,31,25,0,0,3,0,33,7,6,0,
+     + 3,0,10,7,7,0,
+     + 3,0,21,8,6,0,3,0,21,10,21,0,2,0,21,8,0,0,3,1,3,16,21,0,3,1,5,18,
+     + 21,0,3,1,3,16,30,0,3,1,5,18,30,0,2,0,30,26,0,0,3,0,33,8,6,0,
+     + 3,0,9,8,8,0,
+     + 2,0,29,7,0,0,2,0,31,6,0,0,2,0,22,6,0,0,2,0,10,7,0,0,2,0,31,27,0,
+     + 0,2,0,30,27,0,0,2,0,29,25,0,0,3,1,2,15,10,0,3,1,2,15,29,0,
+     + 3,1,4,17,10,0,3,1,4,17,29,0,
+     + 2,0,28,8,0,0,2,0,30,6,0,0,2,0,21,6,0,0,2,0,9,8,0,0,2,0,30,27,0,
+     + 0,2,0,31,27,0,0,2,0,28,26,0,0,3,1,3,16,9,0,3,1,3,16,28,0,
+     + 3,1,5,18,9,0,3,1,5,18,28,0,
+     + 3,0,6,21,22,0,3,0,6,9,10,0,3,0,23,6,6,0,3,0,23,7,8,0,3,0,24,6,6,
+     + 0,3,0,24,7,8,0,
+     + 2,0,71,7,0,0,2,0,59,6,0,0,2,0,59,1,0,0,
+     + 2,0,72,8,0,0,2,0,60,6,0,0,2,0,60,1,0,0,
+     + 2,0,71,6,0,0,2,0,71,1,0,0,2,0,72,6,0,0,2,0,72,1,0,0,
+     + 2,0,2,3,0,0,2,0,4,5,0,0,3,0,6,7,8,0,
+     + 2,0,89,7,0,0,2,0,89,6,0,0,2,0,89,8,0,0,
+     + 3,1,2,15,22,0,3,1,2,15,33,0,3,1,4,17,22,0,3,1,4,17,33,0,2,0,7,22,
+     + 0,0,2,0,9,22,0,0,2,0,7,33,0,0,2,0,9,33,0,0,
+     + 3,1,2,15,10,0,3,1,4,17,10,0,2,0,7,10,0,0,2,0,9,10,0,0,
+     + 3,0,7,10,13,0,3,0,7,22,14,0,3,0,7,8,13,0,3,0,9,10,13,0,3,0,9,22,
+     + 14,0,3,0,22,8,40,0,3,1,2,15,39,0,3,1,2,15,14,0,3,1,4,17,39,0,3,
+     + 1,4,17,14,0,
+     + 2,0,89,7,0,0,2,0,89,6,0,0,2,0,89,8,0,0,
+     + 2,0,87,6,0,0,2,0,87,1,0,0,2,0,88,6,0,0,2,0,88,1,0,0,
+     + 3,1,2,15,10,0,3,1,4,17,10,0,2,0,7,10,0,0,2,0,9,10,0,0 ,
+     + 2,0,74,1,0,0 ,2,0,74,6,0,0 , 2,0,75,1,0,0 ,2,0,75,6,0,0, !C=1,S=1 mesons
+     + 2,0,23,25,0,0, 4,0,9,10,7,6, 3,0,9,10,7,0, 2,0,33,7,0,0, 
+     + 3,1,23,2,15,0, 3,1,33,2,15,0, 2,0,23,7,0,0, 4,0,12,10,7,7,
+     + 2,0,9,12,0,0, 4,0,7,8,7,8, 2,0,23,26,0,0, 4,0,10,9,8,6, !  | D*(_s)
+     + 3,0,10,9,8,0, 2,0,33,8,0,0, 3,1,23,3,16,0, 3,1,33,3,16,0,! v
+     + 2,0,23,8,0,0, 4,0,12,9,8,8, 2,0,10,12,0,0, 4,0,7,8,7,8, ! ----
+     & 2,0,14,7,0,0, 2,0,13,6,0,0, 3,0,14,7,6,0, 3,0,13,7,8,0, ! N-res
+     & 2,0,13,8,0,0, 2,0,14,6,0,0, 3,0,13,6,8,0, 3,0,14,7,8,0, 
+     & 3,0,14,7,6,0, 3,0,13,7,8,0, 2,0,14,7,0,0, 2,0,13,32,0,0,  
+     & 2,0,39,9,0,0, 2,0,13,6,0,0, 2,0,13,23,0,0,
+     & 3,0,13,8,6,0, 3,0,14,7,8,0, 2,0,13,8,0,0, 2,0,14,32,0,0,  
+     & 2,0,39,21,0,0, 2,0,14,6,0,0, 2,0,14,23,0,0, ! ---
+     & 2,0,25,8,0,0, 2,0,26,7,0,0,    ! pi10 |  
+     & 2,0,25,6,0,0, 2,0,27,7,0,0,    !  +   v
+     & 2,0,27,8,0,0, 2,0,26,6,0,0,    !  -  ---
+     & 2,0,21,7,0,0, 2,0,9,6,0,0, 2,0,22,8,0,0, 2,0,10,6,0,0,    ! k0* |  
+     & 2,0,9,8,0,0, 2,0,21,6,0,0, 2,0,10,7,0,0, 2,0,22,6,0,0/ !        v
+      DATA LBARP/1,3,2,5,4,6,8,7,10,9,11,12,-13,-14,16,15,18,17,13,14,
+     +  22,21,23,24,26,25,27,29,28,31,30,32,33,-34,-35,-36,-37,-38,-39,
+     +  -40,-41,-42,-43,-44,-45,-46,-47,-48,-49,0,-51,-52,-53,-54,4*0,
+     +  60,59,61,63,62,65,64,67,66,3*0,72,71,
+     +  73,75,74,77,76,79,78,81,80,0,83,-84,-85,-86,-87,-88,-89,
+     +  91,90,93,92,-94,-95,-96,-97,-98,-99 /
+      DATA ICHP /0,1,-1,1,-1,0,1,-1,1,-1,0,0,1,0,4*0,-1,0,4*0, !24
+     + 1,-1,0,1,-1,4*0,1,0,-1,0,-1,0,2,1,0,-1,1,0,-1,0,-1,-1,  !49
+     + 0,1,0,1,0,4*0,1,-1,0,1,-1,1,-1,0,0,3*0,                 !70
+     + 0,0,0,1,-1,1,-1,1,-1,0,0,0,                             !82
+     + 0,2,1,0,1,0,1,1,-1,2*0,2,1,0,1,0,0 / ! charmed baryons + tau
+
+      DATA ISTR /8*0,-1,+1,-1,-1,8*0,-1,+1,5*0,-1,+1,-1,+1,2*0, ! mesons
+     +     3*1,2*2,1,4*0,3*1,2*2,3,0,4*0, ! 54
+     +     4*0,2*0,3*0,-1,1,-1,1,3*0,2*0,0,-1,1,-1,1,2*0,2*0,0,0, ! 83
+     +     3*0,2*1,0,4*0,3*0,2*1,2 / ! charmed baryons
+      DATA IBAR /12*0,2*1,4*0,2*-1,13*0,16*1,0,4*1,4*0,
+     +     2*0,10*0,2*0,0,4*0,2*0,2*0,0,0,6*1,4*0,6*1 /
+      DATA ICHM /58*0,1,-1,10*0,1,-1,0,1,-1,+1,-1,1,-1,1,-1,0,0,
+     +     6*1,4*0,6*1/
+      DATA NAMP /
+     +     '     ','gam   ','e+','e-','mu+','mu-','pi0',
+     +     'pi+','pi-','k+', 'k-', 'k0l','k0s',
+     +     'p', 'n', 'nue', 'nueb', 'num', 'numb', 'pbar', 'nbar',
+     +     'k0', 'k0b', 'eta', 'etap', 'rho+', 'rho-','rho0',
+     +     'k*+','k*-','k*0','k*0b','omeg', 'phi', 'SIG+', 'SIG0',
+     +     'SIG-','XI0','XI-','LAM','DELT++','DELT+','DELT0','DELT-',
+     +     'SIG*+','SIG*0','SIG*-', 'XI*0', 'XI*-', 'OME-',
+     +     '     ','N144_+','N144_0','N171_+','N171_0',
+     +     4*'     ', 'D+', 'D-','pi1_0 ','pi1_+ ','pi1_- ',
+     +     'k0*_+','k0*_-','k0*_0','k0*_0b',
+     +     3*'     ', 'D0', 'D0b', 'eta_c', 
+     +     'D_s+','D_s-','D*_s+','D*_s-','D*+', 'D*-', 'D*0', 'D*0b',
+     +     '     ', 'J/psi',
+     +     'SIGc++', 'SIGc+', 'SIGc0','XI_c+','XI_c0','LAM_c+',
+     +     'tau+  ','tau-  ','nut   ','nutb  ',
+     +     'SIc*++','SIGc*+','SIGc*0', 'XI_c*+', 'XI_c*0',
+     +     'OME_c0'  /
+      END
+C->
+C=======================================================================
+
+      SUBROUTINE DECPR (LUN)
+
+C-----------------------------------------------------------------------
+C...Print on unit LUN the list of particles and decay channels
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      DOUBLE PRECISION AW,AW2
+      COMMON /S_WIDTH1/ AW(99), AW2(99)
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      DIMENSION LL(4)
+      SAVE
+      
+ 100  FORMAT(/,1X,75('-'),/,28X,'SIBYLL DECAY TABLE')
+      WRITE(LUN,100)
+ 101  FORMAT(1X,75('-'),/,2X,'PID',1X,'Particle',6X,'Mass',9X,'Width',/,
+     +     4X,'Channel',1X,'Br.frac.',1X,'Nf',2X,'MAT',1X,
+     +     'Final Particles',/,1X,75('-'))
+      WRITE(LUN,101)
+      DO L=1,99
+         IF(MOD(L,10).EQ.0)WRITE(LUN,101)
+         IDC = IDB(L)-1
+         NC = 0
+         WRITE (LUN,10) L,NAMP(L), AM(L), AW(L)
+         IF(IDC+1 .GT. 0)  THEN
+            CB = 0.D0
+110         IDC=IDC+1
+            NC = NC+1
+            CBOLD = CB
+            CB = CBR(IDC)
+            BR = CB-CBOLD
+            KD = 6*(IDC-1)+1
+            ND = KDEC(KD)
+            MAT= KDEC(KD+1)
+            DO J=1,ND
+               LL(J) = KDEC(KD+1+J)
+            ENDDO
+            WRITE (LUN,15) NC,BR,ND,MAT, (NAMP(LL(J)),J=1,ND)
+            IF (CB .LT. 1.D0)  GOTO 110
+         ENDIF
+      ENDDO
+      RETURN
+10    FORMAT(2X,I3,2X,A6,3X,F10.4,3X,F10.4)
+15    FORMAT(5X,I2,2X,F9.4,I4,I4,2X,3(A6,2X))
+      END
+
+C=======================================================================
+
+      SUBROUTINE DEC_DEBUG (L,P0, ND, LL, PD)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      DIMENSION P0(5), LL(10), PD(10,5)
+      SAVE
+
+      ETOT = 0.D0
+      DO J=1,ND
+         ETOT = ETOT + PD(J,4)
+      ENDDO
+      WRITE(*,*)  NAMP(IABS(L)),' -> ', (NAMP(IABS(LL(J))),J=1,ND)
+      WRITE(*,*)  ' Ei, Ef = ', P0(4), ETOT, ' L = ', L
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE DEC_INI
+
+C-----------------------------------------------------------------------
+C     decay initialization routine
+C     sets which particles should decay and wich should be stable
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      SAVE
+      
+      if ( ndebug .gt. 0 ) then
+        write(lun,*)' -----------------------------------------'
+        write(lun,*)' SIBYLL DEC_INI: setting particle decays!'
+        write(lun,*)'  to be used in stand-alone SIBYLL only ! '
+        write(lun,*)' -----------------------------------------'
+      endif
+      
+C...  Definition of stable particles
+      DO J=4,12
+         IDB(J) = -abs(IDB(J))
+      ENDDO
+c----------------------------------------------------------
+c     if the folowing is commented out then all particles
+c     except leptons, protons and neutrons are UNSTABLE
+c----------------------------------------------------------
+c     all particles with t<0.3e-10s are considered unstable
+c     i.e. all the mesons from K0s onwards(K0l is stable)
+c----------------------------------------------------------
+C     K0s stable
+      if (ndebug .gt. 0 ) write(lun,*)' making K0s stable..'
+      IDB(12) = -abs(IDB(12))
+
+C     Lambda/Anti-lambda stable
+      if (ndebug .gt. 0 ) write(lun,*)' making LAMBDA stable..'
+      IDB(39) = -abs(IDB(39))
+
+c     Sigmas stable
+      if (ndebug .gt. 0 ) write(lun,*)' making SIGMAs stable..'
+      do i=34,36
+         IDB(i) = -abs(IDB(i))
+      enddo
+      IDB(35) = -abs(IDB(35))
+C     Eta stable
+cfr   in reasonable contex eta is never stable !
+      
+cdh  initializing the pythia routines is done in corsika/SIBINI
+c     IF(IPAR(44).eq.1)THEN
+c     use pythia decay routine
+c        if (ndebug .gt. 0 ) write(LUN,*) ' using PYTHIA decay routine...'
+c        CALL PYDEC_INI
+c     endif
+
+      if (ndebug .gt. 0 ) 
+     *       write(lun,*)' ------------------------------------------'
+      end
+C=======================================================================
+
+      SUBROUTINE STRING_FRAG_4FLV
+     +     (E0,IFL1,IFL2,PX1,PY1,PX2,PY2,IFBAD,IFQRK)
+
+C-----------------------------------------------------------------------
+C.  This routine fragments a string of energy E0
+C.  the ends of the strings  have flavors IFL1 and IFL2
+C.  the particles produced are in the  jet-jet frame
+C.  with IFL1 going in the +z direction
+C.     E0 = total energy in jet-jet system
+C.  This version consider also a primordial pT attached
+C.  to the ends of the string PX1,PY1,  PX2,PY2
+C.  OUTPUT:  IFBAD =1  kinematically impossible decay
+c       2010.03.11 ifqrk - leading quark flag
+c       1 in valence quark, 0 in others
+c
+c      Modified Nov. 91.  RSF and TSS to fragment symmetrically
+c      ie forward and backward are fragmented as leading.
+c      Change- Dec. 92  RSF.  call to ptdis moved- to use flavor
+c      of NEW quark in fragmentation.
+c
+c     includes 4 FLAVORS \FR'13
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      DOUBLE PRECISION ZLIST
+      COMMON /S_ZLIST/ ZLIST(8000)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+      DOUBLE PRECISION FAin, FB0in
+      COMMON /S_CZDIS/ FAin, FB0in
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      INTEGER LRNK
+      COMMON /SIB_RNK/ LRNK(8000)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+      DIMENSION WW(2,2), PTOT(4), PX(3),PY(3),IFL(3),ILEAD(2)
+      DIMENSION LPOINT(8000), PMQ(3), IRNK(2), LRES(6:99)
+      LOGICAL LRANK
+      SAVE
+      DATA LRANK/.true./
+
+      DATA (LRES(I),I=6, 39)
+     &     /27,25,26,28,29,9,9,41,42,19*0,44,45,46,47,48,39/
+      DATA (LRES(I),I=40, 49) /40,41,42,43,44,45,46,47,48,49/
+      DATA (LRES(I),I=50, 83) 
+     &     /0,51,52,53,54,4*0,78,79,10*0,71,72,73,76,77,76,
+     &     77,78,79,80,81,0,83/
+      DATA (LRES(I),I=84, 99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+      
+      IF(Ndebug.gt.3) THEN
+        WRITE(LUN,*)
+     &        ' STRING_FRAG_4FLV: called with ',
+     &        '(E0,IFL1,IFL2,PX1,PY1,PX2,PY2,IVAL)',
+     &        E0,IFL1,IFL2,PX1,PY1,PX2,PY2,IFQRK
+        WRITE(LUN,*)' STRING_FRAG_4FLV: NP before fragmentation:',NP
+      ENDIF
+
+c...  remember initial values
+c     strange fraction
+      par2_def = PAR(2)
+c     vector model
+      IPAR11_def = IPAR(11)
+c     vector fraction
+      PAR5_def = PAR(5)      
+c     charm fraction
+      PAR24_def = PAR(24)
+c     popcorn fraction
+      PAR8_def = PAR(8)
+
+C...initialise
+      NTRY = 0
+      IFBAD = 0
+ 200  NTRY = NTRY + 1
+
+c     reset parameters after rejection
+      PAR(2) = PAR2_def
+      PAR(5) = PAR5_def
+      PAR(24) = PAR24_def
+      IPAR(11) = IPAR11_def
+      PAR(8) = PAR8_def
+
+      IF (NTRY .GT. 50)  THEN
+         IFBAD = 1
+         RETURN
+      ENDIF
+      I = NP
+      DO K=1,2
+         WW(K,1) = 1.D0
+         WW(K,2) = 0.D0
+         IRNK(K) = 0
+      ENDDO
+      PX(1) = PX1
+      PY(1) = PY1
+      PX(2) = PX2
+      PY(2) = PY2
+      PX(3) = 0.D0
+      PY(3) = 0.D0
+      PTOT (1) = PX1+PX2
+      PTOT (2) = PY1+PY2
+      PTOT (3) = 0.D0
+      PTOT (4) = E0
+c     turn on/off splitting of leading diquark
+c     (1: no splitting, 0: diq may be split, producing leading meson)
+      IFL(1) = IFL1+ISIGN(100,IFL1)*MIN(1,IABS(IFL1)/10)*IPAR(90)
+      IFL(2) = IFL2+ISIGN(100,IFL2)*MIN(1,IABS(IFL2)/10)*IPAR(90)     
+      PMQ(1) = QMASS(IFL(1))
+      PMQ(2) = QMASS(IFL(2))
+
+      ILEAD(1) = 0
+      ILEAD(2) = 0
+      IBLEAD = 0
+      IF(IABS(IFQRK).eq.1) THEN
+         ILEAD(1) = 1
+         ILEAD(2) = 1
+      ENDIF
+c     switch leading baryon fragmentation function on/off
+      IF(IPAR(20).eq.0) GOTO 300
+c     set flags for leading baryon
+C
+C      SET FLAG FOR GENERATION OF LEADING PARTICLES. 
+C      "AND" IS FOR PPBAR ( DIQUARK AT BOTH ENDS)
+C      "OR" IS FOR PP, PPI, ( DIQUARK AT ONE END.)
+C
+      IF (IABS(IFL1) .GT. 10 .AND. IABS(IFL2) .GT. 10)  THEN
+         IBLEAD = 2
+         I = I+1
+         JT = INT(1.5D0+S_RNDM(0))
+         GOTO 350
+      ENDIF         
+      IF (IABS(IFL1) .GT. 10 .OR. IABS(IFL2) .GT. 10)  THEN
+         IBLEAD = 1
+         I = I+1
+         JT = 2
+         IF (IABS(IFL2) .GT. 10) JT = 1
+         GOTO 350
+      ENDIF         
+
+C...produce new particle: side, pT
+ 300  continue
+      I=I+1
+      if(i.gt.8000) then
+        write(LUN,'(1x,a,i8)') 
+     &        ' STRING_FRAG_4FLV: no space left in S_PLIST:',I
+        CALL SIB_REJECT('STRING_FRAG_4FLV')
+      endif
+      IF (IBLEAD .GT. 0)  THEN
+         JT = 3 - JT   
+         GO TO 350              
+      ENDIF
+c     
+c 349  continue
+c     choose side (1 or 2)
+      JT=INT(1.5D0+S_RNDM(0))
+c     set 'other' side
+ 350  JR=3-JT
+c     remember side particle was produced
+      LPOINT(I) = JT
+c     increase rank counter
+      IRNK(JT) = ISIGN(ABS(IRNK(JT))+1,1-JT)
+c     set particle rank
+      LRNK(I) = IRNK(JT)
+
+      nporig(I)= Ipflag*2 + KINT
+      niorig(I)= iiflag
+      IF(ILEAD(JT).eq.1) nporig(I)= -1 * nporig(I)
+      nforig(I) = 0
+
+ 555  CONTINUE
+c
+c.... CHARM config
+c
+      charmPARdef=PAR(24)
+      IF(IPAR(15).lt.9)THEN
+c     no s->c
+         PAR(24) = 0.D0
+         IF (IFQRK.EQ.1) THEN
+c     ifqrk = 1 (valence quark attatched) 
+            IF(IPAR(15).ge.1) THEN
+c     enforce s->c at string end
+               IF(ILEAD(JT).eq.1) PAR(24)=charmPARdef
+c     produce charm in all strings
+               IF(IPAR(15).eq.8) PAR(24)=charmPARdef
+            ELSE
+c     compatibility to broken version
+               PAR(24)=charmPARdef
+            ENDIF
+         ELSE
+c     no val. quark at string end or diff
+            PAR(24)=charmPARdef
+         ENDIF
+      ENDIF
+c
+C.... Vector meson config
+c
+c     increase vec.meson ratio for leading particle in str. diff.
+      IF(IFQRK.eq.-1)THEN
+         IF(IPAR(66).eq.1)THEN
+            IF(ILEAD(JT).EQ.1)THEN
+              IF(IBAR(IABS(kb)).eq.0.or.IPAR(70).eq.1) PAR(5) = PAR(113)
+           ENDIF
+        ELSEIF(IPAR(66).eq.2)THEN
+            IF(IBAR(IABS(kb)).eq.0.or.IPAR(70).eq.1) PAR(5) = PAR(113)
+
+        ELSEIF(IPAR(66).eq.3)THEN
+c     increase vector meson rate for meson beam
+c     on beam side (rank+) only!            
+            IF(ILEAD(JT).EQ.1)THEN               
+               IF(IBAR(IABS(kb)).eq.0.and.IRNK(JT).gt.0)
+     &              PAR(5) = PAR(113)
+c     always incr. vector rate for diff. strings independent of beam type
+               IF(IPAR(70).eq.1) PAR(5) = PAR(113)               
+            ENDIF         
+            
+         ENDIF           
+      endif
+      
+c...  switch off for proton beam
+      IF(IPAR(31).eq.1)then
+c         print*,'ipar11,ipar11def,1-kb/13,kb',IPAR(11),ipar11_def,
+c     +        max((1-iabs(kb)/13),0),kb
+         IPAR(11) = IPAR(11)*max((1-iabs(kb)/13),0) ! meson beam only
+      endif
+c     increase vec.meson ratio for leading quarks
+      IF(IABS(IFQRK).eq.1)THEN
+         IF(IPAR(11).le.-5.and.IPAR(11).ge.-7
+     &        .and.ilead(jt).eq.1)
+     &        PAR(5) = 9.D0
+         
+c     increase vec.meson ratio for diff.
+         IF(IFQRK.eq.-1.and.IPAR(11).le.-4.and.IPAR(11).ge.-7)
+     &        PAR(5) = 9.D0
+
+c     increase vec.meson ratio for leading particle in str. diff. (lvec16)
+         IF(IFQRK.eq.-1.and.IPAR(11).le.-11.and.ILEAD(JT).EQ.1)
+     &        PAR(5) = 99.D0
+      ENDIF
+
+c...  suppress leading charm for pion and kaon beams
+      IF(IPAR(15).eq.11)then
+         IF((1-IABS(KB)/13)*ILEAD(JT).gt.0) PAR(24)=0.D0
+      ENDIF
+
+C...  suppress rank-1 baryon through popcorn
+      IF(IBLEAD .GT. 0.and.abs(ifl(jt)).gt.10
+     &     .and.abs(ifl(3)).lt.10) PAR(8)=PAR(63)*PAR(8)
+
+C...  leading strange/charm
+      IF(ILEAD(JT).eq.1.and.IPAR(39).gt.0) PAR(2) = PAR(65)
+      
+c     scale valence string end charm for assoc. prod.      
+      IF(IPAR(41).eq.1)THEN
+         IF(ILEAD(JT).eq.1.and.IFQRK.eq.1) PAR(24) = PAR(71)*PAR(24)
+      ENDIF
+
+c     suppress direct pi0 for meson projectiles
+c     rate set by par( 137 )
+      ipar82_def = IPAR(82)
+c     skip if baryon projectile or minijet (i.e no flavor attached)
+      if(ibar(iabs(kb)).ne.0.or.ifqrk.eq.0) IPAR(82) = 0
+
+c     suppress direct omega for meson projectiles
+c     rate set by par( 138 )
+      ipar83_def = IPAR(83)
+c     skip if baryon projectile or central string
+      if(ibar(iabs(kb)).ne.0.or.(ifqrk.gt.0.and.IPAR(83).eq.2))
+     &     IPAR(83) = 0
+
+c     change rho0 / omega ratio
+      PAR143_def = PAR(143)
+      IF(IPAR(81).eq.1)THEN
+c     change if beam is meson
+         if(ibar(iabs(kb)).eq.0) PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.2)THEN         
+c     change if beam is meson, on meson side only         
+         if(ibar(iabs(kb)).eq.0.and.IRNK(JT).gt.0) PAR(143) = PAR(144) 
+      ELSEIF(IPAR(81).eq.3)THEN         
+c     change if beam is meson, on meson side only, for leading only
+         if(ibar(iabs(kb)).eq.0.and.ISIGN(ILEAD(JT),IRNK(JT)).eq.1)
+     &        PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.4)THEN         
+c     change if beam is meson, on meson side only, for diff. strings only
+         if(ibar(iabs(kb)).eq.0.and.IFQRK.eq.-1)
+     &        PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.5)THEN         
+c     change if beam is meson, for leading on meson side only and
+c     for diff. strings only
+         if(ibar(iabs(kb)).eq.0.and.IFQRK.eq.-1.and.
+     &        ISIGN(ILEAD(JT),IRNK(JT)).eq.1) PAR(143) = PAR(144)
+      ENDIF
+      
+C...particle ID and pt.
+
+      CALL SIB_I4FLAV (IFL(JT), 0, IRNK(JT), IFL(3), LLIST(I))
+
+c     reset strange fraction
+      PAR(2) = PAR2_def
+c     reset vec.meson production
+      PAR(5) = PAR5_def
+c     reset charm fraction
+      PAR(24) = PAR24_def
+c     reset popcorn
+      PAR(8) = par8_def
+
+c     reset pi0 suppr.
+      IPAR(82) = ipar82_def
+
+c     reset omega suppr.
+      IPAR(83) = ipar83_def
+
+c     reset rho0 / omega ratio
+      PAR(143) = PAR143_def
+      
+c     reject iso 0 spin 1 for meson projectiles
+      IF(IBAR(IABS(KB)).eq.0)THEN
+c     reject leading spin1,isospin singlett
+         IF(ILEAD(JT).EQ.1.and.LLIST(I).eq.32.and.
+     +        PAR(136).gt.S_RNDM(I)) LLIST(I) = 27
+      endif
+      
+c     replace leading or all pi0 with rho0
+      IF(IFQRK.eq.-1) THEN 
+         IF(IPAR(67).eq.1)THEN
+            IF(ILEAD(JT).EQ.1) THEN 
+c     replace leading pi0 with rho0
+               IF(ABS(LLIST(I)).EQ.6) LLIST(I) = 27*isign(1,LLIST(I))  
+            ENDIF
+         ELSEIF(IPAR(67).eq.2)THEN
+c     replace all pi0 with rho0 for all beams
+            IF(ABS(LLIST(I)).EQ.6) LLIST(I) = 27*isign(1,LLIST(I))
+         ELSEIF(IPAR(67).eq.3)THEN
+c     replace all pi0 with rho0 for meson beam only
+            IF(IBAR(IABS(KB)).eq.0)THEN
+               IF(ABS(LLIST(I)).EQ.6) LLIST(I) = 27*isign(1,LLIST(I))
+            ENDIF
+         ELSEIF(IPAR(67).eq.4)THEN
+c     replace all pi0 with rho0 for meson beam only
+c     replace some beam mesons with their vector partner
+            IF(IBAR(IABS(KB)).eq.0)THEN
+               IF(ABS(LLIST(I)).EQ.6) LLIST(I) = 27*isign(1,LLIST(I))
+c     reject leading spin1,isospin singlett
+               IF(ILEAD(JT).EQ.1.and.LLIST(I).eq.32.and.
+     +              PAR(136).gt.S_RNDM(I)) LLIST(I) = 27
+               IF(S_RNDM(0).lt.PAR(120).and.LLIST(I).eq.KB) 
+     &              LLIST(I) = LRES(LLIST(I))
+            ENDIF
+         ENDIF
+      ENDIF
+
+c     replace leading pi0 by rho0's
+      IF(IABS(IFQRK).eq.1)THEN
+         IF(ABS(IPAR(11)).ge.2.and.IPAR(11).ge.-3)THEN
+            IF(ilead(jt).EQ.1) then 
+               IF(ABS(LLIST(I)).EQ.6) THEN
+                  LLIST(I) = 27*isign(1,LLIST(I))
+               endif
+            endif
+        
+c     replace leading pi0 in string diff by rho0's (lvec15)
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-10)THEN
+            IF(ILEAD(JT).EQ.1) THEN 
+               IF(ABS(LLIST(I)).EQ.6) THEN
+                  LLIST(I) = 27*isign(1,LLIST(I))
+               ENDIF
+            ENDIF
+c     replace leading pi0 in string diff by rho0's 
+c     in addition to increased leading vec.meson ratio (lvec20)
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-15)THEN
+            IF(ILEAD(JT).EQ.1) THEN 
+               IF(ABS(LLIST(I)).EQ.6) THEN
+                  LLIST(I) = 27*isign(1,LLIST(I))
+               ENDIF
+            ENDIF     
+c     replace leading omega in string diff by rho0's 
+c     in addition to increased leading vec.meson ratio (lvec21)
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-16)THEN
+            IF(ILEAD(JT).EQ.1) THEN 
+               IF(ABS(LLIST(I)).EQ.32) 
+     &              LLIST(I) = 27*isign(1,LLIST(I))
+            ENDIF     
+c     replace leading omega in string diff by rho0's 
+c     suppress pi0 in diff. strings
+c     in addition to increased leading vec.meson ratio (lvec22)
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-17)THEN
+            IF(ILEAD(JT).EQ.1) THEN 
+c     print*,'replacing leading omega with rho0'
+               IF(ABS(LLIST(I)).EQ.32)
+     &              LLIST(I) = 27*isign(1,LLIST(I))
+            ENDIF
+            IF(LLIST(I).EQ.6) then
+c     print*,'pi0 found! start again.. '
+               GOTO 555
+            endif
+
+c     replace all for diff.
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).lt.0.and.
+     &           IPAR(11).ge.-3) then
+            IF(ABS(LLIST(I)).EQ.6)  LLIST(I) = 27*isign(1,LLIST(I))
+
+c     increased vec.meson ratio and replace pi0 with rho0 in str.diff
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-7) then
+            IF(ABS(LLIST(I)).EQ.6)  LLIST(I) = 27*isign(1,LLIST(I))  
+
+c     replace leading pi's by vec.mesons, iso-spin conserving
+         ELSEIF(IPAR(11).eq.-8.and.IPAR(11).lt.0)THEN
+            PAR(5) = 9.D0
+            IF(ilead(jt).EQ.1.and.
+     $                       INT((PAR(5)+1.D0)*S_RNDM(0)).gt.1) then 
+               IF(ABS(LLIST(I)).EQ.6) LLIST(I) = 27*isign(1,LLIST(I))
+               IF(ABS(LLIST(I)).EQ.7) LLIST(I) = 25*isign(1,LLIST(I))
+c     IF(ABS(LLIST(I)).EQ.8) LLIST(I) = 26*isign(1,LLIST(I))
+            endif
+
+c     replace almost all for diff.
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-8.and.IPAR(11).lt.0) then
+            PAR(5) = 9.D0
+            if( INT((PAR(5)+1.D0)*S_RNDM(0)).gt.1 ) then
+               IF(ABS(LLIST(I)).EQ.6)  LLIST(I) = 27*isign(1,LLIST(I))
+               IF(ABS(LLIST(I)).EQ.7) LLIST(I) = 25*isign(1,LLIST(I))
+            endif
+      
+c     replace leading pi0's by vec.mesons
+         ELSEIF(IPAR(11).eq.-9.and.IPAR(11).lt.0)THEN
+            PCHF = 0.1D0
+            IF(ilead(jt).EQ.1.and.ABS(LLIST(I)).EQ.6) 
+     &           LLIST(I) = 27*isign(1,LLIST(I))
+            if(ilead(jt).EQ.1.and.ABS(LLIST(I)).EQ.7)then
+               if(S_RNDM(0).lt.PCHF) LLIST(I) = 25*isign(1,LLIST(I))
+            endif        
+
+c     replace for string diff.
+         ELSEIF(IFQRK.eq.-1.and.IPAR(11).eq.-9) then
+            IF(ABS(LLIST(I)).EQ.6) 
+     &           LLIST(I) = 27*isign(1,LLIST(I))
+            if(ABS(LLIST(I)).EQ.7)then
+               if(S_RNDM(0).lt.PCHF) 
+     &              LLIST(I) = 25*isign(1,LLIST(I))
+            endif
+         ELSE
+            CONTINUE
+         ENDIF
+      ENDIF
+
+c     reset vec.meson ratio
+      PAR(5) = 0.3D0
+      IF(IABS(IFQRK).eq.1) ILEAD(JT) = 0
+      
+      PMQ(3) = QMASS(IFL(3))
+      P(I,5) = AM(IABS(LLIST(I)))
+      CALL PTDIS_4FLV (IFL(3), PX(3),PY(3))
+
+C...fill transverse momentum
+      P(I,1) = PX(JT) + PX(3)
+      P(I,2) = PY(JT) + PY(3)
+      XMT2 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+
+C...test end of fragmentation
+
+      WREM2 = PTOT(4)**2-PTOT(1)**2-PTOT(2)**2-PTOT(3)**2
+c      IF (WREM2 .LT. 0.1)  GOTO 200
+      IF (WREM2 .LT. 0.1D0)  GOTO 200
+c      WMIN = PMQ(1)+PMQ(2)+2.*PMQ(3)+ 1.1 + (2.*S_RNDM(0)-1.)*0.2
+      WMIN=PMQ(1)+PMQ(2)+2.D0*PMQ(3)+PAR(59)+(2.D0*S_RNDM(0)-1.D0)*0.2D0
+      IF (WREM2 .LT. WMIN**2) Then
+         if (IABS(ifl(3)).ne.3.and.IABS(IFL(3)).ne.4) GOTO 400
+         goto 200
+      endif
+
+C...Choose z
+      IF(IABS(IFQRK).eq.1) THEN
+c     valence strings: ( str.diff and non diff. )
+         IF(IPAR(11).EQ.1) THEN
+c     use hard distribution for leading quarks ( no exchange )
+            IF(ILEAD(JT).eq.1) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSE
+               IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10
+     &              .and.iabs(ifl(3)).lt.10)  THEN
+                  Z = ZBLEAD (IABS(LLIST(I)))   
+                  IBLEAD = IBLEAD - 1
+               ELSE
+                  Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+               ENDIF
+            ENDIF
+c     use hard frag. for leading particles
+         ELSEIF(IPAR(11).ge.3.or.IPAR(11).eq.-3.or.IPAR(11).eq.-6
+     &           .or.IPAR(11).eq.-7) THEN
+            IF(ILEAD(jt).eq.1) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSE
+               IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10
+     &              .and.iabs(ifl(3)).lt.10)  THEN
+                  Z = ZBLEAD (IABS(LLIST(I)))   
+                  IBLEAD = IBLEAD - 1
+               ELSE
+                  Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+               ENDIF
+            ENDIF
+         ELSEIF(IPAR(11).EQ.-11) THEN
+c     very hard leading frag. for diff and non. diff val. strings (lvec16)
+            IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSEIF(ILEAD(jt).eq.1)THEN
+               Z = 1.D0 - ZDISN(1)
+            ELSE
+               Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+            ENDIF
+
+         ELSEIF(IPAR(11).EQ.-12.OR.IPAR(11).LE.-15.or.IPAR(68).eq.1)THEN
+c     very hard leading frag. for diff. val. strings only (lvec17)
+            IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSEIF(ILEAD(jt).eq.1.and.IFQRK.eq.-1)THEN
+               Z = 1.D0 - ZDISN(1)
+            ELSE
+               Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+            ENDIF
+
+         ELSEIF(IPAR(11).EQ.-13.AND.IFQRK.eq.-1) THEN
+c     hard leading frag. for diff. val. strings only (lvec18)
+            IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSEIF(ILEAD(jt).eq.1)THEN
+               Z = S_RNDM(JT)
+            ELSE
+               Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+            ENDIF
+         ELSEIF(IPAR(11).EQ.-14.AND.IFQRK.eq.-1) THEN
+c     hard leading frag. for diff. AND ndiff. val. strings (lvec19)
+            IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10) THEN
+               Z = ZBLEAD (IABS(LLIST(I)))
+            ELSEIF(ILEAD(jt).eq.1)THEN
+               Z = S_RNDM(JT)
+            ELSE
+               Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+            ENDIF
+            
+         ELSE
+
+c     hard leading baryons only ( standard )
+            IF(IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10
+     &           .and.abs(ifl(3)).lt.10)  THEN
+c           print*,'calling zblead: i,id,jt,ncall', i,llist(i),jt,ncall
+               IF(IPAR(20).eq.3)THEN
+c     use lund function with different parameters for leading baryon
+                  fa_def = FAin
+                  fb_def = FB0in
+                  FAin = PAR(57)
+                  FB0in = PAR(58)
+                  z = zdis_4flv(IFL(3),ifl(jt),xmt2)
+c     set parameters to initial values again
+                  FAin = fa_def
+                  FB0in = fb_def
+               ELSE
+                  Z = ZBLEAD (IABS(LLIST(I)))
+               ENDIF
+               IBLEAD = IBLEAD - 1
+            ELSE
+               Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+            ENDIF
+         ENDIF
+      ELSE
+c     non valence string
+         IF (IBLEAD .GT. 0.and.iabs(ifl(jt)).gt.10
+     &        .and.iabs(ifl(3)).lt.10)  THEN
+C     Special frag. for leading Baryon only
+c            print*,'calling zblead: i,id,jt,ncall', i,llist(i),jt,ncall
+            Z = ZBLEAD (IABS(LLIST(I)))   
+            IBLEAD = IBLEAD - 1
+         ELSE
+            Z = ZDIS_4FLV (IFL(3),ifl(jt),XMT2)
+         ENDIF
+      ENDIF
+      IF(IPAR(20).eq.2)IBLEAD = 2
+      IF(IFQRK.eq.1) ILEAD(JT) = 0
+
+      ZLIST(I) = Z
+      WW(JT,2) = Z*WW(JT,1)
+      WW(JR,2) = XMT2/(WW(JT,2)*E0**2)
+
+      P(I,3) = WW(1,2)*0.5D0*E0 - WW(2,2)*0.5D0*E0
+      P(I,4) = WW(1,2)*0.5D0*E0 + WW(2,2)*0.5D0*E0
+
+      DO J=1,4
+         PTOT (J) = PTOT(J) - P(I,J)
+      ENDDO
+      DO K=1,2
+         WW(K,1) = WW(K,1) - WW(K,2)
+      ENDDO
+
+C...Reset pT and flavor at ends of the string
+      PX(JT) = -PX(3)
+      PY(JT) = -PY(3)
+      IFL(JT) =-IFL(3)
+      PMQ(JT) = PMQ(3)
+
+      GOTO 300
+
+C...Final two hadrons
+ 400  IAFL1 = IABS(mod(IFL(JR),100))
+      IAFL2 = IABS(mod(IFL(3),100))
+      IF(NDEBUG.gt.5)
+     &     write(lun,*)'STRING_FRAG: final flavors:', IFL(JR), -IFL(3)
+      
+C..   check if flavor combination is allowed..
+      
+c     reject anti-baryon next to leading baryon
+c     remaining anti-quark from leading baryon is marked by id+100
+      IF((IABS(IFL(JR)).gt.100.and.IAFL2.gt.10).or.
+     & (IABS(IFL(3)).gt.100.and.IAFL1.gt.10)) GOTO 200
+      
+      IF(IPAR(40).eq.0)THEN
+c     reject two diquarks, two anti-diquarks AND diquark anti-diquark pairs
+         IF (IAFL1*IAFL2 .GT. 100)  GOTO 200 
+      ELSE
+c     ONLY reject two diquarks or two anti-diquarks (unphysical) 
+c     AND KEEP diquark anti-diquark pairs 
+         IF (mod(IFL(JR),100)*mod(IFL(3),100).GT.100) GOTO 200 
+      ENDIF
+
+      IF ((IAFL1/10.eq.4.or.mod(IAFL1,10).eq.4)
+     +     .and.(IAFL2/10.eq.4.or.mod(IAFL2,10).eq.4))
+     +     GOTO 200             ! reject two charm quarks
+
+C.... Vector meson config
+c     increase vec.meson ration for diff.
+      IF(IFQRK.eq.-1.and.IPAR(11).le.-4.and.IPAR(11).gt.-8) PAR(5) =9.D0
+c     increase vec.meson ration for leading quarks in valence interactions
+      IF(IABS(IFQRK).eq.1.and.IPAR(11).le.-5.and.ilead(jr).eq.1
+     &     .and.IPAR(11).gt.-8) PAR(5) = 9.D0
+
+c     suppress direct pi0 for meson projectiles
+c     rate set by par( 137 )
+ 666  ipar82_def = IPAR(82)
+c     skip if baryon projectile
+      if(ibar(iabs(kb)).ne.0.or.ifqrk.eq.0) IPAR(82) = 0
+
+c     suppress direct omega for meson projectiles
+c     rate set by par( 138 )
+      ipar83_def = IPAR(83)
+c     skip if baryon projectile or central string     
+      if(ibar(iabs(kb)).ne.0.or.(ifqrk.gt.0.and.IPAR(83).eq.2))
+     &     IPAR(83) = 0
+
+c     set current rank
+      IRNK(JR)=ISIGN(IABS(IRNK(JR))+1,1-JR)
+      
+c     change rho0 / omega ratio
+      IF(IPAR(81).eq.1)THEN
+c     change if beam is meson
+         if(ibar(iabs(kb)).eq.0) PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.2)THEN         
+c     change if beam is meson, on meson side only         
+         if(ibar(iabs(kb)).eq.0.and.IRNK(JR).gt.0) PAR(143) = PAR(144)  
+      ELSEIF(IPAR(81).eq.3)THEN         
+c     change if beam is meson, on meson side only, for leading only
+         if(ibar(iabs(kb)).eq.0.and.ISIGN(ILEAD(JR),IRNK(JR)).eq.1)
+     &        PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.4)THEN         
+c     change if beam is meson, on meson side only, for diff. strings only
+         if(ibar(iabs(kb)).eq.0.and.IFQRK.eq.-1)
+     &        PAR(143) = PAR(144)
+      ELSEIF(IPAR(81).eq.5)THEN         
+c     change if beam is meson, for leading on meson side only and
+c     for diff. strings only
+         if(ibar(iabs(kb)).eq.0.and.IFQRK.eq.-1.and.
+     &        ISIGN(ILEAD(JR),IRNK(JR)).eq.1) PAR(143) = PAR(144)
+      ENDIF
+
+c     increase vec.meson ratio for leading particle in str. diff.
+      IF(IPAR(66).eq.1)THEN
+         IF(ILEAD(JT).EQ.1.and.IFQRK.eq.-1)THEN
+            IF(IBAR(IABS(kb)).eq.0.or.IPAR(70).eq.1) PAR(5) = PAR(113)
+         ENDIF
+
+      ELSEIF(IPAR(66).eq.2)THEN
+         IF(IFQRK.eq.-1)THEN
+            IF(IBAR(IABS(kb)).eq.0.or.IPAR(70).eq.1) PAR(5) = PAR(113)
+         ENDIF
+
+      ELSEIF(IPAR(66).eq.3)THEN
+c     increase vector meson rate for meson beam
+c     on beam side (rank+) only!
+         IF(IFQRK.eq.-1)THEN
+            IF(ILEAD(JR).EQ.1)THEN               
+               IF(IBAR(IABS(kb)).eq.0.and.IRNK(JR).gt.0)
+     &              PAR(5) = PAR(113)
+c     always incr. vector rate for diff. strings independent of beam type
+               IF(IPAR(70).eq.1) PAR(5) = PAR(113)               
+            ENDIF
+         ENDIF
+      ENDIF
+
+      CALL SIB_I4FLAV (IFL(JR), -IFL(3), IRNK(JR), IFLA, LLIST(I+1))
+
+      IPAR(82) = ipar82_def
+      IPAR(83) = ipar83_def
+      PAR(143) = PAR143_def
+      
+      nporig(I+1)= Ipflag*2 + KINT
+      niorig(I+1)= iiflag
+      IF(ILEAD(1).eq.1.or.ILEAD(2).eq.1) nporig(I+1)= -1 * nporig(I+1)
+
+c     replace leading or all pi0 with rho0
+      IF(IFQRK.eq.-1) THEN 
+         IF(IPAR(67).eq.1)THEN
+            IF(ILEAD(JR).EQ.1) THEN 
+               IF(IABS(LLIST(I+1)).EQ.6) 
+     &              LLIST(I+1) = 27*isign(1,LLIST(I+1))           
+            ENDIF
+         ELSEIF(IPAR(67).eq.2)THEN
+            IF(IABS(LLIST(I+1)).EQ.6) LLIST(I+1) =27*isign(1,LLIST(I+1))
+         ELSEIF(IPAR(67).eq.3)THEN
+            IF(IBAR(IABS(KB)).eq.0)THEN
+               IF(ABS(LLIST(I+1)).EQ.6)LLIST(I+1)=27*isign(1,LLIST(I+1))
+            ENDIF
+         ENDIF
+      ENDIF
+      
+c     replace all for diff.
+      IF(IABS(IFQRK).EQ.1)THEN
+         IF(IFQRK.eq.-1.and.IPAR(11).lt.0
+     &        .and.IPAR(11).ge.-3) then
+            IF(ABS(LLIST(I+1)).EQ.6) LLIST(I+1) = 27*isign(1,LLIST(I+1))
+         endif
+c     replace all for leading val.
+         IF(IPAR(11).le.-2.and.IPAR(11).ge.-3) then
+            if( ilead(jr).eq.1 ) then
+               IF(IABS(LLIST(I+1)).EQ.6)
+     &              LLIST(I+1) = 27*isign(1,LLIST(I+1))
+            endif
+         endif
+
+c     increased vec.meson ratio and replace pi0 with rho0
+         IF(IFQRK.eq.-1.and.IPAR(11).eq.-7) then
+           IF(IABS(LLIST(I+1)).EQ.6) LLIST(I+1) = 27*isign(1,LLIST(I+1))
+c     IF(ABS(LLIST(I+1)).EQ.7)  LLIST(I+1) = 25*isign(1,LLIST(I+1))
+         endif
+         
+c     replace all for diff. ( same as lvec6 but for rhop as well )
+c     reset vec.meson ratio
+         IF(IFQRK.eq.-1.and.IPAR(11).eq.-8) then
+            PAR(5) = 9.D0
+            if( INT((PAR(5)+1.D0)*S_RNDM(0)).gt.1 ) then
+               IF(IABS(LLIST(I+1)).EQ.6)
+     &              LLIST(I+1) = 27*isign(1,LLIST(I+1))
+               IF(IABS(LLIST(I+1)).EQ.7)
+     &              LLIST(I+1) = 25*isign(1,LLIST(I+1))
+            endif
+         endif
+c     replace leading pseudoscalar by vector
+         IF(IPAR(11).eq.-8.and.ilead(jr).eq.1) then
+            PAR(5) = 9.D0
+            if( INT((PAR(5)+1.D0)*S_RNDM(0)).gt.1 ) then
+               IF(IABS(LLIST(I+1)).EQ.6) 
+     &              LLIST(I+1) = 27*isign(1,LLIST(I+1))
+               IF(IABS(LLIST(I+1)).EQ.7)
+     &              LLIST(I+1) = 25*isign(1,LLIST(I+1))
+            endif
+         endif
+         
+c     replace all pi0 for string diff.( same as lvec7 but for rhop as well )
+         IF(IFQRK.eq.-1.and.IPAR(11).eq.-9) then
+            if(IABS(LLIST(I+1)).EQ.6) LLIST(I+1) =27*isign(1,LLIST(I+1))
+         endif
+c     replace leading pi0 by vector
+         IF(IPAR(11).eq.-9.and.ILEAD(JR).eq.1) then
+            if(IABS(LLIST(I+1)).EQ.6) LLIST(I+1) =27*isign(1,LLIST(I+1))
+         endif
+
+c     replace leading omega in string diff by rho0's 
+c     suppress pi0 in diff. strings
+c     in addition to increased leading vec.meson ratio (lvec22)
+         IF(IFQRK.eq.-1.and.IPAR(11).eq.-17)THEN
+            IF(IABS(LLIST(I+1)).EQ.6)THEN
+c     print*,'found pi0, restarting..'
+               GOTO 666
+            ENDIF
+         ENDIF
+         ILEAD(JR)= 0
+      ENDIF
+
+c     reject iso 0 spin 1 (omega) for meson projectiles
+      IF(IBAR(IABS(KB)).eq.0)THEN
+c     reject leading spin1,isospin singlett
+         IF(ILEAD(JR).EQ.1.and.LLIST(I+1).eq.32.and.
+     +        PAR(136).gt.S_RNDM(I)) LLIST(I+1) = 27
+      endif
+      
+c     reset vec.mes. ratio
+      PAR(5) = PAR5_def
+      PAR(24) = charmPARdef
+      IPAR(11) = IPAR11_def
+
+      P(I,1)   = PX(JT)+PX(3)      
+      P(I,2)   = PY(JT)+PY(3)
+      LPOINT(I) = JT
+      I1 = I+1
+      nforig(I1) = 0      
+      P(I1,5) = AM(IABS(LLIST(I1)))
+      P(I1,1) = PX(JR)-PX(3)      
+      P(I1,2) = PY(JR)-PY(3)   
+      LPOINT(I1) = JR 
+      LRNK(I1) = IRNK(JR)
+      XM1 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+      XM2 = P(I1,5)**2+P(I1,1)**2+P(I1,2)**2
+      IF (DSQRT(XM1)+dSQRT(XM2) .GT. dSQRT(WREM2)) GOTO 200
+
+c...RE & EJA fix
+      PT2 = (P(I,1)+P(I1,1))**2+(P(I,2)+P(I1,2))**2
+      WREMPT = dsqrt(WREM2+PT2)
+      EA1 = (WREM2+XM1-XM2+PT2)/(2.D0*WREMPT)
+
+      PA2 = (EA1**2-XM1)
+      if (pa2.gt.0.D0)  then
+            PA = dSQRT(PA2)
+      else
+            goto 200
+      endif
+      BA = PTOT(3)/PTOT(4)
+      GA = PTOT(4)/WREMPT
+      SGN = DBLE(3-2*JT)
+      P(I,3) = GA*(BA*EA1+SGN*PA)
+      P(I,4) = GA*(EA1+BA*SGN*PA)
+      P(I+1,3) = PTOT(3)-P(I,3)
+      P(I+1,4) = PTOT(4)-P(I,4)
+
+c     mark as final hadrons
+      ZLIST(I) = 0.D0
+      ZLIST(I+1) = 0.D0
+
+      NA= NP+1
+      NP=I+1
+         
+C...reorder  particles along chain (in rank)
+      IF (LRANK)  THEN
+      N1 = NA-1
+      N2 = 0
+      DO J=NA,NP
+         IF(P(J,4).lt.0) THEN
+            NP=NA-1
+            GOTO 200            ! negative energy bug 'fix'
+         ENDIF
+         IF(LPOINT(J) .EQ. 2)  THEN
+            N2=N2+1
+            LLIST (NP+N2) = LLIST(J)
+            LRNK(NP+N2) = LRNK(J)
+            ZLIST (NP+N2) = ZLIST(J)
+            nporig(NP+N2) = nporig(J)
+            niorig(NP+N2) = niorig(J)
+            nforig(NP+N2) = 0
+            DO K=1,5
+               P(NP+N2,K)=P(J,K)
+            ENDDO
+         ELSE
+            N1= N1+1
+            IF (N1.LT.J)   THEN
+               LLIST(N1) = LLIST(J)
+               LRNK(N1) = LRNK(J)
+               ZLIST(N1) = ZLIST(J)
+               nporig(N1) = nporig(J)
+               niorig(N1) = niorig(J)
+               nforig(N1) = nforig(J)
+               DO K=1,5
+                  P(N1,K) = P(J,K)
+               ENDDO
+            ENDIF
+         ENDIF
+      ENDDO
+      JJ=N1
+      DO J=NP+N2,NP+1,-1
+         JJ= JJ+1
+         LLIST(JJ) = LLIST(J)
+         LRNK(JJ) = LRNK(J)
+         ZLIST(JJ) = ZLIST(J)
+         nporig(JJ) = nporig(J)
+         niorig(JJ) = niorig(J)
+         nforig(JJ) = nforig(J)
+         DO K=1,5
+            P(JJ,K) = P(J,K)
+         ENDDO
+      ENDDO
+      ENDIF
+
+      if(Ndebug.gt.3)
+     &  WRITE(LUN,*)' STRING_FRAG_4FLV: NP after fragmentation:',NP
+
+      END
+
+
+C=======================================================================
+
+      SUBROUTINE GG_FRAG_4FLV (E0)
+
+C-----------------------------------------------------------------------
+C...This routine fragments a  gluon-gluon system
+C.  of mass E0 (GeV)
+C.  the particles produced are in the  jet-jet frame
+C.  oriented along the z axis
+C...........................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      DOUBLE PRECISION ZLIST
+      COMMON /S_ZLIST/ ZLIST(8000)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      DIMENSION WW(2,2),PTOT(4),PX(3),PY(3),IFL(3),PMQ(3)
+      SAVE
+
+      if(Ndebug.gt.3) then
+        WRITE(LUN,*)
+     &    ' GG_FRAG_4FLV: called with (E0)',
+     &    E0
+        WRITE(LUN,*)' GG_FRAG_4FLV: NP before fragmentation:',NP
+      endif
+
+C...  'leading' strange fraction
+      PAR2_def = PAR(2)
+      IF(IPAR(39).eq.2) PAR(2) = PAR(66)
+
+      PAR24_def = PAR(24)
+C     leading charm fraction
+      IF(IPAR(87).eq.1) PAR(24) = PAR(150)
+      IF(IPAR(87).eq.2) PAR(24) = PAR(150)*PAR(24)
+
+      E0S = E0**2
+      
+C...Generate the 'forward' leading particle.
+100   I = NP+1
+c     dummy rank argument
+      IDM = 5
+c     sample new flavor, i.e. split gluon into quark-antiquark, quark or antiquark
+      if( IPAR(87).eq.3 )THEN
+C     flavor threshold model            
+c     u,d -> u,d,s -> u,d,s,c
+         CALL SIB_ICFLAV(E0S,0,I0,IFL1)
+      ELSE
+c     default u,d,s model, same rates as in hadronization (string frag.)
+         I0 = INT(-1 + 2.D0*INT((2.D0-EPS8)*S_RNDM(I)))               
+         CALL SIB_I4FLAV(I0,0,IDM,IFL1, LDUM)
+      ENDIF
+c     form first hadron from new flavor
+      CALL SIB_I4FLAV(IFL1,0,IDM,IFL2, LLIST(I))
+      CALL PTDIS_4FLV(IFL1,PX1,PY1)
+      CALL PTDIS_4FLV(IFL2,PX2,PY2)
+      P(I,1) = PX1+PX2
+      P(I,2) = PY1+PY2
+      P(I,5) = AM(IABS(LLIST(I)))
+      XM1 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+      Z1 = ZDIS_4FLV (IFL1,1,0.25D0*XM1)
+      Z2 = ZDIS_4FLV (IFL2,1,0.25D0*XM1)
+      T1  = 4.D0*XM1/(E0S*(Z1+Z2))
+      P(I,4) = 0.25D0*E0*(Z1+Z2 + T1)
+      P(I,3) = 0.25D0*E0*(Z1+Z2 - T1)
+
+      nforig(I)= 0
+      nporig(I)= Ipflag*3 + KINT
+      niorig(I)= iiflag
+      ZLIST(I) = Z1 + Z2
+
+C...Generate the 'backward' leading particle.
+      I = I+1
+      IF( IPAR(87).eq.3 )THEN
+         CALL SIB_ICFLAV(E0S,-I0,IDM,IFL3)
+      ELSE
+         CALL SIB_I4FLAV(-I0,0,IDM,IFL3, LDUM)
+      ENDIF
+      CALL SIB_I4FLAV(IFL3,0,IDM,IFL4, LLIST(I))
+      CALL PTDIS_4FLV(IFL3,PX3,PY3)
+      CALL PTDIS_4FLV(IFL4,PX4,PY4)
+      P(I,1) = PX3+PX4
+      P(I,2) = PY3+PY4
+      P(I,5) = AM(IABS(LLIST(I)))
+      XM2 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+      Z3 = ZDIS_4FLV (IFL3,1,0.25D0*XM2)
+      Z4 = ZDIS_4FLV (IFL4,1,0.25D0*XM2)
+      T2  = 4.D0*XM2/(E0S*(Z3+Z4))
+      P(I,4) = 0.25D0*E0*( Z3+Z4 + T2)
+      P(I,3) = 0.25D0*E0*(-Z3-Z4 + T2)
+
+      nforig(I)= 0
+      nporig(I)= Ipflag*3 + KINT
+      niorig(I)= iiflag
+      ZLIST(I) = Z3 + Z4
+c      PAR24def = PAR(24)
+c     charm QCD fusion
+c      IF(IPAR(17).eq.2) PAR(24) = 0.
+
+c     reset strange fraction
+      PAR(2) = PAR2_def
+
+c     reset charm fraction
+      PAR(24) = PAR24_def
+      
+C...Fragment the two remaning strings
+      N0 = 0
+      DO KS=1,2
+      
+      NTRY = 0
+200   NTRY = NTRY+1
+      I = NP+2+N0
+      IF (NTRY .GT. 30)  GOTO 100
+
+      IF (KS .EQ. 1)  THEN
+         WW(1,1) = 0.5D0 * (1.D0 - Z1 - 0.5D0*T2) 
+         WW(2,1) = 0.5D0 * (1.D0 - Z3 - 0.5D0*T1)
+         PX(1) = -PX1
+         PY(1) = -PY1
+         PX(2) = -PX3
+         PY(2) = -PY3
+         IFL(1) = -IFL1
+         IFL(2) = -IFL3
+      ELSE
+         WW(1,1) = 0.5D0 * (1.D0 - Z2 - 0.5D0*T2) 
+         WW(2,1) = 0.5D0 * (1.D0 - Z4 - 0.5D0*T1)
+         PX(1) = -PX2
+         PY(1) = -PY2
+         PX(2) = -PX4
+         PY(2) = -PY4
+         IFL(1) = -IFL2
+         IFL(2) = -IFL4
+      ENDIF
+      PX(3) = 0.D0
+      PY(3) = 0.D0
+      PTOT (1) = PX(1)+PX(2)
+      PTOT (2) = PY(1)+PY(2)
+      PTOT (3) = 0.5D0*E0*(WW(1,1)-WW(2,1))
+      PTOT (4) = 0.5D0*E0*(WW(1,1)+WW(2,1))
+
+      PMQ(1) = QMASS(IFL(1))
+      PMQ(2) = QMASS(IFL(2))
+
+C...produce new particle: side, pT
+300   I=I+1
+      if(i.gt.8000) then
+        write(LUN,'(1x,a,i8)') 
+     &    ' GG_FRAG: no space left in S_PLIST:',I
+        CALL SIB_REJECT ('GG_FRAG         ')
+      endif
+      nforig(I)= 0
+      nporig(I)= Ipflag*2 + KINT
+      niorig(I)= iiflag
+
+      JT=INT(1.5D0+S_RNDM(0))
+      JR=3-JT
+c      CALL PTDIS (IFL(JT), PX(3),PY(3))
+
+C...particle ID
+      CALL SIB_I4FLAV (IFL(JT), 0, IDM, IFL(3), LLIST(I))
+      PMQ(3) = QMASS(IFL(3))
+      P(I,5) = AM(IABS(LLIST(I)))
+
+      CALL PTDIS_4FLV (IFL(3), PX(3),PY(3))
+      
+C...test end of fragmentation
+      WREM2 = PTOT(4)**2-PTOT(1)**2-PTOT(2)**2-PTOT(3)**2
+      IF (WREM2 .LT. 0.1D0)  GOTO 200
+      WMIN = PMQ(1)+PMQ(2)+2.D0*PMQ(3)+1.1D0+(2.D0*S_RNDM(0)-1.D0)*0.2D0
+      IF (WREM2 .LT. WMIN**2)THEN
+         GOTO 400
+      ENDIF
+
+C...fill transverse momentum
+      P(I,1) = PX(JT) + PX(3)
+      P(I,2) = PY(JT) + PY(3)
+
+C...Choose z
+      XMT2 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+      Z = ZDIS_4FLV (ifl(3),IFL(JT), XMT2)
+
+      ZLIST(I) = Z      
+      WW(JT,2) = Z*WW(JT,1)
+      WW(JR,2) = XMT2/(WW(JT,2)*E0S)
+
+      P(I,3) = WW(1,2)*0.5D0*E0 - WW(2,2)*0.5D0*E0
+      P(I,4) = WW(1,2)*0.5D0*E0 + WW(2,2)*0.5D0*E0
+
+      DO J=1,4
+         PTOT (J) = PTOT(J) - P(I,J)
+      ENDDO
+      DO K=1,2
+         WW(K,1) = WW(K,1) - WW(K,2)
+      ENDDO
+
+C...Reset pT and flavor at ends of the string
+      PX(JT) = -PX(3)
+      PY(JT) = -PY(3)
+      IFL(JT) =-IFL(3)
+      PMQ(JT) = PMQ(3)
+      GOTO 300
+
+C...Final two hadrons
+ 400  IAFL1 = mod(IABS(IFL(JR)),100)
+      IAFL2 = mod(IABS(IFL(3)),100)
+      IF (IAFL1*IAFL2 .GT. 100)  GOTO 200 ! reject two diquarks
+      IF ((IAFL1/10.eq.4.or.mod(IAFL1,10).eq.4)
+     +     .and.(IAFL2/10.eq.4.or.mod(IAFL2,10).eq.4))
+     +     GOTO 200             ! reject two charm quarks
+
+      CALL SIB_I4FLAV (IFL(JR), -IFL(3), IDM, IFLA, LLIST(I+1))
+      P(I+1,5) = AM(IABS(LLIST(I+1)))
+      P(I,1)   = PX(JT)+PX(3)      
+      P(I,2)   = PY(JT)+PY(3)      
+      nporig(I)= Ipflag*2 + KINT
+      niorig(I)= iiflag
+      I1 = I+1
+      nporig(I1)= Ipflag*2 + KINT
+      niorig(I1)= iiflag
+      P(I1,1) = PX(JR)-PX(3)      
+      P(I1,2) = PY(JR)-PY(3)      
+      XM1 = P(I,5)**2+P(I,1)**2+P(I,2)**2
+      XM2 = P(I1,5)**2+P(I1,1)**2+P(I1,2)**2
+      IF (dSQRT(XM1)+dSQRT(XM2) .GT. dSQRT(WREM2)) GOTO 200
+      if (ptot(4).le.0.D0) goto 200
+      PT2 = (P(I,1)+P(I1,1))**2+(P(I,2)+P(I1,2))**2
+      WREMPT = dsqrt(WREM2+PT2)
+      EA1 = (WREM2+XM1-XM2+PT2)/(2.D0*WREMPT)
+      PA2 = (EA1**2-XM1)
+      if (PA2.ge.0.D0) then
+        PA = dSQRT(PA2)
+      else
+         goto 200
+      endif
+      BA = PTOT(3)/PTOT(4)
+      GA = PTOT(4)/WREMPT
+      SGN = DBLE(3-2*JT)
+      P(I,3) = GA*(BA*EA1+SGN*PA)
+      P(I,4) = GA*(EA1+BA*SGN*PA)
+      P(I+1,3) = PTOT(3)-P(I,3)
+      P(I+1,4) = PTOT(4)-P(I,4)
+      ZLIST(I) = 0.D0
+      ZLIST(I+1) = 0.D0
+      N0 = I-NP-1
+      ENDDO                  ! loop on two `remaining strings'
+
+      NP = I+1
+c      PAR(24) = PAR24def 
+      IF(Ndebug.gt.3) then
+        WRITE(LUN,*)' GG_FRAG_4FLV: NP after fragmentation:',NP
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE DIFDEC (L0, Irec, IBAD, P0)
+
+C-----------------------------------------------------------------------
+C..."decay" of an excited state with the quantum numbers
+C.   of particle L0 and the 5-momentum P0
+C.   - low energy: phase space decay (fire ball model)
+C.   - intermediate energy: one-string decay (longitudinal phase space)
+C.   - high energy: pomeron-hadron scattering (multi-string model) 
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+c     external types
+      INTEGER L0, Irec, IBAD
+      DOUBLE PRECISION P0
+      DIMENSION P0(5)
+      
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+      INTEGER LRNK
+      COMMON /SIB_RNK/ LRNK(8000)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     internal types
+      INTEGER LL,LCON,LRES,LRES1,NTRYS,NRJECT,LA,N1,IREJ,I,J,IFLA,
+     &     IFL1,IFL2,IFBAD,NPI,IRES,LA1,JQQ,JQTOT,K,JQR,
+     &     KB_0,IAT_0
+      DOUBLE PRECISION PD,BE,EMIN,EMIN2,PCHEX,PRES,DELTAE,
+     &     SQS_0,S_0,PTmin_0,XMIN_0,ZMIN_0,
+     &     PAR1_def,PAR24_def,PAR53_def,GA,BEP,S_RNDM,AV,GASDEV,PCXG,
+     &     XI1,XI2,XSMR         !,FERMI
+      DIMENSION LL(10), PD(10,5), BE(3), LCON(6:99),LRES1(6:99)
+      DIMENSION LRES(6:99)
+      SAVE
+      EXTERNAL GASDEV
+      DATA (LRES(k),k=6,22)  /27,25,26,28,29,0,0,51,52,6*0,30,31/
+      DATA (LRES(k),k=23,33) /23,24,25,26,27,28,29,30,31,27,27/
+      DATA (LRES(k),k=34,49) /34,35,36,37,38,39,40,41,42,43,34,35,36,
+     &     37,38,49/
+      DATA (LRES(k),k=50,83) /0,51,52,53,54,4*0,78,79,10*0,80,81,73,
+     &     74,75,76,77,78,79,80,81,0,83/
+      DATA (LRES(k),k=84,99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+      
+      DATA EMIN /0.7D0/
+      DATA EMIN2 /10.D0/
+      DATA LCON /7,6,6,11,11,9,9,14,13,19*0,35,34,35,38,37,39,
+     &     19*0,71,72,10*0,59,60,73,10*0,85,86,85,88,87,89,10*0/
+      DATA LRES1 /27,25,26,11,11,9,9,14,13,19*0,35,34,35,38,37,39,
+     &     19*0,78,79,10*0,80,81,83,10*0,94,95,96,97,98,89,10*0/      
+      DATA PCHEX /0.33D0/            ! probability of charge exchange
+      DATA PRES /0.7D0/         ! probability of forming a resonance
+      DATA NRJECT /0/
+
+      IF(NDEBUG.gt.2)
+     &     WRITE(LUN,'(2X,A,1x,I2,1x,I2,/,5(2x,F10.3))')
+     &     'DIFDEC: (L0,Irec,P0):',L0,Irec,(P0(i),i=1,5)
+      
+      
+      NTRYS = 0
+
+      LA = IABS(L0)
+      DELTAE = P0(5) - AM(LA)
+      IF(IBAR(LA).ne.0.or.IPAR(65).eq.0)THEN
+c     baryons
+         EMIN = PAR(30)
+      ELSE
+c     mesons
+         EMIN = PAR(112)
+      ENDIF
+c      IBAD = 0
+      PAR1_def= PAR(1)
+      if(Irec.gt.0) PAR(1)= PAR(16)
+c      XSMR = 0.5D0
+c     XI2=FERMI(DELTAE,EMIN2,XSMR)
+c     XI1=FERMI(DELTAE,EMIN,XSMR)
+      XSMR=PAR(131)*EMIN
+      XI1=MAX((EMIN-DELTAE)/XSMR,0.D0)      
+      XSMR=PAR(131)*EMIN2
+      XI2=MAX((EMIN2-DELTAE)/XSMR,0.D0)
+      if(Ndebug.gt.2) 
+     &     WRITE(LUN,'(1x,A29,2(2x,F5.2),2(2x,F8.3))')
+     &     '  DIFDEC: EMIN1,EMIN2,XI1,XI2',
+     &     EMIN,EMIN2,Xi1,Xi2
+      
+C...  pomeron-hadron scattering (pi0 is used instead of pomeron)      
+      IF ((IPAR(10).gt.0).and.(Irec.gt.0).and.
+     &     (DELTAE.gt.EMIN2.or.S_RNDM(LA).gt.XI2))  THEN
+         if(Ndebug.gt.2) 
+     &        WRITE(LUN,*)' DIFDEC: central (L0,DELTAE,NP,XI):',
+     &        L0,DELTAE,NP,XI2
+         N1 = NP+1
+         if(irec.gt.0.and.IPAR(5).eq.1) par(1)= par(15)
+ 50      CONTINUE
+         IPFLAG= IPFLAG*100
+c     create subevent
+         SQS_0   = SQS
+         S_0     = S
+         PTmin_0 = PTmin 
+         XMIN_0  = XMIN
+         ZMIN_0  = ZMIN
+         KB_0    = KB
+         IAT_0   = IAT
+         CALL INI_EVENT(P0(5),L0,6,0)
+c     create L0 - pi0 interaction, pi0(pid=6) target
+         CALL SIB_NDIFF(L0, 1, P0(5), 0, IREJ) ! ori
+c     restore main event
+         SQS   = SQS_0
+         S     = S_0
+         PTmin = PTmin_0         
+         XMIN  = XMIN_0
+         ZMIN  = ZMIN_0
+         KB    = KB_0
+         IAT   = IAT_0
+         IF(IREJ.NE.0) THEN
+            NP = N1-1
+            GOTO 50
+         ENDIF
+         PAR(1) = PAR1_def
+         DO J=1,3
+            BE(J)=P0(J)/P0(4)
+         ENDDO
+         GA=P0(4)/P0(5)
+         if(P0(3).lt.0.D0) then
+           do i=N1,NP
+             P(I,3) = -P(I,3)
+           enddo
+         endif
+         DO I=N1,NP
+            BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+            DO J=1,3
+               P(I,J)=P(I,J)+GA*(GA*BEP/(1.D0+GA)+P(I,4))*BE(J)
+            ENDDO
+            P(I,4)=GA*(P(I,4)+BEP)
+         ENDDO
+
+C..."string-like" decay
+      ELSE IF (DELTAE .GT. EMIN .or. S_RNDM(LA).gt.XI1)  THEN          
+         IF(NDEBUG.gt.2) 
+     &        WRITE(LUN,'(2X,A,3(2x,F8.3))')
+     &        'DIFDEC: string-like, (DELTAE,E0,central prob.):',
+     &        DELTAE,P0(5),1.D0-XI2
+c     set charge exchange probability, i.e. prob for p* -> n + pip
+         PAR53_def = PAR(53)
+         PAR(53) = PAR(130)
+         N1 = NP+1
+         CALL HSPLI(L0,IFL1,IFL2)
+         PAR(53) = PAR53_def
+         IF (P0(3) .GT. 0.D0.and.L0.gt.0)  THEN
+            IFLA = IFL2
+            IFL2 = IFL1
+            IFL1 = IFLA
+         ENDIF
+c     randomize flavor orientation in string
+         IF(IPAR(25).eq.1.and.S_RNDM(L0).gt.PAR(39))THEN
+            IFLA = IFL2
+            IFL2 = IFL1
+            IFL1 = IFLA
+         ENDIF
+         PAR24_def = PAR(24)
+         IF(IPAR(15).eq.2.and.IPAR(15).eq.3.and.IPAR(15).ne.7.and.
+     &        IPAR(15).lt.12)THEN
+         PAR(24) = PAR(25)*dEXP(-PAR(26)/P0(5))
+         ELSEIF(IPAR(15).eq.7)THEN
+            PAR(24) = PAR(25)
+         ENDIF
+ 10      CONTINUE
+         IPFLAG = IPFLAG*10
+         CALL STRING_FRAG_4FLV 
+     +        (P0(5), IFL1, IFL2, 0.D0,0.D0,0.D0,0.D0,IFBAD,-1)
+         IF (IFBAD .EQ. 1)then
+            if(ndebug.gt.1)
+     &           WRITE(lun,*)' SIB_DIFF: string-frag rejection! ',
+     &           '(M,NCALL)',P0(5),NCALL
+            NTRYS = NTRYS + 1
+            NP = N1-1
+            IFBAD = 0
+            IF(NTRYS.gt.5)then ! resample diff. mass              
+               NP = 0
+               IBAD = 1
+               PAR(24) = PAR24_def
+               RETURN
+            endif
+            GOTO 10
+         ENDIF
+         DO J=1,3
+            BE(J)=P0(J)/P0(4)
+         ENDDO
+         GA=P0(4)/P0(5)
+         DO I=N1,NP
+            BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+            DO J=1,3
+               P(I,J)=P(I,J)+GA*(GA*BEP/(1.D0+GA)+P(I,4))*BE(J)
+            ENDDO
+            P(I,4)=GA*(P(I,4)+BEP)
+         ENDDO
+         PAR(24) = PAR24_def
+
+C...Phase space decay of the excited state
+      ELSEIF(DELTAE.GT.AM(7)+0.02D0)THEN
+         if(Ndebug.gt.2) 
+     &        WRITE(LUN,*)' DIFDEC: fireball, (DELTAE,string prob.):',
+     &        DELTAE,1.D0-XI1
+         IF(IPAR(14).GT.0.and.IPAR(14).NE.7)THEN
+            IF(IPAR(14).eq.5) PCHEX = 0.D0
+            NPI=0
+            IRES = 0
+            IF (S_RNDM(0).LT.PRES) THEN
+               IF (LA.LT.9) THEN
+c     if kinematically possible produce rho0 in charge exchange
+                  LL(1) = LRES(LA)
+                  DELTAE = P0(5) -  AM(LRES(LA))
+                  IF (DELTAE.GT.AM(7)+0.02D0) GOTO 100
+               ENDIF
+            ENDIF
+c     switch charge exchange on/off
+            IF( S_RNDM(1).LT.PCHEX)THEN
+               LL(1) = LCON(LA)*ISIGN(1,L0)
+               IF( (L0 .EQ. 6) .OR. (L0 .EQ. 11) )
+     .              LL(1) = LL(1)+INT((2.D0-EPS8)*S_RNDM(2))
+            ELSE
+               LL(1) = L0
+            ENDIF
+            
+            DELTAE = P0(5) - AM(LA)
+ 100        AV = 2.D0*dSQRT(DELTAE)
+            LA1 = IABS(LL(1))
+            NPI = INT(AV*(2.D0+0.5D0*GASDEV(LA)))
+            IF (IPAR(14).EQ.6)THEN
+               IF(NPI.LT.1.OR.NPI.GT.9.OR.AM(LA1)+NPI*AM(7)+0.02D0
+     .              .GT.P0(5))  GOTO 100
+            ELSE
+               IF(NPI.LT.0.OR.NPI.GT.9.OR.AM(LA1)+NPI*AM(7)+0.02D0
+     .              .GT.P0(5))  GOTO 100
+            ENDIF
+c     create resonances inside fireball..
+            IF(IPAR(14).ge.2
+     +           .and.DELTAE.GE.AM(LA1)+AM(27)+(NPI-1)*AM(7)+0.02D0)
+     +           IRES = 1
+            IF(IPAR(14).ge.3.and.DELTAE.GE.AM(LA1)+NPI*AM(27)+0.02D0) 
+     +           IRES=3
+            JQQ = ICHP(LA)*ISIGN(1,L0)-
+     .           ICHP(IABS(LL(1)))*ISIGN(1,LL(1))  
+ 120        JQTOT = 0
+            DO K=2,NPI
+               LL(K) = 6+INT(S_RNDM(K)*(3.D0-EPS8))
+c     suppress pi0 in fireball
+               IF(IPAR(14).ge.4)
+     +              LL(K) = 7+INT(S_RNDM(0)*(2.D0-EPS8))
+c     IF(IRES.EQ.1.and.S_RNDM(LA).LT.0.5D0)
+               IF(IRES.EQ.1) THEN
+                  LL(K) = 27-INT(S_RNDM(1)*(3.D0-EPS8))
+                  IRES = 2
+               ENDIF
+               IF(IRES.EQ.3)
+     +              LL(K) = 27-INT(S_RNDM(2)*(3.D0-EPS8))
+               JQTOT = JQTOT + ICHP(LL(K))
+            ENDDO
+            JQR = JQQ-JQTOT
+            IF (JQR.LT.-1.OR.JQR.GT.1)  GOTO 120
+            LL(NPI+1) = 6+JQR
+            IF (LL(NPI+1) .EQ. 5)  LL(NPI+1)=8
+            CALL DECPAR (0,P0,NPI+1,LL, PD)
+            DO J=1,NPI+1
+               NP = NP+1
+               LLIST(NP) = LL(J)
+               nporig(NP)= Ipflag*2
+               lrnk(Np) = 0
+               niorig(NP)= iiflag
+               DO K=1,5
+                  P(NP,K) = PD(J,K)
+               ENDDO
+            ENDDO
+
+         ELSEIF (IPAR(14).EQ.7.AND.LA.LT.9) THEN
+c     all diff states go to resonances for pi beam ..
+            NPI=0
+            IRES = 0
+            LL(1) = LRES1(LA)
+            DELTAE = P0(5) -  AM(LL(1))
+cdh         IF( DELTAE.LT.AM(7)+0.02D0) GOTO 222
+            IF( DELTAE.LT.AM(7)+0.02D0) THEN
+              IF(IPAR(14).EQ.7)  DELTAE = P0(5) - AM(LA)
+              AV = 2.D0*DSQRT(DELTAE)
+ 201          NPI = INT(AV*(1.D0+0.5D0*GASDEV(LA)))
+c              print *,'npi:',npi,'av',av,'p05',p0(5),am(la),deltae
+              IF(NPI.LE.0.OR.NPI.GT.9.OR.AM(LA)+NPI*AM(7)+0.02D0
+     .             .GT.P0(5))  GOTO 201
+              IF (S_RNDM(0).LT.PCHEX)  THEN
+                 LL(NPI+1) = LCON(LA)*ISIGN(1,L0)
+                 IF( (L0 .EQ. 6) .OR. (L0 .EQ. 11) )
+     .                LL(NPI+1) = LL(NPI+1)+INT((2.D0-EPS8)*S_RNDM(1))
+              ELSE
+                 LL(NPI+1) = L0
+              ENDIF
+              JQQ = ICHP(LA)*ISIGN(1,L0)-
+     .             ICHP(IABS(LL(NPI+1)))*ISIGN(1,LL(NPI+1))
+ 221          JQTOT = 0
+              DO K=1,NPI-1
+                 LL(K) = 6+INT(S_RNDM(K)*(3.D0-EPS8))
+                 JQTOT = JQTOT + ICHP(LL(K))
+              ENDDO
+              JQR = JQQ-JQTOT
+              IF (JQR.LT.-1.OR.JQR.GT.1)  GOTO 221
+              LL(NPI) = 6+JQR
+              IF (LL(NPI) .EQ. 5)  LL(NPI)=8
+              CALL DECPAR (0,P0,NPI+1,LL, PD)
+              DO J=1,NPI+1
+                 NP = NP+1
+                 LLIST(NP) = LL(J)
+                 NPORIG(NP) = IPFLAG*2
+                 lrnk(Np) = 0
+                 niorig(NP)= iiflag
+                 DO K=1,5
+                    P(NP,K) = PD(J,K)
+                 ENDDO
+              ENDDO
+
+            ELSE
+              IF( S_RNDM(0).LT.PAR(31))THEN
+                 LL(1) = LRES1(LCON(LA))
+                 IF( (L0 .EQ. 6) .OR. (L0 .EQ. 11) )
+     .                LL(1) = LRES1(IABS(L0)+INT((2.D0-EPS8)*S_RNDM(1)))
+              ENDIF
+ 300          AV = 2.D0*dSQRT(DELTAE)
+              LA1 = IABS(LL(1))
+              NPI = INT(AV*(2.D0+0.5D0*GASDEV(LA)))
+              IF(ABS(PAR(32)).gt.0.D0)
+     &             NPI = INT(AV*(PAR(32)+0.5D0*GASDEV(LA)))
+              IF(NPI.LT.0.OR.NPI.GT.9.OR.AM(LA1)+NPI*AM(7)+0.02D0
+     .             .GT.P0(5))  GOTO 300
+c     create resonances inside fireball..
+c              IRES=3
+              JQQ = ICHP(LA)*ISIGN(1,L0)-
+     .             ICHP(IABS(LL(1)))*ISIGN(1,LL(1))
+ 320          JQTOT = 0
+              DO K=2,NPI
+                 LL(K) = 6+INT(S_RNDM(K)*(3.D0-EPS8))
+c     suppress pi0 in fireball
+c                 IF(IPAR(14).ge.4)
+c     +                LL(K) = 7+INT(S_RNDM(0)*1.99999D0)
+c       IF(IRES.EQ.1.and.S_RNDM(LA).LT.0.5D0)
+c                 LL(K) = 27-INT(S_RNDM(0)*2.99999D0)
+                 JQTOT = JQTOT + ICHP(LL(K))
+              ENDDO
+              JQR = JQQ-JQTOT
+              IF (JQR.LT.-1.OR.JQR.GT.1)  GOTO 320
+              LL(NPI+1) = 6+JQR
+              IF (LL(NPI+1) .EQ. 5)  LL(NPI+1)=8
+              CALL DECPAR (0,P0,NPI+1,LL, PD)
+              DO J=1,NPI+1
+                 NP = NP+1
+                 LLIST(NP) = LL(J)
+                 nporig(NP)= Ipflag*2
+                 lrnk(Np) = 0
+                 niorig(NP)= iiflag
+                 DO K=1,5
+                    P(NP,K) = PD(J,K)
+                 ENDDO
+              ENDDO
+            ENDIF
+
+         ELSEIF (IPAR(14).LE.-1) THEN
+C...  generalized fireball model
+            IF(Ndebug.gt.2) 
+     &           WRITE(LUN,*)' DIFDEC: using generalized fireball!'
+c     set charge exchange probability, 
+c     i.e. prob for p* -> n + pip
+            PCXG = PAR(61)
+            CALL FIREBALL_4FLV(L0,P0,PCXG,IFBAD)
+            IF(IFBAD.eq.1)THEN
+               IF(ndebug.gt.0)THEN
+                  IF(NRJECT.le.10)THEN
+                     WRITE(LUN,*)
+     &                    ' DIFDEC: warning: fireball rejection! ',
+     &                    'diff. mass to low to dissociate beam!'
+                     WRITE(LUN,*)
+     &                ' DIFDEC: m_Beam, DELTAE ,AM(7)+0.02, NCALL: ', 
+     &                AM(LA),DELTAE,'>',AM(7)+0.02D0,NCALL
+                  ENDIF
+                  IF(NRJECT.eq.10) 
+     &             write(lun,*)' this was the last warning.. good luck!'
+               ENDIF
+               NRJECT = NRJECT + 1
+               NP = 0
+               IBAD = 1
+               RETURN
+            ENDIF
+
+         ELSE
+cdh 222       IF(IPAR(14).EQ.7)  DELTAE = P0(5) - AM(LA)
+           IF(IPAR(14).EQ.7)  DELTAE = P0(5) - AM(LA)
+            AV = 2.D0*dSQRT(DELTAE)
+ 200        NPI = INT(AV*(1.D0+0.5D0*GASDEV(0)))
+c            print *,'npi:',npi,'av',av,'p05',p0(5),am(la),deltae
+            IF(NPI.LE.0.OR.NPI.GT.9.OR.AM(LA)+NPI*AM(7)+0.02D0
+     .           .GT.P0(5))  GOTO 200
+            IF (S_RNDM(0).LT.PCHEX)  THEN
+               LL(NPI+1) = LCON(LA)*ISIGN(1,L0)
+               IF( (L0 .EQ. 6) .OR. (L0 .EQ. 11) )
+     .              LL(NPI+1) = LL(NPI+1)+INT((2.D0-EPS8)*S_RNDM(1))
+            ELSE
+               LL(NPI+1) = L0
+            ENDIF
+            JQQ = ICHP(LA)*ISIGN(1,L0)-
+     .           ICHP(IABS(LL(NPI+1)))*ISIGN(1,LL(NPI+1))  
+ 220        JQTOT = 0
+            DO K=1,NPI-1
+               LL(K) = 6+INT(S_RNDM(K)*(3.D0-EPS8))
+               JQTOT = JQTOT + ICHP(LL(K))
+            ENDDO
+            JQR = JQQ-JQTOT
+            IF (JQR.LT.-1.OR.JQR.GT.1)  GOTO 220
+            LL(NPI) = 6+JQR
+            IF (LL(NPI) .EQ. 5)  LL(NPI)=8
+            CALL DECPAR (0,P0,NPI+1,LL, PD)
+            DO J=1,NPI+1
+               NP = NP+1
+               LLIST(NP) = LL(J)
+               NPORIG(NP) = IPFLAG*2
+               lrnk(Np) = 0
+               niorig(NP)= iiflag
+               DO K=1,5
+                  P(NP,K) = PD(J,K)
+               ENDDO
+            ENDDO
+         ENDIF
+      ELSE
+         if (ndebug .gt. 0) then
+           IF(NRJECT.le.10)THEN
+            WRITE(LUN,*) ' DIFDEC rejection! ',
+     &           'diff. mass to low to dissociate beam!'
+            WRITE(LUN,*) ' DIFDEC: LA, m_Beam, DELTAE, NCALL : ', 
+     &           LA, AM(LA),DELTAE,'>',AM(7)+0.02D0,NCALL
+            IF(Irec.ne.1) 
+     &           WRITE(LUN,*) '   was recursive call! (ECM):',P0(5)
+           ENDIF
+           IF(NRJECT.eq.10) 
+     &        write(lun,*)' this was the last warning.. good luck!'
+         endif
+         NRJECT = NRJECT + 1            
+         NP = 0
+         IBAD = 1
+         RETURN
+      ENDIF
+      PAR(1) = PAR1_def
+      END
+C=======================================================================
+
+      SUBROUTINE EXCT_RMNT(JW,KRMNT,IREJ)
+
+C-----------------------------------------------------------------------
+C     routine to produce massive excitations of beam and/or target \FR'14
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTMIN,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+
+      INTEGER IRMNT,KRB,KRT
+      DOUBLE PRECISION XRMASS,XRMEX
+      COMMON /S_RMNT/ XRMASS(2),XRMEX(2),IRMNT(NW_max),KRB,KRT(NW_max)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+      DOUBLE PRECISION XM2MIN,ALXMIN,SLOP0,ASLOP,BSLOP,XMASS
+      COMMON /S_DIFMAss/ XM2MIN(6),ALXMIN(6),SLOP0,ASLOP,BSLOP,XMASS(2)
+
+      DOUBLE PRECISION P1(5),P2(5),P1N(5),P2N(5),PBM1(5),PBM2(5),PBM(5),
+     &     PTG1(5),PTG2(5),PTG(5),PTT(5),GABE(4)
+      DOUBLE PRECISION XMB,XMB2,ALPHA,XMSQMIN,XM2MAX,XM2,SHAT,ECM,EE,EE2
+      DOUBLE PRECISION XMFRAC,XSFRAC,XMT,XMT2,XMT12,XMT22,P1TOT,P2TOT
+      DOUBLE PRECISION DELTAE,XMMIN,COD,COF,SID,SIF,ANORF,PX,PY,PZ
+      DOUBLE PRECISION XM1,ETOT,XI,XM2DIS,S_RNDM
+c     DOUBLE PRECISION XDUMMY
+
+      INTEGER   IMRG2HAD,LL(99)
+      INTEGER   IBM1,IBM2,IBMST1,IBMST2,ITG1,ITG2,ITGST1,ITGST2,ITGH
+      INTEGER   IDM,IFL,IBMH, IREF,I, II,K,J,JJ,L01,L02,NP0LD,NPLD
+      INTEGER   JW,IREJ,KRMNT,LREJ,IBD,ICST11,ICST21
+      INTEGER   IFLB1,IFLB2,IFLT1,IFLT2,L0,IDHAD,ISTH,IBMST,ITGST
+      INTEGER   IFL1,IFL2,IMRG,IMST,IMST1,IMRGBAR,ICST2,LBD
+      INTEGER   IMST11,IMST2,IMST21,ISTH1,ISTH2,IAFL1,IAFL2!,IMST22
+
+      SAVE
+      DATA LL /5*0,7*2,2*1,12*0,2,6*0,6*1,19*0,2,2,10*0,
+     &     2,2,0,2,2,11*0,1,1,1,9*0,1/     
+
+      
+c     default return point, beam and target sampling
+c      IREJ = 1
+
+      IF(NDEBUG.gt.2)
+     &     WRITE(LUN,*) ' EXCT_RMNT: input (JW,KRMNT,IREJ)', 
+     &     JW,KRMNT,IREJ
+
+      IF(NDEBUG.gt.3)THEN
+         write(LUN,*)'  beam remnant index: (lvl0,flv1,flv2)  ',IBMRDX
+         write(LUN,*)'  1st central string index: (lvl0,bm,tg)', 
+     &        (ICSTDX(2*(JW-1)+1,ii),ii=1,3)
+         write(LUN,*)'  2nd central string index: (lvl0,bm,tg)',
+     &        (ICSTDX(2*(JW-1)+2,ii),ii=1,3)
+         write(LUN,*)'  target remnant index: (lvl0,flv1,flv2)',
+     &        (ITGRDX(JW,ii),ii=1,3)
+      ENDIF
+
+      ITRY(5) = 0
+
+C...  select indices depending on configuration
+C     krmnt = 0 : no excitation on either side
+c           = 1 : beam side excited remnant
+c           = 2 : target side
+c           = 3 : both sides
+
+c     write remnant configuration to remnant common
+      IRMNT(JW) = KRMNT
+      IF(KRMNT.eq.1)THEN
+c     beam side remnant only
+c     proto-remnant position: IBMRDX(1)
+c     partons in : IBMRDX(2:3)
+         IBM1 = IBMRDX(2)
+         IBM2 = IBMRDX(3)
+c     target side to transfer energy from: 
+c     (sofar always choose valence pair)
+         ITG1 = ICSTDX(2*(JW-1)+1,3)
+         ITG2 = ICSTDX(2*(JW-1)+2,3)
+c     beam-side partons to go into central strings
+         IBMST1 = ICSTDX(2*(JW-1)+1,2)
+         IBMST2 = ICSTDX(2*(JW-1)+2,2)
+c     target-side partons to go into central strings
+         ITGST1 = ITG1
+         ITGST2 = ITG2
+
+      ELSEIF(KRMNT.eq.2)THEN
+c     target side remnant only
+c     proto-remnant in ITGRDX(JW,1)
+         ITG1 = ITGRDX(JW,2)
+         ITG2 = ITGRDX(JW,3)
+c     transfer energy from beam remnant or 
+c     central strings with valence quarks
+c     in ICSTDX(JW+0:1,2)
+c     means no beam remnant --> get from valence strings
+         IBM1 = ICSTDX(2*(JW-1)+1,2)
+         IBM2 = ICSTDX(2*(JW-1)+2,2)
+c     beam-side partons to go into central strings
+         IBMST1 = IBM1
+         IBMST2 = IBM2
+c     target-side partons to go into central strings
+         ITGST1 = ICSTDX(2*(JW-1)+1,3)
+         ITGST2 = ICSTDX(2*(JW-1)+2,3)
+
+      ELSEIF(KRMNT.eq.3)THEN
+c     beam and target side remnant
+c     transfer energy from pairs in rmnt or central strings
+c     listed in I?RDX and ICSTDX()
+         IBM1 = IBMRDX(2)
+         IBM2 = IBMRDX(3)
+         ITG1 = ITGRDX(JW,2)
+         ITG2 = ITGRDX(JW,3)
+
+      ELSEIF(KRMNT.eq.0)THEN
+c     no excited remnant case, jump straight to central strings..
+         GOTO 100
+
+      ENDIF
+
+      IF(NDEBUG.gt.3)then
+         write(lun,*) '  beam parton1:  ',IBM1
+         write(lun,*) '  beam parton2:  ',IBM2
+         write(lun,*) '  target parton1:',ITG1
+         write(lun,*) '  target parton2:',ITG2
+      endif
+
+c     save status of parton stack
+      CALL GET_NPP(NPLD,NP0LD)
+
+ 10   ITRY(5) = ITRY(5) + 1
+      IF(ITRY(5).GT.NREJ(5))THEN
+         IF(NDEBUG.gt.2) 
+     &        WRITE(LUN,*) ' EXCT_RMNT: no. of trials exceeded, ',
+     &        NREJ(5), 'resample minijets ...' , IREJ
+         RETURN
+      ENDIF
+c     reset parton stack after rmnt mass rejection
+      CALL INI_PRTN_STCK(NPLD,NP0LD)
+
+C..   construct 4momenta of proto-remnants
+c     index of beam remnant on stack: IBMRDX(1)
+
+C..   center-of-mass energy of parton system (s hat)
+c     calculated in hadron-hadron frame
+c     for first interaction (jw=1) partons are massless and collinear (sum pt=0)
+c     in this case ecm = SQS*SQRT(XB*XT), xb,t=x1+x2 
+c      for jw>1 beam partons may have already acquired mass and additional pt
+c     therefore ecm = sqs*sqrt(xb*xt) + corr.
+c     IRDX: index of remnant on parton stack
+c      SHAT = S*XB*XT+XM2+(XT/XB)*XMT2
+
+c     with 4momenta of partons on stack, momentum fractions are obsolete
+c     center-of-mass energy is simply: shat = (pbm+ptg)**2
+
+c     construct total 4momentum
+c     add beam-side parton momenta, in had.-had. frame
+      CALL RD_PRTN_4VEC(IBM1,PBM1,IFL,IDM)
+      CALL RD_PRTN_4VEC(IBM2,PBM2,IFL,IBMH)
+      CALL ADD_4VECS(PBM1,PBM2,PBM)
+      
+c     target-side parton momenta, in had.-had. frame
+      CALL RD_PRTN_4VEC(ITG1,PTG1,IFL,IDM)
+      CALL RD_PRTN_4VEC(ITG2,PTG2,IFL,IDM)
+      CALL ADD_4VECS(PTG1,PTG2,PTG)
+      
+c     add beam and target side to get total 4momentum
+      CALL ADD_4VECS(PBM,PTG,PTT)
+      SHAT = PTT(5)**2
+      ECM = PTT(5)
+c     catch virtual remnants
+      IF(PTT(5).LT.0.D0) THEN
+         IF(NDEBUG.GT.2)THEN
+            WRITE(LUN,*) ' EXCT_RMNT: too little mass left (Shat):',
+     &           SHAT
+            WRITE(LUN,*) '        resample minijets...'
+         ENDIF
+         LREJ = 2
+         RETURN                 ! resample minijets
+      ENDIF
+
+
+      IF(NDEBUG.GT.2) WRITE(LUN,*) ' EXCT_RMNT: try no.',ITRY(5)
+      IF(NDEBUG.GT.3)THEN
+         write(LUN,*) '  4momenta before scattering:'
+         write(LUN,*) '  PBM1:' , (PBM1(jj),jj=1,5)
+         write(LUN,*) '  PBM2:' , (PBM2(jj),jj=1,5)
+         write(LUN,*) '  PBM:' , (PBM(jj),jj=1,5)
+
+         write(LUN,*) '  PTG1:' , (PTG1(jj),jj=1,5)
+         write(LUN,*) '  PTG2:' , (PTG2(jj),jj=1,5)
+         write(LUN,*) '  PTG:' , (PTG(jj),jj=1,5)
+
+         write(LUN,*) '  PTT:' , (PTT(jj),jj=1,5)
+      ENDIF
+
+      IF(NDEBUG.gt.2)
+     &     WRITE(LUN,*)' EXCT_RMNT: SHAT:',SHAT
+
+      XMFRAC = PAR(81)
+      XSFRAC = PAR(82)
+
+c     exponent of remnant mass distribution (1/Mx**2)**alpha
+c     by default: alpha = 1
+c     different for baryons and mesons
+c      ALPHA = PAR(98)
+
+C..   Sample masses
+      IF(KRMNT.eq.1)THEN
+         XM2MAX = MIN(XSFRAC*S,XMFRAC*AM2(IABS(KB)))
+         XM2MAX = MAX(XM2MAX,1.D0)
+
+c     mass of target-side: 0
+         XMT = 0.D0
+         XMT2 = 0.D0
+c     get remnant mass
+c     (might have received mass from prior interaction)
+         CALL GET_MASS2(IBMRDX(1),XM2)
+c     allowing excitation to fallback to beam means min.
+c     mass is beam mass, or more exact smallest mass of hadrons 
+c     with flavors in remnant
+         IF(IPAR(64).eq.1)THEN
+c     remnant mass can also decrease through interactions
+            XMSQMIN = AM2(IABS(KB))
+         ELSE
+c     remnant mass only increased by multiple interactions..
+            XMSQMIN = MAX(AM2(IABS(KB)),XM2)
+         ENDIF
+C     select exponent from COMMON
+         ALPHA = XRMEX(LL(IABS(KB)))
+c     sample beam mass
+         XMB2 = XM2DIS(XMSQMIN,XM2MAX,ALPHA)
+         IF(NDEBUG.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: XM2min,XM2max,ALPHA,XM2:',
+     &        XMSQMIN,XM2MAX,ALPHA,XMB2
+c     check if resonance or massive hadron has to be formed
+         CALL SEL_RES(XMB2,KRB,IBMRDX(1),IBMH)
+         XMB = dsqrt(XMB2)
+
+      ELSEIF(KRMNT.eq.2)THEN
+c     target side mass
+         XM2MAX = MIN(XSFRAC*S,XMFRAC*AM2(IABS(KT(JW))))
+         XM2MAX = MAX(XM2MAX,1.D0)
+
+         XMB = 0.D0
+         XMB2 = 0.D0
+         XMSQMIN = AM2(KT(JW))
+C     select exponent from COMMON
+         ALPHA = XRMEX(LL(IABS(KT(JW))))
+         XMT2 = XM2DIS(XMSQMIN,XM2MAX,ALPHA)
+         IF(NDEBUG.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: XM2min,XM2max,ALPHA,XM2:',
+     &        XMSQMIN,XM2MAX,ALPHA,XMT2
+
+c     check if resonance or massive hadron has to be formed
+         CALL SEL_RES(XMT2,KRT(JW),ITGRDX(JW,1),ITGH)
+         XMT = dsqrt(XMT2)
+
+      ELSEIF(KRMNT.eq.3)THEN
+         XM2MAX = MIN(XSFRAC*S,XMFRAC*AM2(IABS(KB)))
+         XM2MAX = MAX(XM2MAX,1.D0)
+
+         CALL GET_MASS2(IBMRDX(1),XM2)
+         IF(IPAR(64).eq.1)THEN
+c     remnant mass can also decrease through interactions
+            XMSQMIN = AM2(IABS(KB))
+         ELSE
+c     remnant mass only increased by multiple interactions..
+            XMSQMIN = MAX(AM2(IABS(KB)),XM2)
+         ENDIF
+C     select exponent from COMMON
+         ALPHA = XRMEX(LL(IABS(KB)))        
+         XMB2 = XM2DIS(XMSQMIN,XM2MAX,ALPHA)
+         IF(NDEBUG.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: XM2min,XM2max,ALPHA,xm2:',
+     &        XMSQMIN,XM2MAX,ALPHA,XMB2
+
+c     check if resonance or massive hadron has to be formed
+         CALL SEL_RES(XMB2,KRB,IBMRDX(1),IBMH)
+         XMB = SQRT(XMB2)
+         
+c     target always nucleon
+         XM2MAX = MIN(XSFRAC*S,XMFRAC*AM2(IABS(KT(JW))))
+         XM2MAX = MAX(XM2MAX,1.D0)
+
+         XMSQMIN = AM2(IABS(KT(JW)))
+C     select exponent from COMMON
+         ALPHA = XRMEX(LL(IABS(KT(JW))))        
+         XMT2 = XM2DIS(XMSQMIN,XM2MAX,ALPHA)
+         IF(NDEBUG.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: XM2min,XM2max,alpha,XM2:',
+     &        XMSQMIN,XM2MAX,ALPHA,XMT2
+
+c     check if resonance or massive hadron has to be formed
+         CALL SEL_RES(XMT2,KRT(JW),ITGRDX(JW,1),ITGH)
+         XMT = SQRT(XMT2)
+
+      ENDIF
+c     write excitation mass to output common
+      XRMASS(1) = XMB
+      XRMASS(2) = XMT
+
+c     minimal mass requirement
+c      IF(SHAT.lt.XMB2+XMT2+0.3) GOTO 10
+      IF(SHAT.lt.XMB2+XMT2+2.D0*XMB*XMT+0.3D0) GOTO 10
+
+C     transfer cm energy to mass of particle in parton-parton cm
+      CALL TRANSFONSHELL(ECM,XMB,XMT,XM2MAX,1,P1,P2,IBD)
+      IF(IBD.eq.1) THEN
+         IF(NDEBUG.gt.2) WRITE(LUN,*) ' EXCT_RMNT: excitation rejected!'
+         RETURN
+      ENDIF
+
+C...  Boost 4momenta to hadron-hadron center-of-mass
+c     along z only if initial partons do not carry transverse momentum
+c     (cancels between val1 and val2)
+c     with multiple nucleons interacting beam val partons can aquire 
+c     transverse momentum from the target. in this case need arbitrary boost
+      DO K = 1,4
+         GABE(k) = PTT(k)/PTT(5)
+      ENDDO
+      CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &     P1(1),P1(2),P1(3),P1(4),
+     &     P1TOT,P1N(1),P1N(2),P1N(3),P1N(4))
+      P1N(5)=P1(5)
+      CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &     P2(1),P2(2),P2(3),P2(4),
+     &     P2TOT,P2N(1),P2N(2),P2N(3),P2N(4))
+      P2N(5)=P2(5)
+
+C...  Calculate new 4momentum of partons in had.-had. frame
+c     P1,P2: momenta after scattering in parton-parton cm.
+c     P1n,P2n: momenta after scattering in had.-had. cm
+c     PBM1,2: momenta of beam partons in had.-had. before scattering
+c     PTG1,2: momenta of target partons in had.-had. before scattering
+c     PBM: combined momentum of all beam partons before scattering
+c     PTG: combined momentum of all target partons before scattering
+
+c     energy and z component
+      DO II=3,4
+         PBM1(II) = PBM1(II)*P1n(II)/PBM(II)
+         PBM2(II) = PBM2(II)*P1n(II)/PBM(II)
+
+         PTG1(II) = PTG1(II)*abs(P2N(II)/PTG(II))
+         PTG2(ii) = PTG2(ii)*abs(P2N(II)/PTG(II))
+      ENDDO
+
+c     if transverse momentum prior to interaction zero then
+c     assign transverse momentum of partons according to random fraction
+      IF(ABS(PBM(1)).LT.EPS10.or.ABS(PBM(2)).LT.EPS10)THEN
+         DO II = 1,2
+            XI = S_RNDM(II)
+            PBM1(II) = XI*P1N(Ii)
+            PBM2(II) = (1.D0-XI)*P1N(II)
+         ENDDO
+      ELSE
+         DO II=1,2
+            PBM1(II) = PBM1(II)*P1N(II)/PBM(II)
+            PBM2(II) = PBM2(II)*P1N(II)/PBM(II)
+         ENDDO         
+      ENDIF
+
+      IF(ABS(PTG(1)).LT.EPS10.or.ABS(PTG(2)).LT.EPS10)THEN
+         DO II=1,2
+            XI = S_RNDM(II)
+            PTG1(II) = XI*P2N(II)
+            PTG2(II) = (1.D0-XI)*P2N(II)
+         ENDDO
+      ELSE
+         DO II=1,2
+            PTG1(II) = PTG1(II)*P2N(II)/PTG(II)
+            PTG2(II) = PTG2(II)*P2N(II)/PTG(II)
+         ENDDO                  
+      ENDIF
+
+      IF(NDEBUG.GT.3)THEN
+         write(LUN,*) '  parton 4momenta after scattering:'
+         write(LUN,*) '   PBM1:' , (PBM1(jj),jj=1,5)
+         write(LUN,*) '   PBM2:' , (PBM2(jj),jj=1,5)
+         write(LUN,*) '   sum: ' , (PBM2(jj)+PBM1(jj),jj=1,5)
+         write(LUN,*) '   PTG1:' , (PTG1(jj),jj=1,5)
+         write(LUN,*) '   PTG2:' , (PTG2(jj),jj=1,5)
+         write(LUN,*) '   sum: ' , (PTG2(jj)+PTG1(jj),jj=1,5)
+      ENDIF
+      
+C...  change parton 4momenta on stack
+      CALL EDT_PRTN(IBM1,PBM1(1),PBM1(2),PBM1(3),PBM1(4),PBM1(5),IDM)
+      CALL EDT_PRTN(IBM2,PBM2(1),PBM2(2),PBM2(3),PBM2(4),PBM2(5),IDM)
+
+      CALL EDT_PRTN(ITG1,PTG1(1),PTG1(2),PTG1(3),PTG1(4),PTG1(5),IDM)
+      CALL EDT_PRTN(ITG2,PTG2(1),PTG2(2),PTG2(3),PTG2(4),PTG2(5),IDM)
+         
+C...  add remnants
+c     references are circular: 
+c     rmnt --> parton1 --> parton2 --> lvl2 rmnt (hadron) --> rmnt
+      IF(KRMNT.eq.1)THEN
+c     beam side remnant, add only if does not exist yet otherwise edit
+         IF(IBMRDX(1).eq.0)THEN
+            CALL ADD_PRTN
+     &           (P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),2,0,IBM1,IBMRDX(1))
+         ELSE
+            CALL EDT_PRTN
+     &           (IBMRDX(1),P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),IREF)
+         ENDIF
+c     add beam hadron as hypothetical final state
+         IF(IBMH.eq.0)THEN
+            CALL ADD_PRTN
+     &         (P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),KRB,2,IBMRDX(1),IBMH)
+         ELSE
+            CALL EDT_PRTN
+     &           (IBMH,P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),IREF)
+         ENDIF
+c     add references rmnt --> parton1 etc
+         CALL ADD_REF(IBMRDX(1),IBM1)
+         CALL ADD_REF(IBM1,IBM2)
+         CALL ADD_REF(IBM2,IBMH)
+
+      ELSEIF(KRMNT.eq.2)THEN
+c     add target side remnant
+         IF(ITGRDX(JW,1).eq.0)THEN
+            CALL ADD_PRTN
+     &           (P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),
+     &           -2,0,0,ITGRDX(JW,1))
+         ELSE
+            CALL EDT_PRTN
+     &           (ITGRDX(JW,1),P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),IREF)
+         ENDIF
+         IF(ITGH.eq.0)THEN
+c     add target hadron as hypothetical final state, always nucleon
+            CALL ADD_PRTN
+     &           (P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),
+     &           KRT(JW),2,ITGRDX(JW,1),ITGH)
+         ELSE
+            CALL EDT_PRTN
+     &           (ITGH,P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),IREF)
+         ENDIF
+
+c     add references rmnt --> parton1 etc
+         CALL ADD_REF(ITGRDX(JW,1),ITG1)
+         CALL ADD_REF(ITG1,ITG2)
+         CALL ADD_REF(ITG2,ITGH)
+
+      ELSEIF(KRMNT.eq.3)THEN
+c     beam side remnant, add only if does not exist yet, otherwise edit
+         IF(IBMRDX(1).EQ.0)THEN
+            CALL ADD_PRTN
+     &           (P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),2,0,0,IBMRDX(1))
+         ELSE
+            CALL EDT_PRTN
+     &           (IBMRDX(1),P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),IREF)
+         ENDIF
+c     add beam hadron as hypothetical final state
+         IF(IBMH.EQ.0)THEN
+            CALL ADD_PRTN
+     &         (P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),KRB,2,IBMRDX(1),IBMH)
+         ELSE
+            CALL EDT_PRTN
+     &           (IBMH,P1N(1),P1N(2),P1N(3),P1N(4),P1N(5),IREF)
+         ENDIF
+         CALL ADD_REF(IBMRDX(1),IBM1)
+         CALL ADD_REF(IBM1,IBM2)
+         CALL ADD_REF(IBM2,IBMH)
+
+c     add target side remnant
+         IF(ITGRDX(JW,1).eq.0)THEN
+            CALL ADD_PRTN
+     &           (P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),-2,0,0,IREF)
+            ITGRDX(JW,1) = IREF
+         ELSE
+            CALL EDT_PRTN
+     &           (ITGRDX(JW,1),P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),IREF)
+         ENDIF
+         IF(ITGH.eq.0)THEN
+c     add target hadron as hypothetical final state
+            CALL ADD_PRTN
+     &           (P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),
+     &           KRT(JW),2,ITGRDX(JW,1),ITGH)
+         ELSE
+            CALL EDT_PRTN
+     &           (ITGH,P2N(1),P2N(2),P2N(3),P2N(4),P2N(5),IREF)
+         ENDIF
+c     add references rmnt --> parton1 etc
+         CALL ADD_REF(ITGRDX(JW,1),ITG1)
+         CALL ADD_REF(ITG1,ITG2)
+         CALL ADD_REF(ITG2,ITGH)
+
+      ENDIF
+
+ 100  IF(JDIF(JW).ne.0.and.NWD.ne.1)THEN
+c     incoherent diffraction case
+c     add parton 4momenta to obtain c.m energy
+         
+c     beam side
+         IBMST1 = ICSTDX(2*(JW-1)+1,2)
+         IBMST2 = ICSTDX(2*(JW-1)+2,2)
+
+c     target side
+         ITGST1 = ICSTDX(2*(JW-1)+1,3)
+         ITGST2 = ICSTDX(2*(JW-1)+2,3)
+         
+         CALL RD_PRTN_4VEC(IBMST1,PBM1,IFLB1,IDM)
+         CALL RD_PRTN_4VEC(IBMST2,PBM2,IFLB2,IDM)
+         CALL ADD_4VECS(PBM1,PBM2,PBM)
+         CALL RD_PRTN_4VEC(ITGST1,PTG1,IFLT1,IDM)
+         CALL RD_PRTN_4VEC(ITGST2,PTG2,IFLT2,IDM)
+         CALL ADD_4VECS(PTG1,PTG2,PTG)
+c     total 4momentum
+         CALL ADD_4VECS(PBM,PTG,PTT)
+c     add diffractive system to parton stack
+c     references are: diff --> diff. hadron 
+c     --> beam parton1 --> beam parton2 --> target parton1 etc
+         CALL ADD_PRTN_4VEC(PTT,-10*JDIF(JW),0,IBMST1,IREF)
+         CALL ADD_INT_REF(IREF,IINTDX(JW))
+c     both string indices point to diff. system
+         ICSTDX(2*(JW-1)+1,1) = IREF
+         ICSTDX(2*(JW-1)+2,1) = IREF
+c     add diff. beam hadron to stack
+c     model assumes remnant always excited in first interaction
+         L0 = KB
+c     if not first interaction or remnant excited, merge sea pair to hadron
+         IF(KRMNT.ne.0.or.JW.ne.1) THEN       
+            L0 = IMRG2HAD(IFLB1,IFLB2)
+c     CALL SIB_I4FLAV(IFLB1,IFLB2,IDM,IDM1,L0)
+         ENDIF
+c     check kinematic limits
+c     m2_max should be smaller than m2_min
+         IREJ = 1
+         EE = PTT(5)
+         EE2 = PTT(5)**2
+         K = 2-IBAR(IABS(L0))
+         IF(JDIF(jw).gt.1)THEN
+            DELTAE = EE-AM(13)
+            XMMIN=max(XM2MIN(1),(AM(IABS(l0))+AM(7)+0.02D0)**2)
+         ELSE
+            DELTAE = EE-AM(IABS(L0))
+            XMMIN=max(XM2MIN(K),(AM(IABS(l0))+AM(7)+0.02D0)**2)
+         ENDIF
+c         print *,'jw,jdif,nwd,l0,ifl1,ifl2,deltae,xmin,ee,xmax',
+c     &        jw,jdif(jw),nwd,l0,ifl1,ifl2,deltae,xmmin,ee,par(13)*ee2
+         IF(DELTAE.lt.AM(7)+0.02D0) THEN
+            IF(ndebug.gt.2) 
+     &           WRITE(lun,*) ' EXCT_RMNT: inchoherent diff. :',
+     &           ' not enough mass left for excitation! (DELTAE,PION,',
+     &           'IREJ,NCALL)',DELTAE,AM(7)+0.02D0,IREJ,NCALL
+            RETURN
+         ENDIF
+         IF(PAR(13)*EE2.lt.XMMIN)THEN
+            IF(ndebug.gt.2)
+     &           WRITE(lun,*) ' EXCT_RMNT: inchoherent diff. :',
+     &           ' not enough mass left for excitation! (min,max,',
+     &           'IREJ,NCALL)',PAR(13)*EE2,XMMIN,IREJ,NCALL
+            RETURN
+         ENDIF
+         CALL ADD_PRTN_4VEC(PTT,L0,2,IBMST1,IDHAD)
+         CALL ADD_REF(IREF,IDHAD)
+c     reset references of partons
+         CALL ADD_REF(IBMST1,IBMST2)
+         CALL ADD_REF(IBMST2,ITGST1)
+         CALL ADD_REF(ITGST1,ITGST2)
+         CALL ADD_REF(ITGST2,IREF)
+         IF(ndebug.gt.2) THEN
+            WRITE(LUN,*) ' EXCT_RMNT: incoherent diff. ',
+     &           '(IDX,IDX2,JDIF,ECM,L0)',IREF,IDHAD,JDIF(JW),PTT(5),L0
+            WRITE(LUN,*) ' EXCT_RMNT: DELTAE,XM2MAX:',DELTAE,PAR(13)*EE2
+         ENDIF
+         IREJ = 0
+         RETURN
+      ENDIF
+
+C...  add central strings to stack
+c     partons designated for central strings 
+c     are indexed in ICSTDX(JW,2:3)
+c     pstr_j = p_j_bm + p_j_tg
+c     string mass ** 2 = pstr_j ** 2
+c     --> read momenta from stack, add beam and target side, 
+c     references are set in a loop:
+c     string --> beam-parton --> target-parton --> string
+c     then write string 4momentum on stack
+      IMRG = 0
+      DO JJ=1,2
+         ISTH = 0
+         IBMST = ICSTDX(2*(JW-1)+JJ,2)
+         ITGST = ICSTDX(2*(JW-1)+JJ,3)
+         CALL RD_PRTN_4VEC(IBMST,PBM1,IFL1,IDM)
+         CALL RD_PRTN_4VEC(ITGST,PTG1,IFL2,IDM)
+         CALL ADD_4VECS(PBM1,PTG1,PTT)
+c     transverse mass of string end partons (pt**2)
+         CALL GET_XMT2(IBMST,XMT12)
+         CALL GET_XMT2(ITGST,XMT22)
+c     available mass for string
+         EE = SQRT(PTT(4)**2-PTT(3)**2)
+c     catch virtual strings
+         IF(PTT(5).lt.0.D0) THEN
+            IREJ = 1
+            IF(ndebug.gt.2)
+     &           write(LUN,*)' EXCT_RMNT: virt. string (M):',EE
+            IF(ndebug.gt.3)then
+               CALL GET_IMASS2(IBMST,XM2)
+               write(LUN,*) '  PBM1:', (PBM1(j),j=1,5),XM2
+               CALL GET_IMASS2(ITGST,xm2)
+               write(LUN,*) '  PTG1:', (PTG1(j),j=1,5),XM2
+               write(LUN,*) '  Ptot:', (PTT(j),j=1,5)
+            ENDIF
+c               stop
+            RETURN
+         ENDIF
+c     minimal string mass requirement
+         IF(EE.lt.sqrt(XMT12)+sqrt(XMT22)+PAR(123))THEN
+            IAFL1 = IABS(IFL1)
+            IAFL2 = IABS(IFL2)
+            IF(IPAR(74).eq.1)THEN
+c     try to form single meson, set merge flag
+               IF(IAFL1.gt.10.and.IAFL2.gt.10) THEN
+c     skip if two diquarks need merging..                  
+                  IREJ = 1
+                  RETURN
+               ENDIF
+               IF((IAFL1/10.eq.4.or.mod(IAFL1,10).eq.4)
+     +              .and.(IAFL2/10.eq.4.or.mod(IAFL2,10).eq.4)) THEN
+c     skip if two charm quarks need merging..                  
+                  IREJ = 1
+                  RETURN
+               ENDIF                             
+               L0 = IMRG2HAD(IFL1,IFL2)
+               IF(EE.gt.AM(IABS(L0))) then
+                  IMRG = IMRG + JJ
+                  CALL ADD_PRTN_4VEC(PTT,L0,2,IBMST,ISTH)
+                  IF(ndebug.gt.2)then
+                     write(lun,*)
+     &                    ' EXCT_RMNT: c.string mass too low! ',
+     &                    'merge into hadron..',l0
+                  ENDIF
+               ENDIF
+            ELSE
+               IF(ndebug.gt.2)then
+                  write(lun,*)
+     &                 ' EXCT_RMNT: c.string kinematic rejection!'
+                  write(lun,*) ' EE,limit,XMT1,XMT2:',
+     &                 EE,sqrt(XMT12)+sqrt(XMT22)+0.3D0,sqrt(XMT12),
+     &                 sqrt(XMT22)
+                  write(lun,*) ' return to momentum sampling..'
+               endif
+               IREJ = 1
+               RETURN
+            ENDIF
+         ENDIF
+c     add central string to stack, refering to beam-end parton
+         CALL ADD_PRTN_4VEC(PTT,1,0,IBMST,IREF)
+         ICSTDX(2*(JW-1)+JJ,1) = IREF
+         CALL ADD_INT_REF(Iref,IINTDX(JW))
+c     add reference to target parton to beam parton
+         CALL ADD_REF(IBMST,ITGST)
+         IF(ISTH.ne.0) THEN
+c     if string merged to hadron add reference corresponding reference            
+            CALL ADD_REF(ITGST,ISTH)
+            CALL ADD_REF(ISTH,IREF)
+         ELSE
+c     add reference to corresponding central string to target parton
+            CALL ADD_REF(ITGST,IREF)
+         ENDIF
+      ENDDO
+      
+c     form single hadron from string if mass was too low ..
+c     need to put hadron on shell by exchanging energy with other string            
+      IF(IMRG.eq.1.or.IMRG.eq.2)THEN
+         IF(ndebug.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: merging one string..',IMRG
+c     one string merged
+c     index of merged string and its last parton
+         IMST = ICSTDX(2*(JW-1)+IMRG,1)
+         IMST1 = ICSTDX(2*(JW-1)+IMRG,3)
+c     index of ordinary string
+         IMRGBAR = 3-IMRG
+         ICST2 = ICSTDX(2*(JW-1)+IMRGBAR,1)
+c     read 4momenta
+         CALL RD_REF(IMST1,ISTH)
+         CALL RD_PRTN_4VEC(ISTH,P1,L0,IREF)
+c     string two
+         CALL RD_PRTN_4VEC(ICST2,P2,IFL2,IDM)
+c     cm energy
+         CALL ADD_4VECS(P1,P2,PTT)
+         IF(ndebug.gt.2)THEN
+            write(lun,*)' EXCT_RMNT: string A :',(P1(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: string B :',(P2(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: total :',(PTT(i),i=1,5)
+         ENDIF
+         ECM = PTT(5)
+         XM1 = AM(IABS(L0))
+         XM2 = P2(5)
+         CALL TRANSFONSHELL(ECM,XM1,XM2,1.D0,3,P1N,P2N,LBD)
+         IF(LBD.eq.1) THEN
+            IF(NDEBUG.gt.2)
+     &           WRITE(LUN,*)' EXCT_RMNT: mass transfer failed!'
+            RETURN
+         ENDIF
+c     by definition p1n is along +z in string cm, need to invert if pzA < pzB
+c         IF(P2(3).gt.P1(3)) CALL SWTCH_LMNTS(P1N(3),P2N(3))
+
+C..   rotate parton-parton axis onto string-string axis
+c     therefore boost to parton-parton cm
+c     to calc. rotation angles BEFORE interaction !
+         DO K = 1,4
+            GABE(K) = PTT(K)/PTT(5)
+         enddo         
+         CALL SIB_ALTRA(GABE(4),-GABE(1),-GABE(2),-GABE(3),
+     &        P1(1),P1(2),P1(3),P1(4),
+     &        P1TOT,PBM1(1),PBM1(2),PBM1(3),PBM1(4))
+c     rotation factors
+         COD= PBM1(3)/P1TOT
+         SID= DSQRT(PBM1(1)**2+PBM1(2)**2)/P1TOT
+         COF=1.D0
+         SIF=0.D0
+         IF(P1TOT*SID.GT.EPS5) THEN
+            COF=PBM1(1)/(SID*P1TOT)
+            SIF=PBM1(2)/(SID*P1TOT)
+            ANORF=DSQRT(COF*COF+SIF*SIF)
+            COF=COF/ANORF
+            SIF=SIF/ANORF
+         ENDIF
+         IF(ndebug.gt.2)THEN
+            write(lun,*)' EXCT_RMNT: momentum in cm:',(PBM1(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: rotation factors:',COD,SID,COF,SIF
+            write(lun,*)' EXCT_RMNT: rotation angles (theta,phi):',
+     &           ACOS(COD),ACOS(COF),ASIN(SID),ASIN(SIF)
+            write(lun,*)' EXCT_RMNT: momentum:',
+     &           sqrt(P1N(1)**2+P1N(2)**2+P1N(3)**2)
+         ENDIF
+c     rotate parton momenta after interaction, still in parton-parton frame
+         CALL SIB_TRANI(P1N(1),P1N(2),P1N(3),COD,SID,COF,SIF
+     &        ,PX,PY,PZ)
+         P1N(1)=PX
+         P1N(2)=PY
+         P1N(3)=PZ
+         CALL SIB_TRANI(P2N(1),P2N(2),P2N(3),COD,SID,COF,SIF
+     &        ,PX,PY,PZ)
+         P2N(1)=PX
+         P2N(2)=PY
+         P2N(3)=PZ
+         IF(ndebug.gt.2) write(lun,*)' EXCT_RMNT: momentum*:',
+     &        sqrt(P1N(1)**2+P1N(2)**2+P1N(3)**2)
+
+c     boost back to hadron-hadron
+         DO K = 1,4
+            GABE(K) = PTT(K)/PTT(5)
+         ENDDO
+         CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &        P1N(1),P1N(2),P1N(3),P1N(4),
+     &        P1TOT,P1(1),P1(2),P1(3),P1(4))
+         P1(5)=P1N(5)
+         CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &        P2N(1),P2N(2),P2N(3),P2N(4),
+     &        P2TOT,P2(1),P2(2),P2(3),P2(4))
+         p2(5)=p2n(5)
+         IF(ndebug.gt.2)THEN
+            write(lun,*)' EXCT_RMNT: momenta after scattering:'
+            write(lun,*)' EXCT_RMNT: hadron A :',(P1(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: string B :',(P2(i),i=1,5)
+         ENDIF
+
+c     edit partons on stack
+         CALL EDT_PRTN
+     &        (ISTH,P1(1),P1(2),P1(3),P1(4),P1(5),IREF)
+         ICST11 = ICSTDX(2*(JW-1)+IMRG,2)
+         CALL EDT_PRTN
+     &        (IMST,P1(1),P1(2),P1(3),P1(4),P1(5),ICST11)
+         ICST21 = ICSTDX(2*(JW-1)+IMRGBAR,2)
+         CALL EDT_PRTN
+     &        (ICST2,P2(1),P2(2),P2(3),P2(4),P2(5),ICST21)
+         
+      ELSEIF(IMRG.eq.3)THEN
+         IF(ndebug.gt.2)
+     &        WRITE(LUN,*)' EXCT_RMNT: merge both strings..'
+
+c     both strings merged
+c     index of merged string and its last parton
+         IMST1 = ICSTDX(2*(JW-1)+1,1)
+         IMST11 = ICSTDX(2*(JW-1)+1,3)
+c     index of ordinary string
+         IMST2 = ICSTDX(2*(JW-1)+2,1)
+         IMST21 = ICSTDX(2*(JW-1)+2,3)
+c     read 4momenta
+         CALL RD_REF(IMST11,ISTH1)
+         CALL RD_PRTN_4VEC(ISTH1,P1,L01,IREF)
+c     string two
+         CALL RD_REF(IMST21,ISTH2)
+         CALL RD_PRTN_4VEC(ISTH2,P2,L02,IREF)
+         XM1 = AM(IABS(L01))
+         XM2 = AM(IABS(L02))
+c     cm energy
+         CALL ADD_4VECS(P1,P2,PTT)
+         ECM = PTT(5)
+         ETOT = PTT(4)
+         IF(ndebug.gt.2)THEN
+            write(lun,*)' EXCT_RMNT: string A :',(P1(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: string B :',(P2(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: total :',(PTT(i),i=1,5)
+         ENDIF
+
+         CALL TRANSFONSHELL(ecm,xm1,xm2,1.D0,3,P1n,P2n,LBD)
+         IF(LBD.eq.1) THEN
+            IF(NDEBUG.gt.2)
+     &           WRITE(LUN,*)' EXCT_RMNT: mass transfer failed!'
+            RETURN
+         ENDIF
+c     by definition p1n is along +z in string cm, need to invert if pzA < pzB
+c         IF(P2(3).gt.P1(3)) CALL SWTCH_LMNTS(P1N(3),P2N(3))
+c     rotate parton-parton axis onto string-string axis
+c     boost to parton-parton cm to calc. rotation angles BEFORE interaction!
+         DO K = 1,4
+            GABE(K) = PTT(K)/PTT(5)
+         ENDDO
+         CALL SIB_ALTRA(GABE(4),-GABE(1),-GABE(2),-GABE(3),
+     &        P1(1),P1(2),P1(3),P1(4),
+     &        P1TOT,PBM1(1),PBM1(2),PBM1(3),PBM1(4))
+c     rotation factors
+         COD= PBM1(3)/P1TOT
+         SID= DSQRT(PBM1(1)**2+PBM1(2)**2)/P1TOT
+         COF=1.D0
+         SIF=0.D0
+         IF(P1TOT*SID.GT.EPS5) THEN
+            COF=PBM1(1)/(SID*P1TOT)
+            SIF=PBM1(2)/(SID*P1TOT)
+            ANORF=DSQRT(COF*COF+SIF*SIF)
+            COF=COF/ANORF
+            SIF=SIF/ANORF
+         ENDIF
+c     rotate parton momenta after interaction
+         CALL SIB_TRANI(P1N(1),P1N(2),P1N(3),COD,SID,COF,SIF
+     &        ,PX,PY,PZ)
+         P1N(1)=PX
+         P1N(2)=PY
+         P1N(3)=PZ
+         CALL SIB_TRANI(P2N(1),P2N(2),P2N(3),COD,SID,COF,SIF
+     &        ,PX,PY,PZ)
+         P2N(1)=PX
+         P2N(2)=PY
+         P2N(3)=PZ
+
+c     boost massive hadrons back to hadron-hadron
+         CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &        P1N(1),P1N(2),P1N(3),P1N(4),
+     &        P1TOT,P1(1),P1(2),P1(3),P1(4))
+         P1(5)=P1N(5)
+         CALL SIB_ALTRA(GABE(4), GABE(1), GABE(2), GABE(3),
+     &        P2N(1),P2N(2),P2N(3),P2N(4),
+     &        P2TOT,P2(1),P2(2),P2(3),P2(4))
+         P2(5)=P2N(5)
+         IF(ndebug.gt.2)THEN
+            write(lun,*)' EXCT_RMNT: hadron A :',(P1(i),i=1,5)
+            write(lun,*)' EXCT_RMNT: hadron B :',(P2(i),i=1,5)
+         ENDIF
+
+c     edit partons on stack
+         CALL EDT_PRTN
+     &        (ISTH1,P1(1),P1(2),P1(3),P1(4),P1(5),IREF)
+         ICST11 = ICSTDX(2*(JW-1)+1,2)
+         CALL EDT_PRTN
+     &        (IMST1,P1(1),P1(2),P1(3),P1(4),P1(5),ICST11)
+
+         CALL EDT_PRTN
+     &        (ISTH2,P2(1),P2(2),P2(3),P2(4),P2(5),IREF)
+         ICST21 = ICSTDX(2*(JW-1)+2,2)
+         CALL EDT_PRTN
+     &        (IMST2,P2(1),P2(2),P2(3),P2(4),P2(5),ICST21)
+         
+      ENDIF
+
+      IREJ = 0
+
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE FIREBALL_4FLV(L0,P0,PCHEXin,IREJ)
+
+C-----------------------------------------------------------------------
+C... "decay" of an excited state with the quantum numbers
+C.   of particle L0 and the 5-momentum P0
+C.   4 flavor generalization /FR'13
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+      CHARACTER*6 NAMP
+      COMMON /S_CNAM/ NAMP (0:99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+      DIMENSION P0(5), LL(10), PD(10,5), IFL(3), INONLEAD(2)
+      DIMENSION LRESCHEX(6:99), LRES(6:99), LCON(6:99), LPIC(-1:1)
+      DIMENSION LSTR(6:99), LPICS(-2:2)
+      
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+c     charge exchange map
+      DATA (LCON(I),I=6, 33)  /7,6,6,21,22,9,9,14,13,4*0,20,19,9,10,23,
+     &     24,27,27,25,30,31,28,29,32,33/
+      DATA (LCON(I),I=34, 49) 
+     &     /35,34,35,38,37,39,41,42,41,42,45,44,45,48,47,49/
+      DATA (LCON(I),I=50, 83) /0,52,51,54,53,4*0,71,72,10*0,
+     &     59,60,73,74,75,76,77,80,81,78,79,0,83/
+      DATA (LCON(I),I=84, 99) /84,85,86,87,88,89,4*0,94,95,96,97,98,99/
+c     pion charge conversion map
+      DATA LPIC /8,6,7/
+c     kaon charge conversion map      
+      DATA LPICS /9,21,0,22,10/     
+c     charge exchange to resonances map
+      DATA (LRESCHEX(I),I=6, 33) /26,27,27,30,31,9,9,42,41,19*0/
+      DATA (LRESCHEX(I),I=34, 39) /45,44,45,48,47,39/ 
+      DATA (LRESCHEX(I),I=40, 49) /41,42,43,42,45,46,45,48,47,49/
+      DATA (LRESCHEX(I),I=50, 83) 
+     &     /0,52,51,54,53,4*0,60,59,10*0,71,72,73,75,74,
+     &     77,76,79,78,80,81,0,83/
+      DATA (LRESCHEX(I),I=84, 99) 
+     &     /84,85,86,87,88,89,4*0,94,95,96,97,98,99/
+c     resonance excitation map
+      DATA (LRES(I),I=6, 39) 
+     &     /27,25,26,28,29,9,9,41,42,19*0,44,45,46,47,48,39/
+      DATA (LRES(I),I=40, 49) /40,41,42,43,44,45,46,47,48,49/
+      DATA (LRES(I),I=50, 83) 
+     &     /0,51,52,53,54,4*0,78,79,10*0,71,72,73,76,77,76,
+     &     77,78,79,80,81,0,83/
+      DATA (LRES(I),I=84, 99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+c     strangeness excitation map
+      DATA LSTR(6:27) /6,7,8,9,10,11,12,34,39,6*0,21,22,23,24,25,26,27/
+      DATA LSTR(28:39) /28,29,30,31,32,33,44,45,46,47,48,39/
+      DATA LSTR(40:49) /40,41,42,43,44,45,46,47,48,49/
+      DATA LSTR(50:83) /0,51,52,53,54,4*0,78,79,10*0,71,72,73,76,77,76,
+     &     77,78,79,80,81,0,83/
+      DATA LSTR(84:99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+      
+c...  charge exchange reaction rate
+c      DATA PCHEX /0.33/
+
+c     default parameter: PAR(61)
+      PCHEX = PCHEXin
+
+c     split charge exchange between 2 and 3+ fireballs
+      IF(IPAR(91).eq.1.and.NPI.gt.2)THEN
+         PCHEX = 1.D0-PCHEX
+      ENDIF
+
+c     hyperon production rate
+      PLAM = PAR(157)
+      
+c...  suppression of high mass particles in fireball
+c     xmpsuppr = prob. accepting additional proton
+      XMPSUPPR=PAR(33)
+      IF(ABS(XMPSUPPR).lt.EPS3) THEN
+         WRITE(LUN,*)
+     &        ' Error: too low mass suppression in 4 flv fireball!'
+         WRITE(LUN,*)
+     &        ' Probably PAR(33)/IPAR(14) not properly set, aborting..'
+         STOP
+      ENDIF
+      XTEMPH=(AM(6)-AM(13))/dLOG(XMPSUPPR)
+
+      IF(Ndebug.gt.3) THEN
+         WRITE(LUN,*)' FIRBALL_4FLV: called with (L0,P0):',
+     &        L0,P0
+         WRITE(LUN,*)' 2nd Proton rejection prob.:',XMPSUPPR
+         WRITE(LUN,*)' fireball temperature:',XTEMPH
+         WRITE(LUN,*)' charge exchange prob.:',PCHEX
+         WRITE(LUN,*)' multiplicity width:',PAR(38)
+      ENDIF
+
+c...  special vector resonance treatment for meson projectiles
+c     i.e. spin exchange probability
+      PAR5def = PAR(5)
+      IF(IPAR(14).eq.-2.and.abs(kb).lt.13)THEN
+         PAR(5)=PAR(34)
+      ENDIF
+
+      NTRY=0
+ 100  NTRY=NTRY+1
+      IF(NTRY.GT.20)THEN
+         WRITE(LUN,*)' FIRBALL_4FLV: unable to sample 4flv fireball!'
+         WRITE(LUN,*)' lacking rejection mechanism, abort..'
+         CALL SIB_REJECT ('FIRBALL_4FLV    ')
+c         RETURN
+      ENDIF
+
+      LA = ABS(L0)
+      ISGN = ISIGN(1,L0)
+      DELTAE = P0(5) - AM(LA)
+      IF(DELTAE.lt.AM(6)+0.02D0)THEN
+         IREJ = 1
+         IF(ndebug.gt.3)
+     &    WRITE(LUN,*)' FIRBALL_4FLV:  too low mass!! aborting...',IREJ
+c         xa=-1.
+c         xa=log(xa)
+c         stop        
+         RETURN
+      ENDIF
+      AV = 2.D0*SQRT(DELTAE)
+
+c...  select number of particles in fireball
+c     at least two
+ 200  XRNDM = GASDEV(LA)
+      NPI = INT(AV*(1.D0+PAR(38)*XRNDM))
+      XMMIN = AM(LA)+DBLE(NPI-1)*AM(6)+0.02D0
+      IF(Ndebug.gt.3)
+     &     WRITE(LUN,*)'  NPI,av,rndm,xmin,delta',
+     &     NPI,av,XRNDM,xmmin,P0(5)-XMMIN
+
+      IF((NPI.LE.1).OR.(NPI.GT.9).OR.(P0(5).LT.XMMIN))THEN
+         GOTO 200
+      ENDIF
+      IF(Ndebug.gt.3) 
+     &  WRITE(LUN,*)' FIRBALL_4FLV: No. of particles sampled. ',
+     &  '(NPI,DELTAE,NTRY):',NPI,DELTAE,NTRY
+
+c...  sample particle list      
+      NTRYL=0
+ 210  CONTINUE
+c...  special vector resonance treatment with meson projectile
+      IF(IPAR(14).eq.-3.and.LA.lt.13)THEN
+c     form resonance from meson beam
+cdh      IF(NTRY.GT.5) GOTO 211
+         IF(NTRY.GT.5) THEN
+c     split last hadron again to start hadron chain
+           CALL HSPLI (LL(I+1),IFL(1),IFL(2))
+
+           IF(Ndebug.gt.3)
+     &          WRITE(LUN,*)' FIRBALL_4FLV: Input hadron split. ',
+     &          '(L0,IFL1,IFL2):',LL(I+1),IFL(1),IFL(2)
+           WREM = P0(5)
+           WREM2 = AM2(ABS(LL(1)))
+           INONLEAD(1)=0
+           INONLEAD(2)=0
+         ELSE
+           I=1
+           IF(PCHEX.gt.S_RNDM(LA))THEN
+              LL(I)=LRESCHEX(LA)
+              CALL HSPLI(LCON(LA),IFL1,IFL2)
+              IFL(1)=IFL1
+              IFL(2)=IFL2
+           ELSE
+              LL(I)=LRES(LA)
+              CALL HSPLI(L0,IFL1,IFL2)
+              IFL(1)=-IFL1
+              IFL(2)=-IFL2
+           ENDIF
+           WREM = P0(5)-AM(ABS(LL(1)))
+           WREM2 = AM2(ABS(LL(1)))
+           INONLEAD(1)=1
+           INONLEAD(2)=1
+         ENDIF
+
+      ELSE
+c...  baryon projectile
+c     first two particles defined by charge exchange
+         I=1
+         LA1=LA
+c     add strangeness
+         XLIMLAM=sqrt(AM2(35)+AM2(9)+0.4)
+         IF(S_RNDM(LA1).lt.PLAM*(1-IABS(ISTR(LA))).and.
+     &        DELTAE.gt.XLIMLAM)THEN
+            LA1 = LSTR(LA)
+c            print *,'xlim<deltae?: ',xlimlam,deltae
+            IF(Ndebug.gt.3)
+     &write(lun,*)' FIRBALL_4FLV: producing hyperon:',namp(LA),namp(LA1)
+         endif        
+         IF(PCHEX.gt.S_RNDM(LA1))THEN
+            L1=LCON(LA1)
+            if(la.eq.42) l1 = l1 + 2 * int(2.D0*S_RNDM(L1))
+            LL(I)=L1*ISGN
+c            WRITE(LUN,*)' charge exchange!',ISGN*LA,'->',L1
+         ELSE
+            L1=LA1
+            LL(I)=LA1*ISGN
+         ENDIF
+c     determine remaining charge and strangeness         
+         IDQ=ICHP(LA1)*ISGN-ICHP(L1)*ISIGN(1,LL(I))
+         IDS=ISTR(LA)*ISGN-ISTR(L1)*ISIGN(1,LL(I))
+         IF(ABS(IDQ).gt.1) write(lun,*) 'LA,LA1,L1',LA,LA1,L1
+         IF(IABS(IDS).gt.1)
+     &        write(lun,*) 'too much strangeness,LA,LA1,L1:'
+     &        ,namp(LA),namp(LA1),namp(L1)
+         IF(IDS.ne.0)THEN
+            IDX = IDS-IDQ
+            LL(I+1)=LPICS(IDX)  ! compensate with strange meson if 
+         ELSE
+            LL(I+1)=LPIC(IDQ)   ! compensate with meson
+         ENDIF         
+         IF(NPI.eq.2) GOTO 300
+c     split last hadron again to start hadron chain
+cdh 211     CALL HSPLI (LL(I+1),IFL(1),IFL(2))
+         CALL HSPLI (LL(I+1),IFL(1),IFL(2))
+
+         IF(Ndebug.gt.3) 
+     &        WRITE(LUN,*)' FIRBALL_4FLV: Input hadron split. ',
+     &        '(L0,IFL1,IFL2):',LL(I+1),IFL(1),IFL(2)
+         WREM = P0(5)
+         WREM2 = AM2(ABS(LL(1)))
+         INONLEAD(1)=0
+         INONLEAD(2)=0
+      ENDIF
+
+      IF(NTRYL.gt.20) GOTO 100
+      NTRYL=NTRYL+1
+
+ 230  I=I+1    
+      JT=INT(1.5D0+S_RNDM(I))
+      JR=3-JT
+      NTRYS=0
+      IFLB=IFL(JT)
+      IDM = 5
+ 240  CALL SIB_I4FLAV (IFL(JT), 0, IDM, IFL(3), LL(I))
+      IF(NTRYS.gt.50) GOTO 210    
+      NTRYS=NTRYS+1
+      W=dEXP(-AM(ABS(LL(I)))/XTEMPH)
+      IF(Ndebug.gt.4) 
+     &  WRITE(LUN,*)' FIRBALL_4FLV: flavor added: ',
+     &  '(I,NTRYS,LL(I),IFL3,W):',I,NTRYS,LL(I),IFL(3),W
+      IF(W.LT.S_RNDM(I).and.INONLEAD(JT).eq.1) GOTO 240
+
+c...  kinematic limits...     
+      WREM = WREM-AM(IABS(LL(I)))
+      WREM2_2=WREM2+2.D0*dSQRT(WREM2)*AM(IABS(LL(I)))+AM2(IABS(LL(I)))
+      IF(Ndebug.gt.4) 
+     &  WRITE(LUN,*)' FIRBALL_4FLV: kinematic limits: ',
+     &  '(I,NTRYS,P05**2,WREM2):',I,NTRYS,P0(5)**2,WREM2_2
+      IF(WREM2_2+0.2D0*S_RNDM(I+1).ge.P0(5)**2) GOTO 240
+      WREM2=WREM2_2
+      IF(Ndebug.gt.3) 
+     & WRITE(LUN,*)
+     & ' FIRBALL_4FLV: Hadron added: (KF,NAMP,I,NONlead,WRME2)',
+     & LL(I),NAMP(ABS(LL(I))),I,INONLEAD(JT),WREM2
+
+      IFL(JT)=-IFL(3)
+      INONLEAD(JT)=1
+      IF(I.lt.NPI-1) GOTO 230
+      IF(ABS(IFL(JT)).gt.3.and.ABS(IFL(JR)).gt.3) THEN
+         IFL(JT)=IFLB
+         GOTO 240
+      ENDIF
+
+c...  close list
+      I=I+1
+      NTRYC=0
+c$$$      IAFL1 = IABS(mod(IFL(JR),100))
+c$$$      IAFL2 = IABS(mod(IFL(jt),100))
+c$$$      IF ((IAFL1/10.eq.4.or.mod(IAFL1,10).eq.4)
+c$$$     +     .and.(IAFL2/10.eq.4.or.mod(IAFL2,10).eq.4))
+c$$$     +     GOTO 100             ! reject two charm quarks
+c$$$      IF(IAFL1*IAFL2.GT.100)  GOTO 100
+ 250  CALL SIB_I4FLAV (IFL(JT), IFL(JR), IDM, IFL(3), LL(I))
+      IF(NTRYC.gt.10) GOTO 210
+      NTRYC=NTRYC+1
+      WREM2_2=WREM2+2.D0*dSQRT(WREM2)*AM(ABS(LL(I)))+AM2(ABS(LL(I)))
+      IF(Ndebug.gt.5) 
+     &  WRITE(LUN,*)' FIRBALL_4FLV: closing List: (IFL1,IFL2,KF,',
+     &             'NAMP,I,NTRYC,WREM2)',
+     &  IFL(JT),IFL(JR),LL(I),NAMP(ABS(LL(I))),I,NTRYC,WREM2_2
+
+      IF(WREM2_2+0.2D0*S_RNDM(I).ge.P0(5)**2) GOTO 250
+
+ 300  IF(Ndebug.gt.3) 
+     &     WRITE(LUN,*)
+     &     ' FIRBALL_4FLV: flavors sampled. (NPI,LL,WREM,NTRYL):',
+     &     NPI,(LL(ii),ii=1,NPI),WREM,NTRYL
+
+c...  fill phasespace
+      CALL DECPAR (0,P0,NPI,LL,PD)
+      DO J=1,NPI
+         NP = NP+1
+         LLIST(NP) = LL(J)
+         NPORIG(NP) = IPFLAG*2
+         niorig(NP)= iiflag
+         DO K=1,5
+            P(NP,K) = PD(J,K)
+         ENDDO
+      ENDDO
+      PAR(5)=PAR5def
+      IREJ = 0
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIG_RPP2014(L,KT,SQS,SLOPE,SIGT,SIGEL,SIGINEL,RHO)
+
+C-----------------------------------------------------------------------
+C     implementation of the PDG RPP 2014 cross section fit
+C     proton-, pion-, kaon-nucleon interactions
+C      
+c     projectile dependent parameters are stored in amp array
+c     dimensions are: (beam,target,exchange mode)
+c     cross section is used for interaction length in AIR
+c     therefore proton and neutron cross sections are averaged.
+c
+C     Input:
+c     L : beam id (1: proton, 2: pion, 3: kaon)
+c     KT: target id (0: Nucleon, 1: proton, 2: neutron)
+c     SQS: c.m. energy in GeV
+c     SLOPE: fit does not include elastic slope, need input to calc
+c            elastic and inelastic cross section
+c     Output:      
+c     SIGT,SIGEL,SIGINEL,RHO
+c     cross sections and ratio of real and imaginary part of ela. amp.
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+c     external types
+      DOUBLE PRECISION SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO!,SIGDIF
+      integer l,kt
+c     commons
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+c     internal types
+      DOUBLE PRECISION S,S0,SIG,RHO1,XI
+      INTEGER k,i,INIT
+C     universal constants and parameters
+      DOUBLE PRECISION M0,ETA1,ETA2,H
+      DOUBLE PRECISION AMP(3,2,3)
+      DOUBLE PRECISION XMA(3),XMB(2)
+      SAVE
+      DATA M0,ETA1,ETA2,H /2.076D0,0.412D0,0.5626D0,0.2838D0/
+c     hadron-proton
+      DATA (AMP(1,1,i),i=1,3) /33.73D0, 13.67D0, 7.77D0 /
+      DATA (AMP(2,1,i),i=1,3) /18.08D0, 10.44D0, 1.977D0 /
+      DATA (AMP(3,1,i),i=1,3) /15.84D0, 5.12D0, 3.538D0 /
+c     hadron-neutron
+      DATA (AMP(1,2,i),i=1,3) /33.77D0, 14.05D0, 6.93D0 /
+      DATA (AMP(2,2,i),i=1,3) /18.08D0, 10.44D0, 1.977D0 /
+      DATA (AMP(3,2,i),i=1,3) /15.73D0, 4.81D0, 1.86D0 /
+      DATA INIT/0/
+c     particle masses
+c     DATA XMA /0.93827D0,0.13957D0,0.493667D0/
+c     DATA XMB /0.93827D0,0.939565D0/
+
+      IF(INIT.EQ.0) THEN
+c  use the masses from the mass table
+        XMA(1) = AM(13)     ! proton
+        XMA(2) = AM(7)      ! pi+
+        XMA(3) = AM(9)      ! K+
+        XMB(1) = AM(13)     ! proton
+        XMB(2) = AM(14)     ! neutron
+        INIT = 1
+      ENDIF
+
+      s = SQS**2
+      sigt = 0.D0
+      rho = 0.D0
+      k = kt
+ 100  if(kt.eq.0.and.k.lt.2) k = k + 1
+      s0=XMA(l)+XMB(k)+M0
+      s0=s0**2
+      xi=s/s0
+c     print *,'s,s0,xi',s,s0,xi
+c     print *,'eta1,eta2,h,M0',eta1,eta2,h,M0
+c     print *,'P,R1,R2',amp(l,k,1),amp(l,k,2),amp(l,k,3)
+c     print *,H*log(xi)**2,amp(l,k,1),amp(l,k,2)*(1.D0/xi)**eta1,
+c     &        amp(l,k,3)*(1.D0/xi)**eta2
+      sig = H*log(xi)**2+amp(l,k,1)+amp(l,k,2)*(1.D0/xi)**eta1
+     &     +amp(l,k,3)*(1.D0/xi)**eta2
+c     print *,'sig',sig
+c     print *,'pi,0.5D0,0.D0',pi,0.5D0,0.D0
+c     print *,pi*h*log(xi),amp(l,k,2)*xi**(-eta1),tan(eta1*pi*0.5D0),
+c     &        amp(l,k,3)*xi**(-eta2),(tan(pi*eta2*0.5D0)+EPS5)
+      rho1 = PI*h*log(xi)-amp(l,k,2)*xi**(-eta1)*tan(eta1*PI*0.5D0)
+     &     +amp(l,k,3)*xi**(-eta2)/(tan(PI*eta2*0.5D0)+EPS5)
+c     print *,'rho:',rho1
+      rho = rho + rho1/sig
+      sigt = sigt + sig
+c     write(LUN,*) ' l,k,sig,rho:',l,k,sig,rho
+      if(kt.eq.0.and.k.lt.2) goto 100
+      if(kt.eq.0) then
+         sigt = sigt*0.5D0
+         rho = rho*0.5D0
+      endif
+c     derive elastic and inelastic cross section
+      sigel = sigt**2*(1.D0+rho**2)/(16.D0*PI*slope*cmbarn)
+      siginel = sigt-sigel
+      IF(ndebug.gt.2)
+     &  write(LUN,*)
+     &  ' SIG_RPP2014: L,KT,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO',
+     &     L,KT,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO
+      end
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION FERMI(XARG,X0,XALPH)
+
+C-----------------------------------------------------------------------
+C     fermi function, used to smoothen samplings
+C     f = 1/(1+exp((x-x0)/alpha))
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+c     externals
+      DOUBLE PRECISION XARG,X0,XALPH
+c     COMMONs
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+c     internals
+      fermi=1.D0+exp((xarg-x0)/xalph)
+      fermi=1.D0/fermi
+      END
+C=======================================================================
+      
+      SUBROUTINE SEL_RES(XM2in,KDin,IRDX,IKDH)
+      
+C--------------------------------------------------------------------
+C     routine that checks if excitation should go into resonant state
+C     or rather should fallback to on-shell beam hadron
+C     Input: XM2in : squared excitation mass
+C            KDin : projectile hadron code
+C            IRDX : reference to remnant on stack
+C     Output: adds hadron to stack
+C             IKDH : parton stack index of final hadron
+C--------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      DOUBLE PRECISION AW,AW2
+      COMMON /S_WIDTH1/ AW(99), AW2(99)
+      INTEGER          MRES(6:99,2)
+      DOUBLE PRECISION XM2,XM1,DELTAE,EMIN1,EMIN2
+      INTEGER          KD
+      SAVE
+
+      DATA (MRES(k,1),k=6,22)  /27,25,26,28,29,0,0,51,52,6*0,30,31/
+      DATA (MRES(k,1),k=23,33) /23,24,25,26,27,28,29,30,31,27,27/
+      DATA (MRES(k,1),k=34,49) /34,35,36,37,38,39,40,41,42,43,34,35,36,
+     &     37,38,49/
+      DATA (MRES(k,1),k=50,83) /0,51,52,53,54,4*0,78,79,10*0,80,81,73,
+     &     74,75,76,77,78,79,80,81,0,83/
+      DATA (MRES(k,1),k=84,99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+
+      DATA (MRES(k,2),k=6,22)  /61,62,63,64,65,0,0,53,54,6*0,66,67/
+      DATA (MRES(k,2),k=23,33) /61,61,62,63,61,64,65,66,67,61,61/
+      DATA (MRES(k,2),k=34,49) /34,35,36,37,38,39,40,41,42,43,44,45,46,
+     &     47,48,49/
+      DATA (MRES(k,2),k=50,83) /0,51,52,53,54,4*0,78,79,10*0,80,81,73,74
+     &     ,75,76,77,78,79,80,81,0,83/
+      DATA (MRES(k,2),k=84,99) /94,95,96,97,98,89,4*0,94,95,96,97,98,99/
+
+      XM2 = XM2in
+      XM1 = sqrt(XM2)
+      KD = KDin
+
+C     thresholds
+c     fallback threshold
+      EMIN1 = PAR(76)
+      
+c     resonance threshold
+      EMIN2 = PAR(77)
+      
+c     parton stack index of incoming hadron
+      IKDH = 0
+      
+c     if too low, fallback on beam
+      IF(ndebug.gt.2)
+     &     write(lun,*)' SEL_RES: input (XM2in,KDin,IRDX):',XM2,KD,IRDX
+      DELTAE = XM1-AM(ABS(KD))
+      IF(ndebug.gt.1)then
+         write(lun,*)' SEL_RES: DELTAE,EMIN1,EMIN2',deltae,emin1,emin2
+         write(lun,*)' SEL_RES: XM,XM1,XM2',
+     &        XM1,emin1+AM(ABS(KD)),emin2+AM(ABS(KD))
+      endif
+      IF(DELTAE.LT.EMIN1)THEN
+c     fallback to beam region
+         KDH = kd
+         XM1 = AM(abs(kd))
+         XM2 = AM2(abs(kd))
+
+      ELSEIF(DELTAE.LT.EMIN2)THEN
+c     form resonance
+         II = 1
+         KDH = KD
+         DO WHILE (II.le.2.and.KDH.eq.KD)
+            KDD = IABS(KD)
+            
+c     K0s and K0l projection on K0 and K0bar
+cdh         IF(KDD.eq.11.or.KDD.eq.12)KDD=21
+cdh  &                              +INT((2.D0-EPS10)*S_RNDM(KD))
+            IF(KDD.eq.11.or.KDD.eq.12)KDD=21
+     &                              +INT(0.5D0+S_RNDM(KD))
+            IL = MRES(KDD,II)
+            IF(ndebug.gt.2) then
+               write(lun,*) ' SEL_RES: res. select (KD,II,IL):',
+     &         KD,II,IL
+            ENDif
+cdh   to prevent  index of array AW2 out of range
+            IF(IL.eq.0) write(lun,*) ' SEL_RES: KD,KDD:' , KD,KDD
+            IF(IL.eq.0) CALL SIB_REJECT('SEL_RES         ')
+c     sample probability for resonance to occur at this mass
+c     from the relativistic breit-wigner dist.
+c     scale widths to artificially increase or decrease resonance occurence
+            XWDTH = PAR(94)*AW2(IL)
+            PRES = BREIT_WIGNER(XM2,AM2(IL),XWDTH)
+            IF(ndebug.gt.2)
+     &           write(lun,*)
+     &           ' SEL_RES: res. proposal (AM2,AW2,Prob.):',
+     &           AM2(IL),XWDTH,PRES
+            IF(S_RNDM(ii).lt.PRES) KDH = ISIGN(IL,KD)            
+            II = II + 1
+         ENDDO
+c     no resonance selected, fallback to beam or phasespace decay?
+         IF(IPAR(59).eq.1.and.KDH.eq.KD)THEN
+c     distinguish regions in deltaE
+            IF(DELTAE.LT.EMIN1)THEN
+c     fallback to beam
+               XM1 = AM(abs(kdh))
+               XM2 = AM2(abs(kdh))           
+            ELSE
+               KDH = 0
+            ENDIF
+         ELSE
+c     case where resonance has been selected 
+c     or no overlap between resonance and phasespace region exists
+c     set mass to pole masses of selected particles
+            XM1 = AM(abs(kdh))
+            XM2 = AM2(abs(kdh))
+         ENDIF
+      ELSE
+c     neither resonance nor fallback
+         KDH = 0
+      ENDIF
+      IF(KDH.ne.0)THEN
+c     add new beam hadron to stack
+         XM2in = XM2
+         CALL ADD_PRTN
+     &        (0.D0,0.D0,0.D0,0.D0,XM1,KDH,2,IRDX,IKDH)
+      endif
+      IF(ndebug.gt.2)
+     &     write(lun,*)' SEL_RES: output (XM2in,KDin,KDH):',XM2,KD,KDH
+
+      RETURN
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION BREIT_WIGNER(S,XM2,XWDTH2)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+C     peak set to one
+      x1 = (s-xm2)**2+xm2*xwdth2
+      breit_wigner = xm2*xwdth2/x1
+      end
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION TBREIT_WIGNER(S,XM2,XWDTH2)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+C     breit-wigner truncated at 2*gamma from peak
+C     peak set to one
+      DATA N /10/
+
+      XMLOW = MAX(XM2-N*XWDTH2,0.D0)
+      XCUT = SIGN(1.D0,S-XMLOW)
+      XCUT = MAX(XCUT,0.D0)
+      x1 = (S-xm2)**2+xm2*xwdth2
+      TBREIT_WIGNER = xcut * xm2*xwdth2/x1
+      
+      end
+C=======================================================================
+
+      SUBROUTINE FRAG_MINIJET(IDX,IBAD)
+
+C-----------------------------------------------------------------------
+C     routine that fragments a gluon - gluon system \FR'14
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER IDX,IBAD
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      
+      DOUBLE PRECISION PGG,PST,PBM,PTG,E0,PT2JET,PTJET,TH,FI,S_RNDM,
+     &     PAR1_def,PAR24_def,PAR3_def,PAR2_1_def,PAR2_2_def,PAR5_def,
+     &     PAR6_def,PAR24_2_def,XM,QMASS,DBETJ      
+      DIMENSION PST(5),PBM(5),PTG(5)
+      INTEGER IST,ITGST,IBMST,IPID,IFLB,IFLT,NOLD,IS,IFL1,IFBAD,IDM
+      SAVE
+      DATA PGG /1.D0/
+
+C     read partons from stack
+c     references are string --> bm-parton --> tg-parton
+c     read string 4momentum from stack
+      CALL RD_PRTN_4VEC(IDX,PST,IPID,IBMST)
+      CALL RD_PRTN_4VEC(IBMST,PBM,IFLB,ITGST)
+      CALL RD_PRTN_4VEC(ITGST,PTG,IFLT,IST)
+      IF(IDX.ne.IST) then
+         write(lun,*) ' FRAG_MINIJET: reference loop broken!' , IDX
+         CALL SIB_REJECT('FRAG_MINIJET    ')
+      endif
+
+C..   kinematic variables
+      E0 = PST(5)            ! string mass
+      PT2JET = PBM(1)**2 + PBM(2)**2
+      PTJET = sqrt(PT2JET)
+      TH = ASIN(MIN((1.D0-EPS8),2.D0*PTJET/E0))
+c      FI = ASIN(MIN((1.D0-EPS8),PBM(2)/PTJET))
+      FI = TWOPI*S_RNDM(IDX)
+c      TH = PST(1)
+c      FI = PST(2)
+
+      IF(NDEBUG.gt.1) WRITE(LUN,*)' FRAG_MINIJET: IDX,EE,IFLB,IFLT,PT',
+     &     IDX,E0,IFLB,IFLT,PTJET,IBAD
+      IF(NDEBUG.gt.1) WRITE(LUN,*)' FRAG_MINIJET: PTJET,TH,FI:',
+     &     PTJET,TH,FI
+
+C...  parameter setup (string fragmentation)
+
+c     baryon production setup
+      PAR1_def = PAR(1)
+      if( NSOF+NJET.gt.0) then
+         PAR(1)= PAR(15)
+      else
+         PAR(1)= PAR(14)
+      endif
+            
+C...  charm setup
+      PAR24_def = PAR(24)
+      IF(IPAR(15).eq.2.or.IPAR(15).eq.3)THEN
+         PAR(24) = PAR(25)*EXP(-PAR(26)/E0)
+      ELSEIF(IPAR(15).eq.4)THEN
+         PAR(24) = PAR(27)*EXP(-PAR(26)/E0)
+      ELSEIF(IPAR(15).eq.5)THEN
+         PAR(24) = PAR(27)*EXP(-PAR(26)/E0)
+         PAR(29) = PAR(27)*EXP(-PAR(28)/E0)
+      ELSEIF(IPAR(15).eq.6.or.IPAR(15).eq.8.or.IPAR(15).eq.9.or.
+     &        IPAR(15).eq.11)THEN
+         PAR(24) = PAR(27)*EXP(-PAR(28)/E0)
+      ELSEIF(IPAR(15).eq.7)THEN
+         PAR(24) = PAR(27)
+      ELSEIF(IPAR(15).eq.10)THEN
+         WRITE(LUN,*)' FRAG_minijet: charm model not implemented!'
+         CALL SIB_REJECT('FRAG_minijet    ')
+      ENDIF
+
+C...  strange setup
+      PAR2_1_def = PAR(2)
+      PAR3_def = PAR(3)
+      IF(IPAR(42).eq.1)THEN
+c     change to constant value 
+         PAR(2) = PAR(72)
+      ELSEIF(IPAR(42).eq.2)THEN
+c     change according to string mass, saturating
+         PAR(2) = PAR(72)*EXP(-PAR(73)/E0)
+      ELSEIF(IPAR(42).eq.3)THEN
+c     change strange diq fraction as well
+         PAR(2) = PAR(72)       ! P_s / P_ud
+         PAR(3) = PAR(73)       ! P_us / P_ud
+      ENDIF
+
+C...  vector setup
+      PAR5_def = PAR(5)
+      PAR6_def = PAR(6)
+      IF(IPAR(43).eq.1)THEN
+c     change vector rate and kaon vector rate
+         PAR(5) = PAR(74)       ! P_vec
+         PAR(6) = PAR(74)       ! P_K* from K
+         
+      ENDIF
+
+      NOLD = NP
+      IF ( (E0.LT.8.D0) .OR. (S_RNDM(0).GT.PGG)) THEN
+C...  one string case, q - qbar
+         
+C     sample flavor for q-qbar minijet        
+         IF( IPAR(87).eq.3 )THEN
+C     flavor threshold model            
+c     u,d -> u,d,s -> u,d,s,c
+c     s and transition from massive to massless at m_s and m_c thresholds
+c     beyond the charm mass all flavors are equally likely
+            CALL SIB_ICFLAV(E0**2,0,IDM,IFL1)
+            
+         ELSE
+C     default u,d,s model, same rates as in hadronization (string frag.)
+            PAR2_2_def = PAR(2)
+            PAR24_2_def = PAR(24)
+C     set 'leading' strange fraction         
+            IF(IPAR(39).eq.2) PAR(2) = PAR(66)         
+c     leading charm fraction
+            IF( IPAR(87).eq.1 )THEN
+               PAR(24) = PAR(150)
+            ELSEIF( IPAR(87).eq.2 )THEN
+               PAR(24) = PAR(150)*PAR(24)
+            ENDIF
+
+            IS = -1 + 2*INT((2.D0-EPS8)*S_RNDM(0))
+ 100        IFL1 = IS*(INT((2.D0+PAR(2))*S_RNDM(0))+1)
+            XM = 2.D0*QMASS(IFL1)+0.3D0
+            if(E0.LE.XM) GOTO 100
+            IF(IABS(IFL1).eq.3)THEN
+               IF(S_RNDM(IFL1).lt.PAR(24)*PAR(125))IFL1 = IS*4
+               XM = 2.D0*QMASS(IFL1)+0.3D0
+               if(E0.LE.XM) GOTO 100
+            ENDIF
+            PAR(2) = PAR2_2_def
+            PAR(24) = PAR24_2_def                        
+         ENDIF
+      
+         CALL STRING_FRAG_4FLV 
+     &        (E0,IFL1,-IFL1,0.D0,0.D0,0.D0,0.D0,IFBAD,0)
+         if(IFBAD.gt.0) then
+            IF(ndebug.gt.1)
+     &       WRITE(LUN,*)
+     &           ' JET_FRAG: rejection in STRING_FRAG (IFL,E0,NCALL):',
+     &           IFL1,E0,NCALL
+            PAR(24) = PAR24_def
+            PAR(1) = PAR1_def
+            PAR(2) = PAR2_1_def
+            PAR(5) = PAR5_def
+            PAR(6) = PAR6_def
+            PAR(3) = PAR3_def 
+            RETURN
+         ENDIF
+      ELSE
+C...  two string case, gluon - gluon
+         CALL GG_FRAG_4FLV(E0)
+      ENDIF
+
+c      DBETJ = (DX1J-DX2J)/(DX1J+DX2J)
+      DBETJ = PST(3)/PST(4)
+      CALL SIROBO (NOLD+1,NP,TH,FI,0.D0,0.D0,DBETJ)
+
+      if(Ndebug.gt.1) WRITE(LUN,*)
+     &     ' JET_FRAG: particles produced:',NP-NOLD
+      PAR(24) = PAR24_def
+      PAR(1) = PAR1_def
+      PAR(2) = PAR2_1_def
+      PAR(5) = PAR5_def
+      PAR(6) = PAR6_def
+      PAR(3) = PAR3_def 
+      IBAD = 0
+      END
+C=======================================================================
+
+      SUBROUTINE INT_H_NUC (IA, SIGT, SLOPE, RHO) 
+
+C-----------------------------------------------------------------------
+C...Compute with a montecarlo method the "multiple interaction structure"
+C.  of an hadron-nucleus collision.
+C.  
+C.
+C.  INPUT : IA               = mass of target nucleus
+C.          SIGT (mbarn)     = total hp cross section
+C.          SLOPE (GeV**-2)  = slope of hp elastic scattering
+C.          RHO              = real/imaginary part of forward elastic
+C.                             scattering amplitude
+C.
+C.  OUTPUT : in COMMON block /CNCMS0/
+C.           B = impact parameter (fm)
+C.           BMAX = maximum impact parameter for generation
+C.           NTRY = number of "trials" before one interaction
+C.           NA = number of wounded nucleons in A
+C. Author : P.Lipari  (may 1993)
+C---------------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (IAMAX=56)
+      COMMON /S_CNCM0/ B, BMAX, NTRY, NA
+      DIMENSION XA(IAMAX), YA(IAMAX)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+
+      PI=4.d0*atan(1.d0)
+
+      CC = SIGT/(4.D0*PI*SLOPE*CMBARN)         
+      DEN = 2.D0*SLOPE*CMBARN*0.1D0
+      BMAX = 1.D0*10.D0             ! fm
+      NTRY = 0
+      CALL NUC_CONF (IA, XA, YA)
+1000  CONTINUE
+      B = BMAX*dSQRT(S_RNDM(0))
+      PHI = 2.D0*PI*S_RNDM(NTRY)
+      BX = B*DCOS(PHI)
+      BY = B*DSIN(PHI)
+      NTRY = NTRY + 1
+      NA = 0
+      DO JA=1,IA
+         S = (XA(JA)-BX)**2 + (YA(JA)-BY)**2
+         F = dEXP(-S/DEN)
+         PEL = CC*CC*(1.D0+RHO*RHO)*F*F
+         PINEL  = 2.D0*CC*F-PEL
+         R = S_RNDM(JA)
+         IF (R .LT. PINEL)  THEN
+            NA = NA + 1
+         ENDIF
+      ENDDO
+      IF (NA .EQ. 0 .and. NTRY .lt. 1000)  GOTO 1000
+
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_REJECT(text)
+
+C-----------------------------------------------------------------------
+c     subroutine dumps state of random number generator 
+c     at beginning of event to file then produces fpe/stops
+C----------------------------------------------------------
+      IMPLICIT NONE
+
+      character*16  text
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER II2,JJ2
+      DOUBLE PRECISION U2,C2,CD2,CM2
+      COMMON /SIB_RAND/ U2(97),C2,CD2,CM2,II2,JJ2
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION XDM
+c      CHARACTER*13 FILENA
+      SAVE
+c      DATA FILENA /'sib_rjctn.rnd'/
+
+      WRITE(LUN,*)
+     &     ' SIB_REJECT:(from,ncall,KB,iat,ECM) ',
+     &                   text,ncall,kb,iat,sqs
+c     produce floating point error
+      XDM = -1.D0
+      XDM = LOG(XDM)
+      STOP
+      END
+C=======================================================================
+
+      SUBROUTINE CUT_PRO (L, SQS, PTmin, NSOFR, NJETR)
+
+C-----------------------------------------------------------------------
+C...  Generate a number of soft/hard (jet-)pairs for a 'projectile'
+C     (K=1:p),(K=2:pi) interacting with a nucleon at sqrt(s)=SQS(GeV)
+C     the interaction structure is only destinguished between nucleons
+C     (L=1) and mesons (L=2), for cross sections there is a 
+C     distinction between pions and kaons as well (L=2 or 3).
+C     For Hyperons the same cross section and interaction structure
+C     as for nucleons is used (L=1).
+C
+C     requires initialization by JET_INI                         /FR'14
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+c      COMMON /S_DEBUG/ Ncall, Ndebug, Lun
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+C     check if tables initialized
+      IF(NSQS.eq.0) THEN
+         WRITE(LUN,*) ' CUT_PRO: tables not initialized! aborting...'
+         xa = -1.D0
+         xa = log(xa)
+         stop
+      ENDIF
+      IF(NDEBUG.GT.1) 
+     &     WRITE(LUN,*) ' CUT_PRO: input: L, SQS, PTmin',L, SQS, PTmin
+
+c     choose nucleon or meson table
+      K = L
+      if(K.eq.3) K = 2
+
+      AL = dLOG10 (SQS)
+      IF (AL .LT. ASQSMIN)  THEN
+          WRITE(LUN,*)  ' CUT_PRO:  low sqrt(s) ', SQS
+          NSOFR = 1
+          NJETR = 0
+          RETURN
+      ENDIF
+      IF (AL .GT. ASQSMAX)  THEN
+          WRITE(LUN,*)  ' CUT_PRO:  sqrt(s) out of bounds ', SQS
+          NJETR = 0
+          RETURN
+      ENDIF
+
+      J1 = INT((AL - ASQSMIN)/DASQS + 1)
+      J1 = MIN(J1,60)
+      J1 = MAX(J1,1)
+      J2 = J1+1
+      T = (AL-ASQSMIN)/DASQS - DBLE(J1-1)
+
+      R = (1.D0-EPS8)*S_RNDM(0)
+      DO I=0,NS_max
+        DO J=0,NH_max
+          IF (R.LT.(1.D0-T)*PJETC(I,J,J1,K)+T*PJETC(I,J,J2,K)) GOTO 100
+        ENDDO
+      ENDDO
+100   CONTINUE
+
+C...phase space limitation
+
+ 120  CONTINUE
+      XM = DBLE(2*I)*STR_mass_sea + DBLE(2*J)*PTmin
+      PACC = EXP(PAR(9)*(2.D0-XM)/SQS)
+      IF(S_RNDM(0).GT.PACC) THEN
+        IF(I+J.GT.1) THEN
+          IF(I.GT.0) THEN
+            I = I-1
+            GOTO 120
+          ELSE IF(J.GT.0) THEN
+            J = J-1
+            GOTO 120
+          ENDIF
+        ENDIF
+      ENDIF
+
+      NSOFR = I
+      NJETR = J
+
+      if(Ndebug.gt.1) 
+     &  write(lun,*)' CUT_PRO: (L,SQS,PTmin,Ns,Nh) ',K,SQS,PTmin,I,J
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE JET_INI
+
+C-----------------------------------------------------------------------
+C...Compute table of cross sections, and table of probability
+C.  for the production of multiple soft and hard interactions
+C.
+C.  The output of this routine  is the COMMON block /S_CCSIG/
+C.  that contains  the cross sections h-p, h-Air, and the 
+C.  cumulative probability of NS soft and NH hard interactions
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      DOUBLE PRECISION SSIG_TOT,SSIG_SD1,SSIG_SD2,SSIG_DD,SSIG_B,
+     &     SSIG_RHO
+      COMMON /S_CCSIG2/ SSIG_TOT(61,3),SSIG_SD1(61,3),SSIG_SD2(61,3),
+     &    SSIG_DD(61,3),SSIG_B(61,3),SSIG_RHO(61,3)
+      DOUBLE PRECISION SSIG_SD1LM,SSIG_SD1HM,SSIG_SD2LM,SSIG_SD2HM,
+     &     SSIG_DDLM,SSIG_DDHM
+      COMMON /S_CCSIG3/ SSIG_SD1LM(61,3),SSIG_SD1HM(61,3),
+     &     SSIG_SD2LM(61,3),SSIG_SD2HM(61,3),
+     &     SSIG_DDLM(61,3),SSIG_DDHM(61,3)
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+      DIMENSION Pjet(0:NS_max,0:NH_max)
+      DIMENSION SIG_df(3),SIG_df2(3,2),SIGDIF(3),SIGDIF_pi(3),
+     &          PS_tab(61),PH_tab(61),PT_tab(61)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+C...spacing in energy for table of cross sections.
+
+      NSQS = 61
+      ASQSMIN = 1.D0
+      ASQSMAX = 7.D0
+      DASQS = (ASQSMAX-ASQSMIN)/DBLE(NSQS-1)
+
+C...initialization of proton and pion tables
+      
+      IF(LUN.ne.6) WRITE(6,*)' Calculating cross section tables...'
+      DO KK=1,2
+
+         IF(NDEBUG.gt.0)
+     &    WRITE(LUN,'(2(/,1X,A,A))') 
+     &     'Table: J, sqs,  PT_cut,  SIG_tot, SIG_inel, B_el,  ',
+     &     'rho,    <n_s>,  <n_h>, SIG_SD, SD1_lm, SD1_hm',
+     &     '---------------------------------------------------',
+     &     '----------------------------------------------'
+
+         JINT = KK
+         DO J=1, NSQS
+           ASQS = ASQSMIN + DASQS*DBLE(J-1)
+           SQS = 10.D0**ASQS
+
+           CALL SIB_SIG (JINT, SQS, PTmin,
+     &                   SIG_tot, SIG_inel, SIG_df, SIG_df2, B_el, Pjet)
+
+C...low-energy interpolation with data-parametrizations
+           CALL SIB_HADCSL(JINT,SQS,
+     &                     SIGTOT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+           if(SQS.le.100.D0) then
+             SIG_TOT  = SIGTOT
+             SIG_inel = SIGINEL
+             B_EL     = SLOPE
+           else if(SQS.le.1000.D0) then
+             Xi = dlog(SQS/100.D0)/2.30258509299405D0
+             SIG_TOT  = Xi*SIG_TOT+(1.D0-Xi)*SIGTOT
+             SIG_inel = Xi*SIG_inel+(1.D0-Xi)*SIGINEL
+             B_EL     = Xi*B_EL+(1.D0-Xi)*SLOPE
+           endif
+
+           SSIG_TOT(J,KK) = SIG_TOT
+           SSIG(J,KK)     = SIG_inel
+           SSIG_SD1(J,KK) = SIGDIF(1)
+           SSIG_SD2(J,KK) = SIGDIF(2)
+           SSIG_DD(J,KK)  = SIG_df(3)
+           SSIG_B(J,KK)   = B_EL
+           SSIG_RHO(J,KK) = RHO
+
+           SSIG_SD1LM(J,KK) = SIG_df2(1,1)
+           SSIG_SD1HM(J,KK) = SIG_df2(1,2)
+           SSIG_SD2LM(J,KK) = SIG_df2(2,1)
+           SSIG_SD2HM(J,KK) = SIG_df2(2,2)
+           SSIG_DDLM(J,KK) = SIG_df2(3,1)
+           SSIG_DDHM(J,KK) = SIG_df2(3,2)
+
+           PSUM = 0.D0
+           PH = 0.D0
+           PS = 0.D0
+           DO NS=0,NS_max
+             DO NJ=0,NH_max
+
+               PS = PS+DBLE(NS)*Pjet(NS,NJ)
+               PH = PH+DBLE(NJ)*Pjet(NS,NJ)
+
+               PSUM = PSUM+Pjet(NS,NJ)
+               PJETC(NS,NJ,J,KK) = PSUM
+
+             ENDDO
+           ENDDO
+           PS_tab(J) = PS
+           PH_tab(J) = PH
+           PT_tab(J) = PTmin
+
+           IF(NDEBUG.gt.0)
+     &      WRITE(LUN,'(3X,I2,1P,E12.3,0P,4F8.2,6F8.3)') 
+     &       JINT,SQS,PTmin,SIG_tot,SIG_inel,B_el,RHO,PS,PH
+     &          ,SIGDIF(1)+SIGDIF(2),SIG_df2(1,1),SIG_df2(1,2)
+
+         ENDDO
+      ENDDO
+
+C...initialization of kaon tables
+
+      JINT = 3
+
+      IF(NDEBUG.gt.0)
+     & WRITE(LUN,'(2(/,1X,A,A))') 
+     &  'Table: J, sqs,  PT_cut,  SIG_tot, SIG_inel, B_el,  ',
+     &  'rho,    <n_s>,  <n_h>',
+     &  '---------------------------------------------------',
+     &  '---------------------'
+      DO J=1, NSQS
+        ASQS = ASQSMIN + DASQS*DBLE(J-1)
+        SQS = 10.D0**ASQS
+C...use pion cross section rescaled for high-energy extrapolation
+        SIG_tot   = SSIG_TOT(J,2)
+        SIG_inel  = SSIG(J,2)
+        SIG_df(1) = SSIG_SD1(J,2)
+        SIG_df(2) = SSIG_SD2(J,2)
+        SIG_df(3) = SSIG_DD(J,2)
+        B_el = SSIG_B(J,2)
+        PTmin = PT_tab(J)
+        PS = PS_tab(J)
+        PH = PH_tab(J)
+
+C...low-energy interpolation with data-parametrizations
+        CALL SIB_HADCSL(2,SQS,
+     &                  SIGTOT_pi,SIGEL_pi,SIGINEL,SIGDIF_pi,SLOPE,RHO)
+        CALL SIB_HADCSL(3,SQS,
+     &                  SIGTOT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+        SIG_el    = (SIGEL/SIGEL_pi)*(SIG_TOT-SIG_inel)
+        SIG_TOT   = (SIGTOT/SIGTOT_pi)*SIG_TOT
+        SIG_inel  = SIG_TOT-SIG_el
+        SIG_df(3) = (SIGDIF(3)/SIGDIF_pi(3))*SIG_df(3)
+        if(SQS.le.100.D0) then
+          SIG_TOT  = SIGTOT
+          SIG_inel = SIGINEL
+          B_EL     = SLOPE
+        else if(SQS.le.1000.D0) then
+          Xi = dlog(SQS/100.D0)/2.30258509299405D0
+          SIG_TOT  = Xi*SIG_TOT+(1.D0-Xi)*SIGTOT
+          SIG_inel = Xi*SIG_inel+(1.D0-Xi)*SIGINEL
+          B_EL     = Xi*B_EL+(1.D0-Xi)*SLOPE
+        endif
+
+        SSIG_TOT(J,3) = SIG_TOT
+        SSIG(J,3)     = SIG_inel
+        SSIG_SD1(J,3) = SIGDIF(1)
+        SSIG_SD2(J,3) = SIGDIF(2)
+        SSIG_DD(J,3)  = SIG_df(3)
+        SSIG_B(J,3)   = B_EL
+        SSIG_RHO(J,3) = RHO
+
+        IF(NDEBUG.gt.0)
+     &   WRITE(LUN,'(3X,I2,1P,E12.3,0P,4F8.2,3F8.3)') 
+     &    JINT,SQS,PTmin,SIG_tot,SIG_inel,B_el,RHO,PS,PH
+
+      ENDDO
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE INI_WRITE (LUN)
+
+C-----------------------------------------------------------------------
+C   This subroutine prints on unit LUN
+C   a table of the cross sections  used in the program
+C   and of the average number of hard interactions, and the average
+C   number of wounded nucleons in a hadron-air interaction
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      DIMENSION PJ(2),PS(2),PW(2)
+
+      SAVE
+      DATA ATARGET /14.514D0/
+
+      if ( ndebug .gt. 3 ) CALL PARAM_PRINT(LUN)
+      if ( ndebug .gt. 0 ) THEN
+        WRITE (LUN, 10)
+        WRITE (LUN, 15)
+        WRITE (LUN, 16)
+        WRITE (LUN, 18)
+10    FORMAT(//,' Table of cross sections, and average number',
+     &         ' of minijets and wounded nucleons ')
+15    FORMAT('        [sqrt(s) in GeV, cross sections in mbarn]. ')
+16    FORMAT(' sqrt(s) sig(pp) sig(pA) <n_s> <n_j> <n_w>',
+     &    ' sig(pip) sig(piA) <n_s> <n_j> <n_w>')
+18    FORMAT(1X,77('-') )
+        DO J=1,61,1
+         SQS = 10.D0**(ASQSMIN + DASQS*DBLE(J-1))
+
+         DO K=1,2
+
+           PW(K) = ATARGET*SSIG(J,K)/SSIGN(J,K)
+
+           PJ(K) = 0.D0
+           PS(K) = 0.D0
+           DO NS=0,NS_max
+             DO NJ=0,NH_max
+               IF(NJ.GT.0) THEN
+                 PROB = PJETC(NS,NJ,J,K) - PJETC(NS,NJ-1,J,K)
+               ELSE IF(NS.GT.0) THEN
+                 PROB = PJETC(NS,NJ,J,K) - PJETC(NS-1,NH_max,J,K)
+               ELSE
+                 PROB = 0.D0
+               ENDIF
+               PJ(K) = PJ(K)+DBLE(NJ)*PROB
+               PS(K) = PS(K)+DBLE(NS)*PROB
+             ENDDO
+           ENDDO
+
+         ENDDO
+
+         WRITE(LUN,20) SQS,SSIG(J,1),SSIGN(J,1),PS(1),PJ(1),PW(1)
+     &                      ,SSIG(J,2),SSIGN(J,2),PS(2),PJ(2),PW(2)
+
+        ENDDO
+
+        WRITE(LUN, 18)
+      endif
+20    FORMAT(1p,E10.2,2(2F7.1,1X,3F6.2,1X))
+
+      return
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIG_AIR_INI 
+
+C-----------------------------------------------------------------------
+C...Initialize the cross section and interaction lengths on air
+C.  (this version initializes p-air, pi-air, and K-air cross sections)
+C.
+C.  also calculates the low mass beam diffraction cross section in hAir \FR
+C.  using the same lambda for all hadrons
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      COMMON /GLAUB_SCR/ XI_MAX , ALAM(61)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DIMENSION SIGDIF(3)
+
+      SAVE
+      DATA AVOG /6.0221367D-04/
+      DATA ATARGET /14.514D0/
+
+
+c      PRINT *,'inel. screening in hadron - nucleus interactions'
+c      ALAM = 0.5
+c      PRINT *,'const. coupling: ', ALAM
+      IF ( IPAR(12).GT.0 ) THEN
+         if (ndebug.gt.0) then
+           WRITE(LUN,*) ' SIG_AIR_INI:'
+           WRITE(LUN,*)' using Goulianos param. for res.coupling..'
+         endif
+         XI_MAX = 0.02D0
+         if (ndebug.gt.0)WRITE(LUN,*)' low mass Xi_max: ' , XI_MAX
+      ENDIF
+
+C...particle loop (p, pi, K)
+      DO K=1,3
+         
+        if (NDEBUG .gt. 0 ) then
+           WRITE(LUN,'(/,1X,A,A)') 
+     &        'Table: J, sqs,    SIGtot,     SIGprod,    SIG_SD,',
+     &        '     Lambda  '
+           WRITE(LUN,*) 
+     &        '-------------------------------------------------',
+     &        '-------------'
+         endif
+        DO J=1,NSQS
+
+           ASQS = ASQSMIN + DASQS*DBLE(J-1)
+           SQS = 10.D0**ASQS
+
+           IF (K.EQ.1) THEN
+c     Goulianos param. from GAP-2012-056, Mx**2s = 0.02
+c     against PDG elastic cross section
+              CALL SIB_HADCS1(K,SQS,SIGT1,SIGEL1,SIGINEL1,SLOPE1,RHO1)
+              SIGEFF = 0.68D0*(1.D0+36.D0/SQS**2)*
+     &             dlog(0.6D0+XI_MAX/1.5D0*SQS**2)
+              ALAM(J) = dSQRT(SIGEFF/SIGEL1)
+           ENDIF
+
+c           CALL SIB_HADCSL(k,SQS,
+c     &          SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+           CALL SIB_SIGMA_HP(K,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+           CALL SIG_H_AIR
+     &          (SIGT, SLOPE, RHO, ALAM(J),
+     &          SSIGT, SSIGEL, SSIGQE, SSIGSD, SSIGQSD)
+
+           if (ndebug .gt. 0 ) WRITE(LUN,'(1X,I2,1P,5E12.3)') 
+     &          K,SQS,SSIGT,SSIGT-SSIGQE,SSIGQSD,ALAM(J)
+C  particle production cross section
+           SSIGN(J,K) = SSIGT-SSIGQE
+           SSIGNSD(J,K) = SSIGQSD
+           ALINT(J,K) = 1.D0/(AVOG*SSIGn(j,K)/ATARGET)
+        ENDDO
+      ENDDO
+
+      if (ndebug .gt. 0 ) then
+        WRITE(LUN,'(/,1X,A)') 
+     &          ' SIG_AIR_INI: NUCLIB interaction lengths [g/cm**2]'
+        WRITE(LUN,'(1X,A)') 
+     &      '     sqs,       p-air,      pi-air,     K-air'
+        DO J=1,NSQS
+         ASQS = ASQSMIN + DASQS*DBLE(J-1)
+         SQS = 10.D0**ASQS
+         WRITE(LUN,'(1X,1P,4E12.3)') 
+     &        SQS,ALINT(J,1),ALINT(J,2),ALINT(J,3)
+        ENDDO
+      endif
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_TARGET(NW,XCHG,KRMNT,XJET,Irec,IREJ)
+
+C-----------------------------------------------------------------------/
+C...Subroutine to sample valence and sea quark kinematic variables
+C     on the target side
+C.    fills IFLT,X2 and PXT,PYT
+C.    1,2 are valence quarks, 3,4 are additional sea quarks
+C.    transverse momentum is shared between the val. and sea pairs
+C.    X and flv are exchanged occasionally, not pt so far
+C-------------------------------------------------------------------      
+      IMPLICIT NONE
+
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+c     external types
+      DOUBLE PRECISION XJET,XCHG
+      DIMENSION XJET(NW_max)
+      INTEGER KRMNT,NW,IREC,IREJ
+      DIMENSION KRMNT(NW_max)
+
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      INTEGER IRMNT,KRB,KRT
+      DOUBLE PRECISION XRMASS,XRMEX
+      COMMON /S_RMNT/ XRMASS(2),XRMEX(2),IRMNT(NW_max),KRB,KRT(NW_max)
+
+c     internal types
+      DOUBLE PRECISION XX,X2,PX,PXT,PY,PYT,PZ,PZ1,PZ2
+      DIMENSION XX(2*NW_max+2),PX(2*NW_max+2),PY(2*NW_max+2)
+      DIMENSION X2(4*NW_max),PXT(4*NW_max),PYT(4*NW_max)
+      INTEGER IFL,IFLT,IREJ1,J,J1,J2,J3,J4,JJ,JJJ,JI,I,KID,Iref1,
+     &     Iref,KID1
+      DIMENSION IFL(2*NW_max+2),IFLT(4*NW_max)
+      SAVE
+
+      IREJ1 = 1
+
+      IF(ndebug.gt.2) 
+     +     WRITE(LUN,*)
+     +     ' SAMPLE_TARGET: NW,XCHG,LRMNT,XJET,IREC,IREJ',
+     +     NW,XCHG,(KRMNT(j),j=1,NW),(XJET(j),j=1,NW),IREC,IREJ
+
+      DO J=1,NW ! zero arrays
+         j1 = 1+4*(j-1)
+         j2 = j1 + 1
+         j3 = j2 + 1
+         j4 = j3 + 1
+         X2(j1) = 0.D0
+         X2(j2) = 0.D0
+         X2(j3) = 0.D0
+         X2(j4) = 0.D0
+         PXT(j1) = 0.D0
+         PXT(j2) = 0.D0
+         PXT(j3) = 0.D0
+         PXT(j4) = 0.D0
+         PyT(j1) = 0.D0
+         PyT(j2) = 0.D0
+         PyT(j3) = 0.D0
+         PyT(j4) = 0.D0
+      ENDDO
+
+      DO j=1,NW
+c     read target id from event info 
+         KID = KT(J)
+c     reset rejection
+         IREJ = IREJ1
+c     always fills remnant partons into 1,2 and c.strings into 3,4
+c     so far only one interaction possible (beam is always a single hadron!)        
+         CALL SAMPLE_PROJECTILE
+     +        (KID,1,KRMNT(j),XCHG,XJET(j),XX,PX,PY,IFL,KID1,IREJ)
+         IF(IREJ.ne.0) RETURN
+
+c     write to target variables
+         do jj=3-2*KRMNT(j),4
+            ji = jj+4*(j-1)
+            IFLT(ji) = IFL(jj)
+            X2(ji) = XX(jj)
+            PXT(ji) = PX(jj)
+            PYT(ji) = PY(jj)
+         enddo
+
+         IF(KRMNT(j).ne.0)THEN
+c     by convention hadron is split such that diq is 2nd flv
+c     for string frag routine argument flv1 is along +z, flv2 -z
+c     by convention again flv2 in the remnant is passed to +z and flv1 to -z
+c     therefor on the target side the flavors need to be switched such that
+c     the diq is along -z
+            j1 = 1+4*(j-1)
+            j2 = j1 + 1
+            CALL ISWTCH_LMNTS(IFLT(j1),IFLT(j2))
+         ENDIF
+
+c     central strings
+c     flavors need to be switched as well (strictly speaking color)
+c     in dual-parton model: q : color , diq : anticolor
+c     need to combine q with diq for color neutral system..
+         j3 = 3+4*(j-1)
+         j4 = j3 + 1
+         CALL ISWTCH_LMNTS(IFLT(j3),IFLT(j4))
+         CALL SWTCH_LMNTS(X2(j3),X2(j4))
+         
+c     reset remnant id 
+c     might have changed in flavor exchange (actually color)...
+         KRT(J) = KID1
+      ENDDO
+
+C..   write target partons to stack
+      DO I=1,NW
+         IF(KRMNT(I).ne.0)THEN
+c     add proto-remnant
+            j1 = 1+4*(i-1)
+            j2 = j1 + 1
+            CALL ADD_PRTN(PXT(J1)+PXT(J2),PYT(J1)+PYT(J2),
+     &           -0.5D0*SQS*(X2(J1)+X2(j2)),0.5D0*SQS*(X2(J1)+X2(j2)),
+     &           0.D0,-2,0,0,Iref1)
+            ITGRDX(I,1) = Iref1
+            CALL ADD_INT_REF(Iref1,IINTDX(I))
+c     add quarks to stack
+            do j = 1,2
+               jj = 4*(i-1)+j
+               jjj = 4*(i-1)+j + 2
+               pz1 = (0.5D0*SQS*X2(JJ))**2
+c               PZ1 = (0.5D0*SQS*X2(JJ))**2-PXT(JJ)**2-PYT(JJ)**2
+               CALL ADD_PRTN(PXT(JJ),PYT(JJ),-sqrt(pz1),
+     &              0.5D0*SQS*X2(JJ),0.D0,IFLT(JJ),1,Iref1,Iref)
+               ITGRDX(I,j+1) = Iref
+               pz2 = (0.5D0*SQS*X2(JJj))**2
+c               pz2 = (0.5D0*SQS*X2(JJj))**2-PXT(JJj)**2-PYT(JJj)**2
+               CALL ADD_PRTN(PXT(JJj),PYT(JJj),-sqrt(pz2),
+     &              0.5D0*SQS*X2(JJj),0.D0,IFLT(JJj),1,0,Iref)
+               ICSTDX(2*(I-1)+j,3) = Iref
+            enddo
+         else
+            do j = 3,4
+               jj = 4*(i-1)+j
+               pz = (0.5D0*SQS*X2(JJ))**2
+c               pz = (0.5D0*SQS*X2(JJ))**2-PXT(JJ)**2-PYT(JJ)**2
+               CALL ADD_PRTN(PXT(JJ),PYT(JJ),-sqrt(pz),
+     &              0.5D0*SQS*X2(JJ),0.D0,IFLT(JJ),1,0,Iref)
+               ICSTDX(2*(I-1)+(J-2),3) = Iref
+            enddo
+         ENDIF
+      ENDDO
+      IF(NDEBUG.GT.3) CALL PRNT_PRTN_STCK
+
+      IREJ = 0
+      END
+C=======================================================================
+
+      SUBROUTINE SIGMA_NUC_AIR(IA,ECM,KINT)
+
+C-----------------------------------------------------------------------
+C.  wrapping for SIGMA_NUC in NUCLIB
+C...Compute with a montecarlo method the "production"
+C.  and "quasi-elastic" cross section for  
+C.  a nucleus-nucleus interaction
+C.  nucleon - nucleon cross section is taken from 
+C.  the table calculated by SIBYLL_INI
+C.
+C.  INPUT : IA            = mass of target nucleus
+C.          ECM          = c.m. energy
+C.          KINT            = number  of interactions to generate
+C.  OUTPUT : SIGMA (mbarn) = "production" cross section
+C.           DSIGMA   "    = error
+C.           SIGQE    "    = "quasi-elastic" cross section
+C.           DSIGQE   "    = error
+C.      in COMMON /NUCNUCSIG/ 
+C.           additional output is in the common block  /CPROBAB/
+C.           Prob(n_A), Prob(n_B), Prob(n_int)
+C..........................................................................
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /NUCNUCSIG/ SIGPROD,DSIGPROD,SIGQE,DSIGQE,IBE,ITG
+      DIMENSION SIGDIF(3)
+      SAVE
+      DATA NDB /0/
+      
+      DSIGPROD = 0.D0
+      DSIGQE = 0.D0
+
+      CALL SIB_SIGMA_HP(1,ECM,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+      CALL SIGMA_AIR(IA,SIGINEL,SIGEL,KINT,SIGPROD,DSIGPROD,
+     +     SIGQE,DSIGQE)
+      IBE = IA
+      ITG = 0
+      IF(DSIGPROD/SIGPROD.gt.0.1D0)THEN
+         IF( NDB.EQ.0 ) 
+     +     PRINT*,'SIG_NUC_AIR: warning! : large error in cross section'
+         NDB = 1
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIG_NUC_AIR(IA,SIGPP,SIGPPEL,KINT)
+
+C-----------------------------------------------------------------------
+C.  wrapping for SIGMA_NUC in NUCLIB
+C...Compute with a montecarlo method the "production"
+C.  and "quasi-elastic" cross section for  
+C.  a nucleus-nucleus interaction
+C.
+C.  INPUT : IA            = mass of target nucleus
+C.          IB            = mass of projectile nucleus
+C.          SIGPP (mbarn)  = inelastic pp cross section
+C.          SIGPPEL        = elastic pp cross section
+C.          KINT            = number  of interactions to generate
+C.  OUTPUT : SIGMA (mbarn) = "production" cross section
+C.           DSIGMA   "    = error
+C.           SIGQE    "    = "quasi-elastic" cross section
+C.           DSIGQE   "    = error
+C.      in COMMON /NUCNUCSIG/ 
+C.           additional output is in the common block  /CPROBAB/
+C.           Prob(n_A), Prob(n_B), Prob(n_int)
+C..........................................................................
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /NUCNUCSIG/ SIGPROD,DSIGPROD,SIGQE,DSIGQE,IBE,ITG
+      SAVE
+
+      DSIGPROD = 0.D0
+      DSIGQE = 0.D0
+      CALL SIGMA_AIR(IA,SIGPP,SIGPPEL,KINT,SIGPROD,DSIGPROD,
+     +     SIGQE,DSIGQE)
+      IBE = IA
+      ITG = 0
+      IF(DSIGPROD/SIGPROD.gt.0.1D0)THEN
+         IF( NDB.EQ.0 ) 
+     +     PRINT*,'SIG_NUC_AIR: warning! : large error in cross section'
+         NDB = 1
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIG_NUC_NUC(IA,IB,SIGPP,SIGPPEL,KINT)
+
+C-----------------------------------------------------------------------
+C.  wrapping for SIGMA_NUC in NUCLIB
+C...Compute with a montecarlo method the "production"
+C.  and "quasi-elastic" cross section for  
+C.  a nucleus-nucleus interaction
+C.
+C.  INPUT : IA            = mass of target nucleus
+C.          IB            = mass of projectile nucleus
+C.          SIGPP (mbarn)  = inelastic pp cross section
+C.          SIGPPEL        = elastic pp cross section
+C.          KINT            = number  of interactions to generate
+C.  OUTPUT : SIGMA (mbarn) = "production" cross section
+C.           DSIGMA   "    = error
+C.           SIGQE    "    = "quasi-elastic" cross section
+C.           DSIGQE   "    = error
+C.      in COMMON /NUCNUCSIG/ 
+C.           additional output is in the common block  /CPROBAB/
+C.           Prob(n_A), Prob(n_B), Prob(n_int)
+C..........................................................................
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /NUCNUCSIG/ SIGPROD,DSIGPROD,SIGQE,DSIGQE,IBE,ITG
+      SAVE
+
+      DSIGPROD = 0.D0
+      DSIGQE = 0.D0
+      CALL SIGMA_MC(IA,IB,SIGPP,SIGPPEL,KINT,SIGPROD,DSIGPROD,
+     +     SIGQE,DSIGQE)
+      IBE = IA
+      ITG = IB
+      IF(DSIGPROD/SIGPROD.gt.0.1D0)THEN
+         IF( NDB.EQ.0 ) 
+     +     PRINT*,'SIG_NUC_NUC: warning! : large error in cross section'
+         NDB = 1
+      ENDIF
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIG_HAD_NUC(L,IA,ECM,ALAM,ICSMOD,IPARM)
+
+C-----------------------------------------------------------------------
+C**********************************************************************
+C...Subroutine to compute hadron-nucleus cross sections
+C.  according to:
+C.  R.J. Glauber and G.Matthiae  Nucl.Phys. B21, 135, (1970)
+C.
+C.
+C.  INPUT :  L projectile particle (1:p , 2:pi, 3:K )
+C.           IA mass-number of target nucleus
+C.           SSIG  (mbarn) total pp cross section
+C.           SLOPE (GeV**-2)  elastic scattering slope for pp
+C.           ALPHA    real/imaginary part of the forward pp elastic
+C.                                               scattering amplitude
+C.           ALAM: inel. screening coupling
+C.
+C.  OUTPUT : ( in COMMON block /NUCSIG/ )
+C.           SIGT  = Total cross section
+C.           SIGEL = Elastic cross section
+C.           SIGQEL  = Elastic + Quasi elastic cross section
+C.           SIGSD  = beam single diff. cross section
+C......................................................................
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /NUCSIG/ SIGT,SIGEL,SIGINEL,SIGQE,SIGSD,
+     +     SIGQSD,SIGPPT,SIGPPEL,SIGPPSD,ITG
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+c      double precision dplab
+c      double precision DSSIG,DSLOPE,DALPHA,DALAM
+c      DOUBLE PRECISION SG1,SGEL1,SGQE1,SGSD1,SGQSD1
+      DIMENSION SSIGDIF(3),XM(4)     
+      SAVE
+c     DATA XM / 0.93956563, 0.13956995, 0.493677, 0.93956563 /
+      DATA GEV2MB /0.3893D0/
+      DATA INIT/0/
+
+      IF(INIT.EQ.0) THEN
+c  use the masses from the mass table
+cdh     XM(1) = AM(14)     ! neutron
+        XM(1) = AM(13)     ! proton
+        XM(2) = AM(7)      ! pi+
+        XM(3) = AM(9)      ! K+
+        XM(4) = AM(14)     ! neutron
+        INIT = 1
+      ENDIF
+
+      xma = XM(L)
+      xmb = (XM(1)+XM(4))/2.D0
+
+      Plab = dsqrt(((ecm**2-xma**2-xmb**2)/(2.D0*xmb))**2-xma**2)
+
+C     hadron proton cross section to be used for calculation
+
+      IF( ICSMOD.EQ.1 ) THEN
+c     sibyll 2.1 cross section
+
+         CALL SIB_SIGMA_HP(L,ECM,SSIG,SSIGEL,SSIGINEL,SSIGDIF,SLOPE,RHO)
+
+      ELSEIF( ICSMOD.EQ.0 ) THEN
+c     cross section parametrizations
+
+         if(Ecm.gt.12.D0) then
+
+           CALL SIB_HADCSL(L,ECM,SSIG,SSIGEL,SSIGINEL,SSIGDIF,SLOPE,RHO)
+
+         else
+c     low energy parametrization
+            SSIG = (sigtot_pp(Plab)+sigtot_pn(plab))/2.D0
+            SSIGEL  = (sigela_pp(Plab)+sigela_pn(plab))/2.D0
+C     parametrization from U. Dersch et al. Nucl Phys. B579 (2000) 277
+            RHO = 6.8D0/plab**0.742D0-6.6D0/plab**0.599D0+0.124D0
+            SLOPE = (1.D0+RHO**2)*SIGTOT**2/(16.D0*PI*SIGEL)/GEV2MB
+            SSIGDIF(1) = 0.D0
+            SSIGDIF(2) = 0.D0
+            SSIGDIF(3) = 0.D0
+         endif
+      ENDIF
+      SSIGSD = SSIGDIF(1) + SSIGDIF(2)
+
+c     energy dependence of lambda parameter
+      if( IPARM.eq.1 ) then
+
+c     empirical parametrization
+         SIGEFF = 0.25D0*Ecm**2/(Ecm**2+10.D0**2)*dLOG(1000.D0*Ecm**2)
+     &        -1.5D0/2.D0
+         SIGEFF = MAX(0.D0,SIGEFF)
+         
+         ALAM = dsqrt(SIGEFF/SSIGEL)
+
+         SSIGSD = 2.D0 * SIGEFF
+         
+      elseif( IPARM.EQ.2 ) then
+         
+c     lambda derived from proton interactions
+         CALL SIB_HADCS1(1,ECM,SIGT1,SSIGEL1,SIGINEL1,SLOPE1,RHO1)
+C     parametrization by Goulianos for diff. interaction
+         SIGEFF = 0.68D0*(1.D0+36.D0/Ecm**2)
+     &        *LOG(0.6D0+0.02D0/1.5D0*Ecm**2)
+         SIGEFF = MAX(0.D0,SIGEFF)
+         ALAM = sqrt(SIGEFF/SSIGEL1)
+         
+         SSIGSD = 2.D0 * SIGEFF
+         
+      elseif( IPARM.eq.3)then
+
+C     data from Paolo Lipari's note
+         SIGTOT = 129.D0
+         SIGEL  = 0.3D0*SIGTOT
+         SIGEFF = ECM*0.01D0*SIGTOT
+         RHO    = 0.D0
+         SLOPE  = (1.D0+RHO**2)*SIGTOT**2/(16.D0*PI*SIGEL)/GEV2MB
+         ALAM   = dsqrt(SIGEFF/SIGEL)
+         
+         SSIG = SIGTOT
+         SSIGEL = SIGEL
+         SSIGSD = 2.D0 * SIGEFF
+      endif 
+
+      ALPHA = RHO
+
+C     hadron - nucleon cross section
+      
+      IF( IA.EQ.0 ) THEN
+         CALL SIG_H_AIR
+     +        (SSIG,SLOPE,ALPHA,ALAM,SG1,SGEL1,SGQE1,SGSD1,SGQSD1)
+      else
+         CALL GLAUBER2
+     +        (IA,SSIG,SLOPE,ALPHA,ALAM,SG1,SGEL1,SGQE1,SGSD1,SGQSD1)
+      endif
+
+      ITG = IA
+
+      SIGPPT = SSIG
+      SIGPPEL = SSIGEL
+      SIGPPSD = SSIGSD
+      SIGT  = SG1
+      SIGEL = SGEL1
+      SIGQE = SGQE1
+      SIGSD = SGSD1
+      SIGQSD = SGQSD1
+      SIGINEL = SIGT - SIGEL
+
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIG_H_AIR
+     +     (SSIG,SLOPE,ALPHA,ALAM,SIGT,SIGEL,SIGQE,SIGSD,SIGQSD)
+
+C-----------------------------------------------------------------------
+C**********************************************************************
+C...Subroutine to compute hadron-air cross sections
+C.  according to:
+C.  R.J. Glauber and G.Matthiae  Nucl.Phys. B21, 135, (1970)
+C.
+C.  Air is a linear combination of Nitrogen and oxygen
+C.
+C.  INPUT :  SSIG  (mbarn) total pp cross section
+C.           SLOPE (GeV**-2)  elastic scattering slope for pp
+C.           ALPHA    real/imaginary part of the forward pp elastic
+C.                                               scattering amplitude
+C.  OUTPUT : SIGT  = Total cross section
+C.           SIGEL = Elastic cross section
+C.           SIGQEL  = Elastic + Quasi elastic cross section
+C.           SIGSD   = single diff. cross section (beam) 
+C.           SIGQSD  = Elastic + Quasi elastic SD cross section (beam)
+C.
+C.  ALSO including interface from single precision in SIBYLL to
+C.       double precision in GLAUBER2
+C......................................................................
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+      DATA FOX /0.21522D0/  !atomic percentage of 'non-nitrogen' in air
+
+      CALL GLAUBER2
+     +  (14,SSIG,SLOPE,ALPHA,ALAM,SIG1,SIGEL1,SIGQE1,SIGSD1,SIGQSD1)
+      CALL GLAUBER2
+     +  (16,SSIG,SLOPE,ALPHA,ALAM,SIG2,SIGEL2,SIGQE2,SIGSD2,SIGQSD2)
+
+      SIGT  = (1.D0-FOX)*SIG1   + FOX*SIG2
+      SIGEL = (1.D0-FOX)*SIGEL1 + FOX*SIGEL2
+      SIGQE = (1.D0-FOX)*SIGQE1 + FOX*SIGQE2
+      SIGSD = (1.D0-FOX)*SIGSD1 + FOX*SIGSD2
+      SIGQSD = (1.D0-FOX)*SIGQSD1 + FOX*SIGQSD2
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE GLAUBER2
+     +     (JA,SSIG,SLOPE,ALPHA,ALAM,SIGT,SIGEL,SIGQEL,SIGSD,SIGQSD)
+
+C-----------------------------------------------------------------------
+C...Subroutine to compute hadron-Nucleus cross sections
+C.  according to:
+C.  R.J. Glauber and G.Matthiae  Nucl.Phys. B21, 135, (1970)
+C.
+C.  This formulas assume that the target nucleus  density is
+C.  modeled by a shell-model form.  A reasonable range of models
+C.  is  4 < JA < 18
+C.
+C.  This is a modified version with a two-channel model for inelastic
+C.  intermediate states of low mass (R. Engel 2012/03/26)
+C.
+C.  INPUT :  A = mass number of the nucleus
+C.           SSIG  (mbarn) total pp cross section
+C.           SLOPE (GeV**-2)  elastic scattering slope for pp
+C.           ALAM  enhancement factor (sqrt of sigma_sd1/sigma_ela)
+C.           ALPHA    real/imaginary part of the forward pp elastic
+C.                                               scattering amplitude
+C.  OUTPUT : SIGT  = Total cross section
+C.           SIGEL = Elastic cross section
+C.           SIGQEL  = Elastic + Quasi elastic cross section
+C.           SIGSD = single diff. cross section
+C.           SIGQSD = Quasi single diff. cross section
+C.
+C. Internally  everything is computed in GeV (length = GeV**-1)
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CA0SH/ R0, R02
+      COMPLEX*16  ZS1, ZS2, ZP1, ZP2, Z1, Z2, OM12
+      DIMENSION RR(18)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+      DATA BMAX /100.D0/            ! GeV**-1
+      DATA NB /500/
+C...data on Sqrt[<r**2>] (fm). (A=5,8 are not correct).
+C   From Barett and Jackson
+      DATA RR /0.81,2.095,1.88,1.674, 2.56,2.56,2.41,2.5,2.519,2.45
+     +          ,2.37, 2.460, 2.440, 2.54, 2.58, 2.718, 2.662,2.789 /
+
+      A = DBLE(JA)
+C...Parameter of shell model density
+      R0 = RR(JA)/0.197D0/dSQRT(5.D0/2.D0 - 4.D0/A)    ! GeV**-1
+      R02 = R0*R0
+
+      SIG1 = (1.D0+ALAM) * SSIG/CMBARN            ! GeV**-2
+      SIG2 = (1.D0-ALAM) * SSIG/CMBARN
+      SIG12 = dSQRT((1.D0+ALAM)*(1.D0-ALAM)) * SSIG/CMBARN
+      DB = BMAX/DBLE(NB)
+      SUM0 = 0.D0
+      SUM1 = 0.D0
+      SUM2 = 0.D0
+      SUM3 = 0.D0
+      SUM4 = 0.D0
+      DO JB=1,NB
+
+        B = DB*(DBLE(JB)-0.5D0)
+
+        GS1 = GLAUBGS_D (B,SLOPE, SIG1)
+        XS1 = (1.D0- GS1)
+        YS1 = GS1*ALPHA
+        ZS1 = DCMPLX(XS1,YS1)
+
+        GP1 = GLAUBGP_D (B,SLOPE, SIG1)
+        XP1 = (1.D0- GP1)
+        YP1 = GP1*ALPHA
+        ZP1 = DCMPLX(XP1,YP1)
+
+        Z1 = ZS1**4 * ZP1**(A-4.D0)
+
+        GS2 = GLAUBGS_D (B,SLOPE, SIG2)
+        XS2 = (1.D0- GS2)
+        YS2 = GS2*ALPHA
+        ZS2 = DCMPLX(XS2,YS2)
+
+        GP2 = GLAUBGP_D (B,SLOPE, SIG2)
+        XP2 = (1.D0- GP2)
+        YP2 = GP2*ALPHA
+        ZP2 = DCMPLX(XP2,YP2)
+
+        Z2 = ZS2**4 * ZP2**(A-4.D0)
+
+        XZ = 0.5D0 * DREAL(Z1+Z2)
+        YZ = 0.5D0 * DIMAG(Z1+Z2)
+
+        XZ2 = 0.5D0 * DREAL(Z2-Z1)
+        YZ2 = 0.5D0 * DIMAG(Z2-Z1)
+
+        SUM0 = SUM0 + (1.D0-XZ)*B
+
+        SUM1 = SUM1 + ((1.D0-XZ)**2 + YZ**2)*B
+
+        SUM3 = SUM3 + (XZ2**2 + YZ2**2)*B
+
+        OMS1 = OMEGAS_D(B,SIG1,SLOPE,ALPHA)
+        OMS2 = OMEGAS_D(B,SIG2,SLOPE,ALPHA)
+        OMS12 = OMEGAS_D(B,SIG12,SLOPE,ALPHA)
+
+        OMP1 = OMEGAP_D(B,SIG1,SLOPE,ALPHA)
+        OMP2 = OMEGAP_D(B,SIG2,SLOPE,ALPHA)
+        OMP12 = OMEGAP_D(B,SIG12,SLOPE,ALPHA)
+
+        OM1 = (1.D0 - 2.D0*GS1 + OMS1)**4
+     &      * (1.D0 - 2.D0*GP1 + OMP1)**(A-4.D0)
+        OM2 = (1.D0 - 2.D0*GS2 + OMS2)**4
+     &      * (1.D0 - 2.D0*GP2 + OMP2)**(A-4.D0)
+        OM12 = (1.D0 - GS1*DCMPLX(1.D0,ALPHA)-GS2*DCMPLX(1.D0,-ALPHA)
+     &               + OMS12)**4
+     &       * (1.D0 - GP1*DCMPLX(1.D0,ALPHA)-GP2*DCMPLX(1.D0,-ALPHA)
+     &               + OMP12)**(A-4.D0)
+        SUM2 = SUM2 + (1.D0-2.D0*XZ + (OM1+OM2)/4.D0
+     &                 + DREAL(OM12)/2.D0)*B
+        SUM4 = SUM4 + ((OM1+OM2)/4.D0
+     &                 - DREAL(OM12)/2.D0)*B
+
+      ENDDO
+
+      SIGT =   SUM0 * DB * 4.D0*PI * CMBARN
+      SIGEL =  SUM1 * DB * TWOPI * CMBARN
+      SIGQEL = SUM2 * DB * TWOPI * CMBARN
+      SIGSD =  SUM3 * DB * TWOPI * CMBARN
+      SIGQSD = SUM4 * DB * TWOPI * CMBARN
+      END
+
+C=======================================================================
+
+      FUNCTION GLAUBGS_D (B,SLOPE, SIG)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CA0SH/ A0, A02
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      GAMMA2 = A02/4.D0 + 0.5D0*SLOPE
+      ARG = B**2/(4.D0*GAMMA2)
+      GLAUBGS_D = SIG/(8.D0*PI*GAMMA2) * EXP(-ARG)
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION GLAUBGP_D (B,SLOPE, SIG)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CA0SH/ A0, A02
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      GAMMA2 = A02/4.D0 + 0.5D0*SLOPE
+      ARG = B**2/(4.D0*GAMMA2)
+      C1 = 1.D0- A02/(6.D0*GAMMA2)*(1.D0-ARG)
+      GLAUBGP_D = SIG/(8.D0*PI*GAMMA2) *  C1 * EXP(-ARG)
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION OMEGAS_D (B, SIG, SLOPE, RHO)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CA0SH/ A0, A02
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      ETA2 = 0.25D0*(A02 + SLOPE)
+      F02 = SIG*SIG*(1.D0+RHO*RHO)/(16.D0*PI**2)
+      ARG = -B*B/(4.D0*ETA2)
+      OMEGAS_D = F02/(4.D0*ETA2*SLOPE) *EXP(ARG)
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION OMEGAP_D (B, SIG, SLOPE, RHO)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CA0SH/ A0, A02
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      ETA2 = 0.25D0*(A02 + SLOPE)
+      F02 = SIG*SIG*(1.D0+RHO*RHO)/(16.D0*PI**2)
+      ARG = -B*B/(4.D0*ETA2)
+      OMEGAP_D=F02/(4.D0*ETA2*SLOPE)*(1.D0-A02/(6.D0*ETA2)*(1.D0+ARG))
+     $                                         *EXP(ARG)
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE REMOVE_PI0(XRATE,N1,N2)
+
+C-----------------------------------------------------------------------
+C     routine to exchange pi0 on stack with charged pions
+C     violating charge conservation.
+C     final pions will be off-shell
+C      
+C     Input: exchange rate and stack positions inbetween
+C     which pions shall be exchanged.
+C     
+C---------------------------------------------------------     
+      IMPLICIT NONE
+c     Commons
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+C     external types
+      DOUBLE PRECISION XRATE
+      INTEGER N1,N2
+C     internals
+      INTEGER I,LL,LA,IFPI0
+      DOUBLE PRECISION S_RNDM
+      SAVE
+
+      IF(NDEBUG.gt.0)write(lun,*)
+     &               ' REMOVE_PI0: Rate,Mode:',xrate,IPAR(50)
+C     select exchange model      
+      IF(IPAR(50).eq.1)THEN
+C     stack loop     
+         DO I=N1,N2
+            LL = MOD(LLIST(I),10000)
+            LA = IABS(LL)
+c     IF(LA.eq.6)THEN
+            IFPI0=(1-MIN(IABS(1-LA/6),1))*MAX(1-MOD(LA,6),0)
+c     replace with pi+ or pi-
+            LL=LL+IFPI0*(2-INT(MIN((2.D0+XRATE)*S_RNDM(LA),
+     &                                                 3.D0-EPS10)))
+            LLIST(I) = LL
+            IF(NDEBUG.gt.1)
+     &           WRITE(LUN,*) ' REMOVE_PI0: LA,IFPI0,LNEW:',LA,IFPI0,LL
+         ENDDO
+      ENDIF         
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_SEA_INDV(KRMNT,XMINA,XMINA_SEA,NSEA,
+     &     XREM0,ALPHA,ASUP,XQMASS,XMAX,XX,IREJ)
+
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+
+      DOUBLE PRECISION XMINA,XMINA_SEA,XREM0,ALPHA,ASUP,XQMASS,XMAX
+      INTEGER NSEA,KRMNT
+      DOUBLE PRECISION XX
+      DIMENSION XX(2*NW_max+2)
+      INTEGER IREJ
+
+      DOUBLE PRECISION XREM,XKIN,X1,X2,pt,S_RNDM,XQM
+      INTEGER ICNT2,J,jj1,jj2
+      SAVE
+      DATA ICNT2 /0/
+      
+      IF(ndebug.gt.2)
+     &    write(lun,*)' SAMPLE_SEA_INDV: called with ',
+     &     '(KRMNT,XMINA,XMINA_SEA,NSEA,XREM0,ALPHA,ASUP,XQMASS,XMAX):',
+     &     KRMNT,XMINA,XMINA_SEA,NSEA,XREM0,ALPHA,ASUP,XQMASS,XMAX
+      XREM = 0.D0
+      XKIN = 0.1D0
+      XQM = XQMASS
+      ITRY(4) = 0
+      DO WHILE ( XREM .lt. XMINA )
+         XREM = XREM0
+         IF ( XREM .LT. 2.D0*XMINA + Nsea*XMINA_SEA
+     &        +XKIN*(1.5D0-S_RNDM(ICNT2)) ) THEN
+            IREJ = 2            ! resample event
+            RETURN
+         ENDIF
+         IF(ITRY(4).gt.Nsea/2*NREJ(4))THEN
+            ICNT2 = ICNT2 + 1
+            IF(ndebug.gt.2)THEN
+               IF(ICNT2.le.5)THEN
+                  write(lun,*)' SAMPLE_SEA_INDV: rejection!' 
+                  write(lun,*)' reached max. no. of trials!', NREJ(4)
+                  write(lun,*)' XREM0,N,XMIN:' ,XREM0,Nsea,XMINA_SEA
+               ENDIF
+               IF(ICNT2.eq.5) 
+     &              write(lun,*)' last warning of this type..'
+            ENDIF
+            IREJ = IPAR(51)
+            RETURN
+         ENDIF
+         DO j=1,Nsea/2
+c     scale for interactions other than first if Nw>1
+            IF(IPAR(75).eq.1.and.J.gt.1) XQM = XQM*PAR(118)
+            CALL SAMPLE_SEA(ALPHA,ASUP,XQM,XMAX,x1,x2,pt)
+            jj1 = 2 + 2*(j-1) + 1
+            IF(KRMNT.eq.0) jj1 = 4+2*(j-1) + 1
+            jj2 = jj1 + 1
+            XX(jj1) = x1
+            XX(jj2) = x2
+            XREM = XREM - XX(jj1) - XX(jj2)
+            IF(NDEBUG.gt.2) 
+     &           WRITE(LUN,*) '  x-frac: JW,X3,X4,XREM',
+     &           J,XX(jj1),XX(jj2),XREM
+         ENDDO
+         ITRY(4) = ITRY(4) + 1
+         IF(NDEBUG.gt.1) WRITE(LUN,*) 
+     &        ' SAMPLE_SEA_INDV: ISMPL,XREM0,XREM,XMINA,XMINSEA',
+     &        ITRY(4),XREM0,XREM,XMINA,XMINA_SEA
+      ENDDO
+      XREM0 = XREM
+      IREJ = 0
+      END
+C=======================================================================
+
+      SUBROUTINE FORCE_VECTORS(XRATE,N1,N2)
+
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     external types
+      double precision xrate
+      integer n1,n2
+
+c     internal types
+      integer ipi2vec,lcon,lreschex,ll,la,la_new,i,j,kba
+      DIMENSION IPI2VEC(99)
+      double precision pz2,xmts,xf,xfs,S_RNDM!,pts
+      
+      DIMENSION LCON(6:43),LRESCHEX(6:39)
+      INTEGER IFIRST
+      SAVE
+c     charge exchange map, i.e. pip -> pi0 ...
+      DATA LCON /7,6,6,22,21,9,9,14,13,4*0,20,19,10,9,23,24,27,27,25,
+     &     31,30,29,28,32,33,35,34,35,38,37,39,41,42,41,42/
+c     charge and spin exchange map, i.e. pip -> rho0
+c     approximate, proton and neutron should go to N(1520) not Delta
+      DATA LRESCHEX /26,27,27,31,30,9,9,42,41,19*0,45,44,45,48,47,39/ 
+      DATA IFIRST /0/
+
+      if(ifirst.eq.0)then
+         print *,'initializing..'
+         do j=1,99
+            IPI2VEC(J) = J
+         enddo
+         IPI2VEC(6) = 27      ! pi(0) ---> rho(0)
+         IPI2VEC(7) = 25      ! pi+   ---> rho+
+         IPI2VEC(8) = 26      ! pi-   ---> rho-
+         ifirst = 1
+      endif
+
+      KBA = IABS(KB)
+      
+      IF(IPAR(45).eq.1)THEN
+c     trivial exchange model      
+         do I=N1,N2
+c     replace pions with vector mesons
+            LL = mod(llist(I),10000)
+            LA = abs(LL)
+            IF(S_RNDM(I).lt.xrate)then
+c     put back on mass shell
+               la_new = IPI2VEC(LA)
+               xmts = p(i,1)**2 + p(i,2)**2 + am2(la_new)
+               pz2 = p(i,4)**2 - xmts
+               if(pz2.gt.EPS8)then
+                  p(i,3) = sign(sqrt(pz2),p(i,3))
+                  p(i,5) = am(la_new)
+                  LLIST(I) = ISIGN(la_new,ll)
+               endif
+            endif
+         enddo
+
+      ELSEIF(IPAR(45).eq.2)THEN
+c     large xf only, neutral pions only
+         do I=N1,N2
+            LL = mod(llist(I),10000)
+            LA = abs(LL)
+            IF(LA.eq.6)then
+               xf = 2.D0*p(i,3)/SQS
+               IF(S_RNDM(I).lt.xrate*xf)then
+c     exhcange and put back on mass shell
+                  la_new = IPI2VEC(la)
+                  xmts = p(i,1)**2 + p(i,2)**2 + am2(la_new)
+                  pz2 = p(i,4)**2 - xmts
+                  if(pz2.gt.EPS8)then
+                     p(i,3) = sign(dsqrt(pz2),p(i,3))
+                     p(i,5) = am(la_new)
+                     LLIST(I) = ISIGN(la_new,ll)
+                  endif
+               endif
+            endif
+         enddo
+
+      ELSEIF(IPAR(45).eq.3)THEN
+c     large xf only, charge and spin exchange
+         do I=N1,N2
+            LL = mod(llist(I),10000)
+            LA = abs(LL)
+            IF(ll.eq.LCON(KBA))then
+               xf = 2.D0*p(i,3)/sqs
+               IF(S_RNDM(I).lt.xrate*xf)then
+c     replace charge exchange product of beam with
+c     charge and spin exchange product, i.e.
+c     pip-beam -> rho0 instead of pip-beam -> pi0
+c     so replace pi0 with rho0 in final state
+                  la_new = LRESCHEX(KBA)
+c     put back on mass shell
+                  xmts = p(i,1)**2 + p(i,2)**2 + am2(la_new)
+                  pz2 = p(i,4)**2 - xmts
+                  if(pz2.gt.EPS8)then
+                     p(i,3) = sign(dsqrt(pz2),p(i,3))
+                     p(i,5) = am(la_new)
+                     LLIST(I) = ISIGN(la_new,ll)
+                  endif
+               endif
+            endif
+         enddo
+         
+      ELSEIF(IPAR(45).eq.4)THEN
+c     large xf only, charge and spin exchange
+         do I=N1,N2
+            LL = mod(llist(I),10000)
+            LA = abs(ll)
+            IF(LL.eq.LCON(KBA))then
+               xf = 2.D0*p(i,3)/sqs
+               xfs = xf ** 2
+               IF(S_RNDM(I).lt.xrate*xfs)then
+c     replace charge exchange product of beam with
+c     charge and spin exchange product, i.e.
+c     pip-beam -> rho0 instead of pip-beam -> pi0
+c     so replace pi0 with rho0 in final state
+                  la_new = LRESCHEX(KBA)
+c     put back on mass shell
+                  xmts = p(i,1)**2 + p(i,2)**2 + am2(la_new)
+                  pz2 = p(i,4)**2 - xmts
+                  if(pz2.gt.EPS8)then
+                     p(i,3) = sign(dsqrt(pz2),p(i,3))
+                     p(i,5) = am(la_new)
+                     LLIST(I) = ISIGN(la_new,ll)
+                  endif
+               endif
+            endif
+         enddo
+      ENDIF
+      if(ndebug.ge.5) CALL SIB_LIST(6)
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_BEAM(KID,NW,XCHG,KRMNT,XJET,IREJ)
+
+C-----------------------------------------------------------------------
+C...Subroutine to sample valence and sea quark kinematics
+C.    fills IFL?,X? and PX?,PY?
+C.    1,2 are valence quarks, 3,4 are additional sea quarks
+C.    transverse momentum is shared between the val. and sea pairs
+C.    X and flv are exchanged occasionally
+C-------------------------------------------------------------------      
+      IMPLICIT NONE
+
+      DOUBLE PRECISION XCHG,XJET
+      INTEGER KID,NW,KRMNT,IREJ
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+
+      INTEGER IRMNT,KRB,KRT
+      DOUBLE PRECISION XRMASS,XRMEX
+      COMMON /S_RMNT/ XRMASS(2),XRMEX(2),IRMNT(NW_max),KRB,KRT(NW_max)
+
+      DOUBLE PRECISION X1,PXB,PYB
+      DIMENSION X1(2*NW_max+2),PXB(2*NW_max+2),PYB(2*NW_max+2)
+      INTEGER IFLB,KID1,J,J1,J2,J3,J4,Iref1,Iref,Idm
+      DIMENSION IFLB(2*NW_max+2)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+c     default rejection
+c     options are: 1: resample minijets (Xjet)..
+c                  2: resample non-diff event (Ns,Nh)..
+c                  3: resample event (Nw,diff,ndiff)..
+      IREJ = 1
+
+      IF(ndebug.gt.2) 
+     +     WRITE(LUN,*)
+     +     ' SAMPLE_BEAM: KID,NW,XCHG,KRMNT,XJET,IREJ',
+     +     KID,NW,XCHG,KRMNT,XJET,IREJ
+
+      CALL SAMPLE_PROJECTILE
+     +     (KID,NW,KRMNT,XCHG,XJET,X1,PXB,PYB,IFLB,KID1,IREJ)    
+      IF(IREJ.ne.0) RETURN
+
+c     set remnant id to beam
+c     will be changed if flavor is exchanged between central strings and remnant
+      KRB = KID1        
+
+C..   write beam partons to stack
+c     order is: val1, val2, q, qbar etc
+      IF(KRMNT.ne.0)THEN
+         j1 = 1
+         j2 = 2
+c     add proto-remnant (still massless)
+         CALL ADD_PRTN(PXB(J1)+PXB(J2),PYB(J1)+PYB(J2),
+     &        0.5D0*SQS*(X1(J1)+X1(J2)),
+     &        0.5D0*SQS*(X1(J1)+X1(J2)),0.D0,2,0,0,Iref1)
+         IBMRDX(1) = Iref1
+c     beam remnant always associated with first interaction
+         CALL ADD_INT_REF(Iref1,IINTDX(1))
+c     add quarks designated for remnant
+         IF(KID.lt.0)THEN
+c     if beam is antibaryon then hspli puts diq into 1st flv
+c     need to switch to fit call to string frag routine 
+c     such that diq is along +z
+            CALL ISWTCH_LMNTS(IFLB(j1),IFLB(j2))
+         ENDIF
+         CALL ADD_PRTN(PXB(J1),PYB(J1),0.5D0*SQS*X1(J1),
+     &        0.5D0*SQS*X1(J1),0.D0,IFLB(J1),1,Iref1,Iref)
+         IBMRDX(2) = Iref
+         CALL ADD_PRTN(PXB(J2),PYB(J2),0.5D0*SQS*X1(J2),
+     &        0.5D0*SQS*X1(J2),0.D0,IFLB(J2),1,Idm,Iref)
+         IBMRDX(3) = Iref
+      ENDIF
+      DO j=1,NW
+         j3 = 3+(j-1)*2
+         j4 = j3+1
+c     add sea quarks
+         CALL ADD_PRTN(PXB(J3),PYB(J3),0.5D0*SQS*X1(J3),
+     &        0.5D0*SQS*X1(J3),0.D0,IFLB(J3),1,0,Iref)
+         ICSTDX(2*(J-1)+1,2) = Iref
+         CALL ADD_PRTN(PXB(J4),PYB(J4),0.5D0*SQS*X1(J4),
+     &        0.5D0*SQS*X1(J4),0.D0,IFLB(J4),1,0,Iref)
+         ICSTDX(2*(J-1)+2,2) = Iref
+c     add parton index to cache
+      ENDDO
+      IF(NDEBUG.GT.3) CALL PRNT_PRTN_STCK
+
+      IREJ = 0
+
+      END
+C=======================================================================
+
+      SUBROUTINE FRAG_INCHRNT_DIFF(IDX,LBAD)
+
+C-----------------------------------------------------------------------
+C     routine that fragments a diffractive system               \FR'15
+C
+C     INPUT: IDX : parton stack index of 4momentum
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER IDX,LBAD
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+      DOUBLE PRECISION PST,PDIFF,GABE,P2,EE,P1TOT
+      DIMENSION PST(5),PDIFF(5),GABE(4),P2(4)
+      INTEGER IDIFF1,IDIFF,IPID,L0,JDIFF,NOLD,LXBAD,K,II
+      SAVE
+
+      LBAD = 2
+
+c     references are diff --> diff.hadron --> bm-partons --> tg-partons
+c     only diff and diff. hadron are read out
+c     read diff 4momentum from stack
+      CALL RD_PRTN_4VEC(IDX,PST,IPID,IDIFF1)
+      CALL RD_PRTN_4VEC(IDIFF1,PDIFF,L0,IDIFF)
+      
+C     kinematic variables
+      EE = PDIFF(5)             ! center of mass energy in diff. system
+      
+c     set diffraction code of system (1:beam,2:target,3:double)
+      JDIFF = ABS(IPID)/10
+
+      IF(NDEBUG.gt.1) WRITE(LUN,*)' FRAG_INCHRNT_DIFF: IDX,EE,L0',
+     &     IDX,EE,L0
+
+      IPFLAG = -1
+
+      NOLD = NP
+
+c     diffractive interaction in center-of-mass system of (sea,rmnt)-nuc
+      CALL SIB_DIFF(L0,JDIFF,EE,0,LXBAD)
+      IF(LXBAD.ne.0) THEN
+         IF(NDEBUG.gt.1) 
+     &        WRITE(LUN,*)' FRAG_INCHRNT_DIFF: fragmentation rejection' 
+         RETURN
+      ENDIF
+      IF(NDEBUG.gt.1) 
+     &     WRITE(LUN,*)' FRAG_INCHRNT_DIFF: particles before/after :',
+     &     NOLD,NP
+
+c     boost to hadron - hadron center-of-mass
+      do ii=1,4
+         gabe(ii) = PDIFF(ii)/PDIFF(5)
+      enddo
+      DO K=NOLD+1,NP
+         CALL SIB_ALTRA(gabe(4),gabe(1),gabe(2),
+     &        gabe(3),P(k,1),p(k,2),p(k,3),p(k,4),
+     &        P1TOT,p2(1),p2(2),p2(3),p2(4))
+         do ii=1,4
+            P(K,ii)=P2(ii)
+         enddo
+      ENDDO
+
+      LBAD = 0
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_MINIJET
+     &     (L,NW,NNJET,NNSOF,NJET,NSOF,X1JET,X2JET,LBAD)
+
+C-----------------------------------------------------------------------
+C     routine to sample minijets
+C     INPUT: L - hadron type (1:nucleon,2:pion or 3:kaon)
+C            NW - number of hadron-nucleon interactions
+C            NNJET(1:NW) - number of hard interactions per nucleon
+C            NNSOF(1:NW) - number of soft interactions per nucleon
+C     OUTPUT: X1JET - momentum fraction of beam in minijets
+C             X2JET(1:NW) - momentum fraction of target in minijets
+C     
+C     in addition minijets are added to parton stack
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      
+c     external types
+      INTEGER L,NW,NNJET,NNSOF,NJET,NSOF,LBAD
+      DOUBLE PRECISION X1JET,X2JET
+      
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+      DIMENSION NNSOF(NW_max),NNJET(NW_max),X2JET(NW_max)
+
+c     internal types
+      INTEGER NALL,JW,JJ,IREF,IREFG1,IREFG2,NSOF_JW,II
+      DOUBLE PRECISION X1JJ,X2JJ,PTJET,FI,S_RNDM,SQSHALF,XM,
+     &     X1S,X2S,PTSOF,PZ,EN     
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      if(Ndebug.gt.1) WRITE(LUN,*)
+     &     ' SAMPLE_MINIJETS: (L,NW,NNJET,NNSOF):',
+     &     L,NW,(NNJET(ii),ii=1,nw),(NNSOF(ii),ii=1,nw)
+
+      IF(L.eq.0) THEN
+         WRITE(LUN,*) 'SAMPLE_minijets: unknown particle? L=',L
+         CALL SIB_REJECT('SAMPLE_minijets ')
+      ENDIF
+      
+      NJET = 0
+      NSOF = 0
+      Nall = 0
+      X1JET = 0.D0
+      DO JW=1,NW
+C...hard sea-sea interactions
+         X2JET(JW) = 0.D0
+         DO JJ=1,NNJET(JW)
+           Nall = Nall+1
+           NJET = NJET+1
+           CALL SAMPLE_HARD (L,X1Jj,X2Jj,PTJET)
+           X1JET = X1JET + X1Jj           
+           X2JET(JW) = X2JET(JW)+X2Jj
+           if(Ndebug.gt.2) THEN
+              WRITE(LUN,*)
+     &             ' SAMPLE_MINIJETS: hard JJ,JW,X1JET,X2JET(JW):',
+     &             JJ,JW,X1JET,X2JET(JW)
+              WRITE(LUN,*)
+     &             '  X1,X2,PT:',X1JJ,X2JJ,PTJET
+           ENDIF
+           IF ((X2JET(JW).GT.0.9D0).OR.(X1JET.GT.0.9D0)) then
+              if(Ndebug.gt.2) WRITE(LUN,*)
+     &        ' SAMPLE_MINIJETS: not enough phase space',
+     &             ' (Ncall,Njet,lbad):',Ncall,Njet,lBAD
+              return
+           ENDIF
+           FI = TWOPI*S_RNDM(JJ)
+           XM = SQS*sqrt(X1jj*X2jj)
+           SQSHALF = 0.5D0*SQS
+c           TH = ASIN(MIN((1.D0-EPS8),2.D0*PTJET/XM))
+c     add gluon-gluon string to stack
+           CALL ADD_PRTN
+     &          (0.D0,0.D0,SQSHALF*(X1jj-X2jj),SQSHALF*(X1jj+X2jj),
+     &          XM,100,0,0,Iref)
+           CALL ADD_INT_REF(Iref,IINTDX(JW))
+c     add gluon-gluon system to hard minijet index
+           IHMJDX(NJET) = Iref
+c     add gluons to stack
+           CALL ADD_PRTN(PTJET*COS(FI),PTJET*SIN(FI),
+     &          SQSHALF*X1jj,SQSHALF*X1jj,0.D0,0,1,0,Irefg1)
+           CALL ADD_PRTN(-PTJET*COS(FI),-PTJET*SIN(FI),
+     &          -SQSHALF*X2jj,SQSHALF*X2jj,0.D0,0,1,Iref,Irefg2)
+c     set up references
+c     minijet --> gluon1 --> gluon2 --> minijet
+           CALL ADD_REF(Irefg1,Irefg2)
+           CALL ADD_REF(Iref,Irefg1)
+
+         ENDDO
+
+C...soft sea-sea interactions 
+         NSOF_JW = 0
+         DO JJ=1,NNSOF(JW)-1
+c     different soft distributions
+            CALL SAMPLE_SOFT6 (STR_mass_sea,X1S,X2S,PTSOF)
+            IF ((X2JET(JW)+X2S.LT.0.9D0).AND.(X1JET+X1S.LT.0.9D0)) THEN
+               NSOF = NSOF+1
+               Nall = Nall+1
+               NSOF_JW = NSOF_JW+1
+               X1JET = X1JET + X1S
+               X2JET(JW) = X2JET(JW)+X2S
+c     add to stack
+c     add gluon-gluon string to stack
+               XM = SQS*SQRT(X1S*X2S)
+               SQSHALF = 0.5D0*SQS
+               PZ = SQSHALF*(X1S-X2S)
+               EN = SQSHALF*(X1S+X2S)
+               FI = TWOPI*S_RNDM(JJ)
+               CALL ADD_PRTN(0.D0,0.D0,PZ,EN,XM,10,0,0,Iref)
+               CALL ADD_INT_REF(Iref,IINTDX(JW))
+c     add gluons to stack
+c     add gluon-gluon system to soft minijet index
+               ISMJDX(NSOF) = Iref                              
+               CALL ADD_PRTN(PTSOF*COS(FI),PTSOF*SIN(FI),
+     &              SQSHALF*X1S,SQSHALF*X1S,0.D0,0,1,0,Irefg1)
+               CALL ADD_PRTN(-PTSOF*COS(FI),-PTSOF*SIN(FI),
+     &              -SQSHALF*X2S,SQSHALF*X2S,0.D0,0,1,Iref,Irefg2)
+c     set up references
+c     minijet --> gluon1 --> gluon2 --> minijet
+               CALL ADD_REF(Irefg1,Irefg2)
+               CALL ADD_REF(Iref,Irefg1)
+               IF(Ndebug.gt.2)THEN
+                  WRITE(LUN,*)
+     &                 ' SAMPLE_MINIJETS: soft JJ,JW,X1JET,X2JET(JW):',
+     &                 JJ,JW,X1JET,X2JET(JW)
+                  WRITE(LUN,*)
+     &                 '  X1,X2,PT:',X1s,X2s,PTSOF
+               ENDIF
+            ELSE
+               IF(Ndebug.gt.1) WRITE(LUN,*)
+     &        ' SAMPLE_MINIJETS: not enough phase space',
+     &             ' (Ncall,Nsof,lbad):',Ncall,Njet,lBAD
+               RETURN
+            ENDIF
+         ENDDO
+         NNSOF(JW) = NSOF_JW+1
+      ENDDO
+      lbad = 0
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_SIGMA_EXT
+     &     (L0,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO)
+
+C-----------------------------------------------------------------------
+C     Hadron-proton cross sections
+C     taken from EXTERNAL(!) interpolation table (calculated elsewhere)
+C     can be used to run NUCLIB with alternative cross section/int.length
+C
+C     input:       L     1,2,3      proton-,pion-,kaon-proton
+C                  SQS   sqrt(s)
+C
+C     output:      SIGT       total cross section (mb)
+C                  SIGEL      elastic cross section (mb)
+C                  SIGINEL    inelastic cross section (mb)
+C                  SLOPE      elastic slope parameter (GeV^-2)
+C                  RHO        real/imaginary part of forward amplitude
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+c     external types
+      DOUBLE PRECISION SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO
+      INTEGER L0
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     external cross section tables
+C     cross sections in model: 23rc1_sib23
+      INTEGER K
+      DOUBLE PRECISION SSIG_TOT(61,3)
+      DOUBLE PRECISION SSIG(61,3)
+      DOUBLE PRECISION SSIG_B(61,3)
+      DOUBLE PRECISION SSIG_RHO(61,3)
+c     internal type declarations
+      DOUBLE PRECISION T,AL,ASQSMIN,ASQSMAX,DASQS
+      INTEGER LL,L,J1,NSQS
+      DIMENSION LL(39)
+      SAVE
+C     proton-proton:
+C     total cross section
+      DATA (SSIG_TOT(K,1),K=    1,   61) /
+     &3.8328D+01,3.8267D+01,3.8435D+01,3.8838D+01,3.9463D+01,
+     &4.0288D+01,4.1277D+01,4.2391D+01,4.3586D+01,4.4918D+01,
+     &4.6354D+01,4.7836D+01,4.9394D+01,5.1050D+01,5.2835D+01,
+     &5.4789D+01,5.6957D+01,5.9392D+01,6.2151D+01,6.5294D+01,
+     &6.8883D+01,7.2529D+01,7.6458D+01,8.0673D+01,8.5172D+01,
+     &8.9955D+01,9.5017D+01,1.0035D+02,1.0595D+02,1.1181D+02,
+     &1.1790D+02,1.2423D+02,1.3077D+02,1.3751D+02,1.4444D+02,
+     &1.5156D+02,1.5885D+02,1.6631D+02,1.7392D+02,1.8169D+02,
+     &1.8960D+02,1.9766D+02,2.0584D+02,2.1416D+02,2.2260D+02,
+     &2.3115D+02,2.3982D+02,2.4860D+02,2.5749D+02,2.6648D+02,
+     &2.7556D+02,2.8475D+02,2.9403D+02,3.0340D+02,3.1287D+02,
+     &3.2242D+02,3.3206D+02,3.4179D+02,3.5159D+02,3.6149D+02,
+     &3.7146D+02/
+C     inel. cross section
+      DATA (SSIG(K,1),K=    1,   61) /
+     &3.0881D+01,3.1156D+01,3.1540D+01,3.2046D+01,3.2673D+01,
+     &3.3410D+01,3.4236D+01,3.5126D+01,3.6050D+01,3.7062D+01,
+     &3.8139D+01,3.9280D+01,4.0476D+01,4.1740D+01,4.3092D+01,
+     &4.4556D+01,4.6161D+01,4.7937D+01,4.9918D+01,5.2137D+01,
+     &5.4629D+01,5.7057D+01,5.9635D+01,6.2361D+01,6.5230D+01,
+     &6.8236D+01,7.1376D+01,7.4643D+01,7.8029D+01,8.1529D+01,
+     &8.5138D+01,8.8847D+01,9.2654D+01,9.6552D+01,1.0054D+02,
+     &1.0461D+02,1.0875D+02,1.1298D+02,1.1727D+02,1.2164D+02,
+     &1.2607D+02,1.3057D+02,1.3512D+02,1.3974D+02,1.4441D+02,
+     &1.4914D+02,1.5393D+02,1.5877D+02,1.6365D+02,1.6859D+02,
+     &1.7357D+02,1.7860D+02,1.8368D+02,1.8880D+02,1.9397D+02,
+     &1.9918D+02,2.0443D+02,2.0972D+02,2.1505D+02,2.2042D+02,
+     &2.2583D+02/
+C     slope parameter
+      DATA (SSIG_B(K,1),K=    1,   61) /
+     &1.0828D+01,1.1096D+01,1.1363D+01,1.1629D+01,1.1894D+01,
+     &1.2159D+01,1.2424D+01,1.2688D+01,1.2953D+01,1.3217D+01,
+     &1.3482D+01,1.3728D+01,1.3980D+01,1.4237D+01,1.4500D+01,
+     &1.4770D+01,1.5047D+01,1.5333D+01,1.5632D+01,1.5945D+01,
+     &1.6278D+01,1.6613D+01,1.6961D+01,1.7324D+01,1.7703D+01,
+     &1.8100D+01,1.8515D+01,1.8949D+01,1.9404D+01,1.9880D+01,
+     &2.0378D+01,2.0899D+01,2.1443D+01,2.2010D+01,2.2600D+01,
+     &2.3212D+01,2.3845D+01,2.4499D+01,2.5173D+01,2.5867D+01,
+     &2.6579D+01,2.7309D+01,2.8055D+01,2.8819D+01,2.9599D+01,
+     &3.0394D+01,3.1205D+01,3.2031D+01,3.2870D+01,3.3724D+01,
+     &3.4590D+01,3.5470D+01,3.6362D+01,3.7266D+01,3.8181D+01,
+     &3.9109D+01,4.0047D+01,4.0995D+01,4.1955D+01,4.2924D+01,
+     &4.3903D+01/
+C     
+      DATA (SSIG_RHO(K,1),K=    1,   61) /
+     &-1.8490D-01,-1.2654D-01,-7.7648D-02,-3.7250D-02,-4.2495D-03,
+     &2.2457D-02,4.3908D-02,6.1032D-02,7.4637D-02,8.5403D-02,
+     &9.3897D-02,1.0058D-01,1.0583D-01,1.0995D-01,1.1318D-01,
+     &1.1571D-01,1.1768D-01,1.1923D-01,1.2044D-01,1.2138D-01,
+     &1.2212D-01,1.2269D-01,1.2314D-01,1.2349D-01,1.2376D-01,
+     &1.2398D-01,1.2414D-01,1.2427D-01,1.2437D-01,1.2445D-01,
+     &1.2451D-01,1.2456D-01,1.2460D-01,1.2463D-01,1.2465D-01,
+     &1.2467D-01,1.2468D-01,1.2470D-01,1.2470D-01,1.2471D-01,
+     &1.2472D-01,1.2472D-01,1.2472D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01/
+C     pion-proton:
+C     total cross section
+      DATA (SSIG_TOT(K,2),K=    1,   61) /
+     &2.3119D+01,2.3225D+01,2.3487D+01,2.3867D+01,2.4328D+01,
+     &2.4886D+01,2.5529D+01,2.6249D+01,2.7038D+01,2.7890D+01,
+     &2.8802D+01,2.9725D+01,3.0766D+01,3.1961D+01,3.3355D+01,
+     &3.4994D+01,3.6931D+01,3.9223D+01,4.1928D+01,4.5104D+01,
+     &4.8811D+01,5.2129D+01,5.5692D+01,5.9498D+01,6.3545D+01,
+     &6.7832D+01,7.2350D+01,7.7094D+01,8.2059D+01,8.7235D+01,
+     &9.2612D+01,9.8183D+01,1.0394D+02,1.0987D+02,1.1596D+02,
+     &1.2221D+02,1.2862D+02,1.3518D+02,1.4188D+02,1.4871D+02,
+     &1.5568D+02,1.6278D+02,1.7001D+02,1.7735D+02,1.8481D+02,
+     &1.9239D+02,2.0008D+02,2.0788D+02,2.1578D+02,2.2378D+02,
+     &2.3189D+02,2.4009D+02,2.4839D+02,2.5679D+02,2.6528D+02,
+     &2.7386D+02,2.8253D+02,2.9129D+02,3.0014D+02,3.0908D+02,
+     &3.1810D+02/
+C     inel. cross section
+      DATA (SSIG(K,2),K=    1,   61) /
+     &1.9941D+01,2.0212D+01,2.0566D+01,2.0995D+01,2.1492D+01,
+     &2.1955D+01,2.2477D+01,2.3056D+01,2.3685D+01,2.4360D+01,
+     &2.5076D+01,2.5721D+01,2.6455D+01,2.7304D+01,2.8298D+01,
+     &2.9466D+01,3.0844D+01,3.2465D+01,3.4364D+01,3.6574D+01,
+     &3.9128D+01,4.1429D+01,4.3864D+01,4.6428D+01,4.9117D+01,
+     &5.1926D+01,5.4847D+01,5.7875D+01,6.1006D+01,6.4233D+01,
+     &6.7551D+01,7.0956D+01,7.4444D+01,7.8010D+01,8.1651D+01,
+     &8.5363D+01,8.9145D+01,9.2994D+01,9.6906D+01,1.0088D+02,
+     &1.0491D+02,1.0901D+02,1.1315D+02,1.1736D+02,1.2161D+02,
+     &1.2592D+02,1.3028D+02,1.3469D+02,1.3915D+02,1.4366D+02,
+     &1.4821D+02,1.5281D+02,1.5746D+02,1.6215D+02,1.6688D+02,
+     &1.7166D+02,1.7648D+02,1.8134D+02,1.8625D+02,1.9119D+02,
+     &1.9618D+02/
+C     slope parameter
+      DATA (SSIG_B(K,2),K=    1,   61) /
+     &1.0120D+01,1.0270D+01,1.0416D+01,1.0559D+01,1.0698D+01,
+     &1.0836D+01,1.0971D+01,1.1105D+01,1.1238D+01,1.1371D+01,
+     &1.1502D+01,1.1435D+01,1.1392D+01,1.1377D+01,1.1395D+01,
+     &1.1452D+01,1.1549D+01,1.1690D+01,1.1878D+01,1.2118D+01,
+     &1.2413D+01,1.2781D+01,1.3163D+01,1.3558D+01,1.3967D+01,
+     &1.4391D+01,1.4829D+01,1.5282D+01,1.5751D+01,1.6236D+01,
+     &1.6738D+01,1.7256D+01,1.7791D+01,1.8343D+01,1.8912D+01,
+     &1.9498D+01,2.0100D+01,2.0718D+01,2.1351D+01,2.1999D+01,
+     &2.2661D+01,2.3338D+01,2.4029D+01,2.4733D+01,2.5451D+01,
+     &2.6182D+01,2.6926D+01,2.7682D+01,2.8450D+01,2.9231D+01,
+     &3.0023D+01,3.0827D+01,3.1642D+01,3.2468D+01,3.3305D+01,
+     &3.4152D+01,3.5010D+01,3.5878D+01,3.6757D+01,3.7645D+01,
+     &3.8543D+01/
+C     
+      DATA (SSIG_RHO(K,2),K=    1,   61) /
+     &-6.7332D-02,-3.0879D-02,-5.4256D-04,2.4410D-02,4.4739D-02,
+     &6.1172D-02,7.4371D-02,8.4920D-02,9.3315D-02,9.9976D-02,
+     &1.0525D-01,1.0941D-01,1.1269D-01,1.1528D-01,1.1731D-01,
+     &1.1891D-01,1.2016D-01,1.2115D-01,1.2192D-01,1.2253D-01,
+     &1.2300D-01,1.2338D-01,1.2367D-01,1.2390D-01,1.2408D-01,
+     &1.2422D-01,1.2433D-01,1.2442D-01,1.2449D-01,1.2454D-01,
+     &1.2458D-01,1.2462D-01,1.2464D-01,1.2466D-01,1.2468D-01,
+     &1.2469D-01,1.2470D-01,1.2471D-01,1.2471D-01,1.2472D-01,
+     &1.2472D-01,1.2472D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01/
+C     kaon-proton:
+C     total cross section
+      DATA (SSIG_TOT(K,3),K=    1,   61) /
+     &1.8299D+01,1.8827D+01,1.9408D+01,2.0016D+01,2.0633D+01,
+     &2.1318D+01,2.2044D+01,2.2810D+01,2.3615D+01,2.4458D+01,
+     &2.5339D+01,2.6253D+01,2.7209D+01,2.8235D+01,2.9372D+01,
+     &3.0683D+01,3.2250D+01,3.4173D+01,3.6576D+01,3.9602D+01,
+     &4.3417D+01,4.6380D+01,4.9560D+01,5.2954D+01,5.6563D+01,
+     &6.0384D+01,6.4411D+01,6.8639D+01,7.3062D+01,7.7674D+01,
+     &8.2464D+01,8.7426D+01,9.2551D+01,9.7831D+01,1.0326D+02,
+     &1.0883D+02,1.1454D+02,1.2037D+02,1.2634D+02,1.3243D+02,
+     &1.3864D+02,1.4496D+02,1.5139D+02,1.5793D+02,1.6458D+02,
+     &1.7133D+02,1.7817D+02,1.8512D+02,1.9215D+02,1.9928D+02,
+     &2.0650D+02,2.1380D+02,2.2119D+02,2.2867D+02,2.3623D+02,
+     &2.4387D+02,2.5160D+02,2.5940D+02,2.6728D+02,2.7524D+02,
+     &2.8328D+02/
+C     inel. cross section
+      DATA (SSIG(K,3),K=    1,   61) /
+     &1.6131D+01,1.6687D+01,1.7256D+01,1.7835D+01,1.8414D+01,
+     &1.8990D+01,1.9596D+01,2.0228D+01,2.0887D+01,2.1572D+01,
+     &2.2282D+01,2.3007D+01,2.3748D+01,2.4525D+01,2.5373D+01,
+     &2.6337D+01,2.7475D+01,2.8859D+01,3.0574D+01,3.2718D+01,
+     &3.5399D+01,3.7521D+01,3.9768D+01,4.2138D+01,4.4626D+01,
+     &4.7228D+01,4.9939D+01,5.2752D+01,5.5666D+01,5.8673D+01,
+     &6.1770D+01,6.4952D+01,6.8215D+01,7.1555D+01,7.4969D+01,
+     &7.8453D+01,8.2007D+01,8.5626D+01,8.9308D+01,9.3052D+01,
+     &9.6855D+01,1.0072D+02,1.0463D+02,1.0861D+02,1.1263D+02,
+     &1.1671D+02,1.2084D+02,1.2501D+02,1.2924D+02,1.3352D+02,
+     &1.3784D+02,1.4220D+02,1.4662D+02,1.5107D+02,1.5558D+02,
+     &1.6012D+02,1.6471D+02,1.6934D+02,1.7401D+02,1.7872D+02,
+     &1.8348D+02/
+C     slope parameter
+      DATA (SSIG_B(K,3),K=    1,   61) /
+     &8.8352D+00,9.1363D+00,9.4011D+00,9.6374D+00,9.8515D+00,
+     &1.0048D+01,1.0230D+01,1.0402D+01,1.0564D+01,1.0720D+01,
+     &1.0870D+01,1.1058D+01,1.1205D+01,1.1322D+01,1.1419D+01,
+     &1.1511D+01,1.1611D+01,1.1734D+01,1.1897D+01,1.2116D+01,
+     &1.2413D+01,1.2781D+01,1.3163D+01,1.3558D+01,1.3967D+01,
+     &1.4391D+01,1.4829D+01,1.5282D+01,1.5751D+01,1.6236D+01,
+     &1.6738D+01,1.7256D+01,1.7791D+01,1.8343D+01,1.8912D+01,
+     &1.9498D+01,2.0100D+01,2.0718D+01,2.1351D+01,2.1999D+01,
+     &2.2661D+01,2.3338D+01,2.4029D+01,2.4733D+01,2.5451D+01,
+     &2.6182D+01,2.6926D+01,2.7682D+01,2.8450D+01,2.9231D+01,
+     &3.0023D+01,3.0827D+01,3.1642D+01,3.2468D+01,3.3305D+01,
+     &3.4152D+01,3.5010D+01,3.5878D+01,3.6757D+01,3.7645D+01,
+     &3.8543D+01/
+C     
+      DATA (SSIG_RHO(K,3),K=    1,   61) /
+     &-2.4506D-02,9.2028D-03,3.5513D-02,5.5961D-02,7.1799D-02,
+     &8.4036D-02,9.3471D-02,1.0074D-01,1.0632D-01,1.1061D-01,
+     &1.1391D-01,1.1643D-01,1.1837D-01,1.1986D-01,1.2100D-01,
+     &1.2187D-01,1.2254D-01,1.2305D-01,1.2345D-01,1.2375D-01,
+     &1.2398D-01,1.2416D-01,1.2429D-01,1.2439D-01,1.2447D-01,
+     &1.2453D-01,1.2458D-01,1.2462D-01,1.2464D-01,1.2467D-01,
+     &1.2468D-01,1.2469D-01,1.2470D-01,1.2471D-01,1.2472D-01,
+     &1.2472D-01,1.2472D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,1.2473D-01,
+     &1.2473D-01/
+      
+      DATA LL /5*0,3*2,4*3,2*1,19*0,6*1/
+
+
+      L = L0
+      NSQS = 61
+      ASQSMIN = 1.D0
+      ASQSMAX = 7.D0
+      DASQS = (ASQSMAX-ASQSMIN)/DBLE(NSQS-1)
+
+      IF(NSQS.LE.0) THEN
+        WRITE(LUN,'(//,1X,A)') 
+     &    'SIB_SIGMA_EXT: interpolation table not initialized.'
+        STOP
+      ENDIF
+      IF(IABS(L).gt.39)THEN
+         WRITE(LUN,*)     
+     &        ' SIB_SIGMA_EXT: unknown beam particle!',L
+         STOP
+      ENDIF
+      IF(L.GT.3) L=LL(IABS(L))
+      IF(L.EQ.0)THEN
+         WRITE(LUN,*)     
+     &        ' SIB_SIGMA_EXT: unknown beam particle!', L
+         STOP
+      ENDIF
+        
+      AL = LOG10(SQS)
+      J1 = INT((AL-1.D0)*10.D0 + 1)
+      if((j1.lt.1).or.(j1.gt.NSQS)) then
+        if (ndebug .gt. 0) 
+     *    write (LUN,'(1x,a,i3,1p,e12.3)') 
+     &      ' SIB_SIGMA_EXT: energy out of range ',L,sqs
+      endif
+      if((j1.lt.1).or.(j1.ge.NSQS)) then
+        J1 = min(J1,NSQS-1)
+        J1 = max(J1,1)
+      endif
+      T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+      SIGT    = SSIG_TOT(J1,L)*(1.D0-T) + SSIG_TOT(J1+1,L)*T
+      SIGINEL = SSIG(J1,L)*(1.D0-T) + SSIG(J1+1,L)*T
+      SIGEL   = SIGT-SIGINEL
+      SLOPE   = SSIG_B(J1,L) *(1.D0-T) + SSIG_B(J1+1,L)*T
+      RHO     = SSIG_RHO(J1,L) *(1.D0-T) + SSIG_RHO(J1+1,L)*T
+
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_PROJECTILE
+     +     (KID,KINT,LRMNT,XCHG,XJET,XX,PX,PY,IFL,KID1,IREJ)
+
+C-----------------------------------------------------------------------
+C...  Subroutine to sample sea and valence quarks in a hadron.
+C.    variables are stored in xx,px,py and ifl arrays.
+C.    for each interaction the hadron undergoes there is one 
+C.    pair of partons attached to the ends of two strings
+C.    (one cut pomeron)
+C.    In addition flavor and momentum may be set aside for the remnant
+C.    arrays are filled: rmnt1,rmnt2, c.str1,c.str2, etc..
+C.    i.e. positions 1 and 2 are reserved for remnant.
+C.
+C.    Input: KINT  : number of interactions the hadron takes part in
+C.           KID   : particle id of hadron
+C.           LRMNT : remnant excitation flag,
+C.                   defines if valence quarks need to be sampled
+C.           XCHG  : flavor exchange prob. between remnant and 
+C.                   central strings
+C.           XJET  : momentum fraction already asigned to minijets
+C.           IREJ  : rejection flag, default set in calling routine
+C.
+C.    Output: XX,IFL,PX,PY  : arrays of momentum fractions, flavor 
+C.                            and transverse momentum
+C.            KID1 : new hadron id (in case of flavor exchange)
+C-------------------------------------------------------------------      
+      IMPLICIT NONE
+
+C     include COMMONs
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+
+C     input type declarations
+      INTEGER KID,KINT,LRMNT
+      DOUBLE PRECISION XCHG,XJET
+      
+C     output type declarations
+      DOUBLE PRECISION XX,PX,PY
+      INTEGER IFL,KID1,IREJ
+      DIMENSION XX(2*NW_max+2),PX(2*NW_max+2),PY(2*NW_max+2),
+     &     IFL(2*NW_max+2)
+
+c     local type declarations
+      INTEGER ICNT1,ICNT2,J,JJ,j1,j2,j3,j4,KRMNT,IRNK,
+     &     IDXVAL,IDX,ISWTD,i,IFLS,NVAL,NSEA,IR,IDUM,IDUM2,KIDA,IMRG2HAD
+      DOUBLE PRECISION XSEAJET,XVAL,XMINA,XMINA_SEA,GAMMA,XREM,XMINA2,
+     &     XMAX2,ALPHA,XM2DIS,ASUP,XMAX,XQM,S_RNDM,
+     &     CHIDIS,CHI,GAMDIQ,XSUPP,XSUPP1,PAR53_def,PAR5_def,PAR6_def,
+     &     PAR7_def,PAR143_def,XSUM,STR_mass,PTS,XSCL
+      SAVE
+      DATA ICNT1,ICNT2 /0,0/
+      
+C..   initialization
+      ITRY(3) = 0
+      XVAL = 0.D0
+      XSCL = 1.D0
+      XSEAJET = 0.D0
+      XSUM = 0.D0
+      DO J=1,KINT               ! zero arrays
+         j1 = 1+2*(j-1)
+         j2 = j1 + 1
+         j3 = 3+2*(j-1)
+         j4 = j3 + 1
+         XX(j1) = 0.D0
+         XX(j2) = 0.D0
+         XX(j3) = 0.D0
+         XX(j4) = 0.D0
+         PX(j1) = 0.D0
+         PX(j2) = 0.D0
+         PX(j3) = 0.D0
+         PX(j4) = 0.D0
+      ENDDO
+
+      KRMNT = MIN(LRMNT,1)
+
+      IF(ndebug.gt.3) 
+     +     WRITE(LUN,*)
+     +     ' SAMPLE_PROJECTILE: KID,KINT,KRMNT,XCHG,XJET,IREJ',
+     +     KID,KINT,KRMNT,XCHG,XJET,IREJ
+
+      KID1 = KID
+      KIDA = IABS(KID)
+      
+c     number of valence quarks to sample
+c     if remnant is resolved (krmnt=1) no valence pair needed
+      Nval = 2*(1-KRMNT)
+
+c     number of sea quarks to sample (one pair per interaction)
+c     if remnant is not resolved then on pair less is needed 
+c     (valence pair takes role of one sea pair)
+      Nsea = 2*(KINT-(1-KRMNT))
+
+      IF(ndebug.gt.3) 
+     +     WRITE(LUN,*)
+     +     ' SAMPLE_PROJECTILE: number of partons to sample ',
+     +     '(tot,val,sea):',Nval+Nsea,Nval,Nsea
+
+c     change proton splitting to enhance charge exchange by allowing
+c     ud more often than uu, default scenario is ud,du,uu: 3:1:2
+      PAR53_def = PAR(53)
+      PAR(53) = PAR(84)
+c     change proton splitting in case no remnant is present
+      IF(LRMNT.eq.0) PAR(53) = PAR(127)
+
+ 20   ITRY(3) = ITRY(3) + 1
+      IF(ITRY(3).gt.NREJ(3)) THEN
+         ICNT1 = ICNT1 + 1
+         IF(ICNT1.lt.10)THEN
+          if (NDEBUG.gt.0) then
+            WRITE(LUN,*)' SAMPLE_PROJECTILE: trials exceeded! return..'
+            WRITE(LUN,*)
+     +           '  KID,KINT,KRMNT,XCHG,XJET,XVAL,IREJ,NCALL',
+     +           KID,KINT,KRMNT,XCHG,XJET,XVAL,IREJ,NCALL           
+          endif
+         ENDIF
+         PAR(53) = PAR53_def
+         RETURN 
+      ENDIF
+
+C...  kinematic limits
+ 22   XSEAJET = XJET
+      IF(KRMNT.eq.0)THEN
+c     minimal momentum fraction for valences
+         XMINA = 2.D0*STR_mass_val/SQS
+c     default for valence quarks: 0.35 , xmin@10GeV = 0.07
+c     taken from COMMON s_cutoff
+         IF(ISTR(KIDA)*IBAR(KIDA).ne.0)
+     &        XMINA = 2.D0*STR_mass_val_hyp/SQS
+      ELSE
+         IF(IPAR(47).eq.4.or.IPAR(47).eq.4.or.IPAR(47).eq.6)then
+c     no valence sampling model
+c     if remnant present then the minimal remnant mass has to be provided
+            XMINA = PAR(96)*AM(IABS(KID))/SQS            
+         ELSEIF(IPAR(47).lt.4)THEN
+c     valences sampled, even if combined again in remnant
+            XMINA = 2.D0*STR_mass_val/SQS
+         ELSEIF(IPAR(47).eq.7)THEN
+c     minimal remnant mass not requiered,
+c     mass is taken from central strings anyway..
+            XMINA = AM(IABS(KID))/SQS
+         ENDIF
+      ENDIF
+         
+c     minimal momentum fraction for sea partons
+      IF(IPAR(47).eq.0.or.IPAR(47).eq.3)THEN
+c     same as valence quarks
+         STR_mass = STR_mass_val
+      ELSEIF(IPAR(47).eq.1.or.IPAR(47).eq.2.or.IPAR(47).gt.4)THEN
+c     set by parameter
+         STR_mass = PAR(87)
+      ELSEIF(IPAR(47).eq.4)THEN
+c     same as soft minijets
+         STR_mass = STR_mass_sea
+      ENDIF
+      IF(IPAR(72).eq.2.and.KINT.gt.1)THEN
+         STR_mass = STR_mass * PAR(118)
+      ENDIF
+      XMINA_SEA = 2.D0*STR_mass/SQS
+c     default for sea quarks: 1.0 , xmin@10GeV = 0.2
+c     taken from COMMON s_cutoff or s_cflafr
+c     should be the same as min. string mass in SAMPLE_SOFT !
+
+c     dependence on number of interactions
+      IF(IPAR(72).eq.1.and.KINT.gt.1)THEN
+         XMINA_SEA = XMINA_SEA * PAR(118)
+      ENDIF
+
+C..   check if enough energy left to sample all partons
+      IF (1.D0-XJET.LT.(Nsea*XMINA_SEA+2.D0*XMINA))THEN
+         ICNT2 = ICNT2 + 1
+         IF(ICNT2.le.10)THEN
+            IF(NDEBUG.gt.3)THEN
+               write(lun,*)' SAMPLE_PROJECTILE: rejection!' 
+               write(lun,*)'  too little energy to sample all partons!'
+               write(lun,*)'  (NW,Ntot,Nval,Nsea,XMIN,XMIN*N',
+     &              'XREM,XALL,NCALL,ICNT:)',KINT,nval+nsea,Nval,nsea,
+     &              2*xmina,nsea*xmina_sea,1.D0-xjet,
+     &              Nsea*XMINA_SEA+2*XMINA,NCALL,ICNT2
+               IF(ICNT2.eq.10) write(lun,*)' last warning ! good luck..'
+            ENDIF
+         ENDIF
+
+         IREJ = 2
+         PAR(53) = PAR53_def
+         RETURN
+      ENDIF
+
+
+C...  sample sea partons
+c     if no additional partons need to be sampled 
+C     jump straight to valence quarks
+      IF(Nsea.EQ.0) GOTO 100
+
+C     select sea quark model
+      IF(IPAR(47).eq.0.or.IPAR(47).eq.3.or.IPAR(47).eq.4.or.
+     &     IPAR(47).eq.5.or.IPAR(47).eq.7)THEN
+         GAMMA = PAR(103)
+         IF(IPAR(73).eq.1.and.KINT.gt.1) GAMMA = PAR(119)
+         CALL SAMPLE_SEA_TOT
+     &        (KRMNT,KINT,NSEA,GAMMA,XJET,STR_MASS,XSEAJET,XX)
+
+      ELSEIF(IPAR(47).eq.1)THEN
+c     sample from 1/x individually then reject if too large
+         XREM = 0.D0
+         XMINA2 = XMINA_SEA ** 2
+         XMAX2 = 0.8D0**2
+         ALPHA = 1.D0
+         DO WHILE ( XREM .lt. 2*XMINA )
+            XREM = 1.D0-XJET
+            IF(NDEBUG.gt.3)
+     &           WRITE(LUN,*) '  N,XREM,XMINA,XMIN2,XMAX2,ALPHA',
+     &           Nsea,XREM,XMINA_SEA,XMINA2,XMAX2,ALPHA
+            DO j=1,Nsea
+               jj = 2 + j
+               IF(KRMNT.eq.0) jj = 4+j
+               XX(jj) = XM2DIS(XMINA2,XMAX2,ALPHA)
+               IF(NDEBUG.gt.3) 
+     &           WRITE(LUN,*) ' J,X,XREM',JJ,XX(JJ),XREM
+               XREM = XREM - XX(jj)
+            ENDDO
+         ENDDO
+         XSEAJET = 1.D0-XREM
+
+      ELSEIF(IPAR(47).eq.2.or.IPAR(47).eq.6)THEN
+c     sample from (1-x)**b / x with common mass constraint
+         XREM = 1.D0-XJET
+         XMAX = PAR(88)
+         ALPHA = PAR(85)
+         ASUP = PAR(86)
+         XQM = STR_mass
+         CALL SAMPLE_SEA_INDV(KRMNT,XMINA,XMINA_SEA,NSEA,
+     &        XREM,ALPHA,ASUP,XQM,XMAX,XX,IR)
+         IF(IR.ne.0)THEN
+            IREJ = IR
+            PAR(53) = PAR53_def
+            RETURN
+         ENDIF
+
+         XSEAJET = 1.D0-XREM
+      ENDIF
+
+C...  sample sea flavor: u,d,s,c
+c     write to ifl after valences..
+      DO J=1+Nval/2,KINT
+         j3 = 3+2*(j-1)
+         j4 = j3 + 1
+c     turn on strange sea..
+         IF(IPAR(29).eq.1)THEN
+            IF(IPAR(69).ne.0)THEN
+c     sample asymmetric u,d
+               IFL(j3) = MIN(2,1+INT((2.D0+PAR(114))*S_RNDM(KID)))
+c     sample strange
+               IFLS = 3*(INT((2+PAR(43))*S_RNDM(j3))/2)
+               IFL(j3) = MAX(IFL(j3),IFLS)
+            else
+               IFL(j3) = 1+INT((2.D0+PAR(43))*S_RNDM(j4))
+            endif
+c     sample charm
+c     scale up for mesons
+            IF(IPAR(76).eq.1) XSCL=XSCL+(1-IABS(IBAR(KIDA)))*PAR(126)
+            IF(IFL(j3).eq.3.and.S_RNDM(kid).lt.PAR(97)*PAR(125)*XSCL)
+     &           IFL(j3) = 4
+         ELSE
+            IFL(j3) = INT(1.5D0+S_RNDM(KID))
+         ENDIF
+         IFL(j4) = -IFL(j3)
+         IF(NDEBUG.gt.3) 
+     &        WRITE(LUN,*) '  flavor: JW,FLV1,FLV2',J,IFL(j3),IFL(j4)
+
+C...  sample sea pt
+ 33      IF(IPAR(49).eq.1)THEN
+c     in-string pt for sea partons
+c     flavor and cm energy dependent avg, exponential dist.
+c     avg pt (defined in subroutine ptsetup ):
+c     u,d : PAR(46)+PAR(68)*log10(sqs/20.D0)**2
+c     s:    PAR(47)+PAR(70)*log10(sqs/20.D0)**2
+c     diq:  PAR(48)+PAR(69)*log10(sqs/20.D0)**2
+            CALL PTDIS_4FLV (IFL(j3),PX(j3),PY(j3))
+            PX(j4) = -PX(j3)
+            PY(j4) = -PY(j3)
+
+         ELSEIF(IPAR(49).eq.2)THEN
+c     'primordial' pt
+c     c.m. energy dependent avg, exponential
+c     same for all flavors
+c     avg: PAR(49)+PAR(69)*log10(sqs/20.)**2
+            CALL PTDIS_4FLV (10,PX(j3),PY(j3))
+            PX(j4) = -PX(j3)
+            PY(j4) = -PY(j3)
+
+         ELSEIF(IPAR(49).eq.3)THEN
+c     constant pt
+            PX(j3) = EPS5
+            PY(j3) = EPS5
+            PX(j4) = -PX(j3)
+            PY(j4) = -PY(j3)
+
+         ELSEIF(IPAR(49).eq.4)THEN
+c     sea pt, same as primordial but different params..
+c     c.m. energy dependent avg, exponential
+c     same for all flavors
+c     avg: PAR(132)
+            CALL PTDIS_4FLV (30,PX(j3),PY(j3))
+            PX(j4) = -PX(j3)
+            PY(j4) = -PY(j3)
+         ENDIF
+c     limit parton virtuality         
+         PTS = MAX(PX(j3)**2+PY(j3)**2,EPS10)
+         IF((XX(j3)**2+XX(J4)**2)/PTS.lt.8.D0*PAR(122)/S) GOTO 33
+         IF(NDEBUG.gt.3) 
+     &        WRITE(LUN,*)'  pt: JW,PX,PY,pt',J,Px(j3),Py(j3),sqrt(pts)
+      ENDDO     
+
+C...  Prepare the valence partons
+ 100  XVAL=1.D0-XSEAJET
+      IF(ndebug.gt.3)
+     &     write(lun,*) ' SAMPLE_PROJECTILE: val. fraction remaining:',
+     &     XVAL
+
+      IF(IPAR(47).eq.7)THEN
+c     no remnant, sample valence quarks
+         IF(KRMNT.eq.0) THEN
+c     enough momentum left?
+            IF (XVAL.LT.XMINA) goto 20 ! reject sea kinematics
+         ELSE
+c     sample remnant
+            IF(IPAR(53).eq.1)THEN
+c     momentum dis: x**alpha
+               IF(S_RNDM(KID).gt.XVAL**(PAR(100)+1)) GOTO 22
+            ENDIF
+c     split remnant momentum into partons, just to fill slots
+            
+         ENDIF            
+      ELSE
+         IF(KRMNT.eq.0.or.IPAR(47).lt.4)THEN
+            IF (XVAL.LT.XMINA) goto 20 ! reject sea kinematics
+         ENDIF
+c     remnant momentum fraction
+         IF(KRMNT.ne.0.and.IPAR(53).eq.1)THEN
+            IF(S_RNDM(KID).gt.XVAL**(PAR(100)+1)) GOTO 22
+         ENDIF
+      ENDIF
+c     valence quarks are in 1,2 of IFL,XX etc.
+      IDXVAL = 3
+      IF(KRMNT.ne.0) IDXVAL = 1
+      CALL HSPLI (KID,IFL(IDXVAL),IFL(IDXVAL+1))
+ 110  CHI = CHIDIS(KID,IFL(IDXVAL),IFL(IDXVAL+1))
+      XX(IDXVAL) = MAX(CHI*XVAL,XMINA)
+      XX(IDXVAL) = MIN(XX(IDXVAL),XVAL-XMINA)
+C     FOR MESONS, SPLIT ENERGY SYMMETRICALLY.
+      IF (IABS(KID).LT.13.AND.S_RNDM(0).LE.0.5D0) 
+     &     XX(IDXVAL)=XVAL-XX(IDXVAL)
+      XX(IDXVAL+1)=XVAL-XX(IDXVAL)
+      IF(ndebug.gt.3)
+     &     write(lun,*) ' SAMPLE_PROJECTILE: val. sampled (x1,x2):',
+     &     XX(IDXVAL),XX(IDXVAL+1)
+c     for baryons force diq distribution
+      IF(IBAR(IABS(KID)).ne.0.and.IPAR(47).ne.7)THEN
+         IF(IPAR(52).eq.1)THEN
+            GAMDIQ=PAR(95)
+            IF(S_RNDM(KID).gt.XX(IDXVAL+1)**(GAMDIQ+1)) GOTO 110
+         ELSE
+            IF(KRMNT.eq.0.or.IPAR(47).lt.4.and.IPAR(53).eq.0)THEN
+c     force diquark distribution
+               GAMDIQ=PAR(95)
+               IF(S_RNDM(KID).gt.XX(IDXVAL+1)**(GAMDIQ+1)) GOTO 20
+            ENDIF
+         ENDIF
+      ENDIF
+C...  val. quark transverse momentum
+      CALL PTDIS_4FLV (10,PX(IDXVAL),PY(IDXVAL))
+      PX(IDXVAL+1) = -PX(IDXVAL)
+      PY(IDXVAL+1) = -PY(IDXVAL)     
+      IF(ndebug.gt.3)
+     &     write(lun,*) ' SAMPLE_PROJECTILE: val. pt (px,py):',
+     &     PX(IDXVAL),PY(IDXVAL)
+
+C...  exchange flavor between central strings and remnant
+c     there is one pair of strings for each interaction with another hadron
+c     in general allowed for both flavors but diquarks usually strongly suppressed
+c     Xchg : prob. of flv exchange between strgs and rmnt
+      IF(KRMNT.ne.0)THEN
+         do idx=1,2
+            iswtd = 0
+            i = 1
+            XSUPP = 1.D0
+            IF(iabs(ifl(idx)).gt.10)THEN
+c     suppress exchange of diq: prob_exchange = prob0 * xsupp
+               XSUPP = PAR(83)
+            ELSEIF(IPAR(46).eq.2)THEN
+c     suppress exchange for fast quark ( usually in mesons )
+               IF(xx(idx).gt.xx(3-idx)) XSUPP = PAR(139)
+            ENDIF
+            DO WHILE (ISWTD.eq.0.and.i.le.KINT)
+c     sea flavor index
+               jj = idx+2*i
+c     forbid exchange for charmed hadrons if sea pair is charmed too
+c     needed to avoid double charmed particles
+               XSUPP1 = XSUPP
+               IF(IABS(KID).gt.50.and.IABS(IFL(JJ)).eq.4) XSUPP1 = 0.D0
+               if(S_RNDM(I).lt.XCHG*XSUPP1) THEN               
+c     exchange flavor between remnant and sea
+                  CALL ISWTCH_LMNTS(ifl(jj),ifl(idx))
+c     also exchange momentum fraction
+                  IF(IPAR(46).ne.0) CALL SWTCH_LMNTS(xx(jj),xx(idx))
+c     change flavor id accordingly, i.e. reassamble remnant from new flavor
+                  IF(IPAR(58).eq.0)THEN
+c     combine to any hadron that matches flavor wise, ignoring (iso)spin
+                     CALL SIB_I4FLAV(ifl(1),ifl(2),idum,idum2,KID1)
+                  ELSEIF(IPAR(58).eq.1)THEN
+c     combine to lightest hadron
+                     KID1 = IMRG2HAD(IFL(1),IFL(2))
+                  ELSEIF(IPAR(58).eq.2.or.IPAR(58).eq.3)THEN
+c     combine to any hadron that matches flavor wise, ignoring (iso)spin
+c     set vector meson rate
+                     PAR5_def = PAR(5)
+                     PAR(5) = PAR(104)
+c     set strange vector rate
+                     PAR6_def = PAR(6)
+                     PAR(6) = PAR(121)
+c     set spin3/2 vs spin1/2 rate
+                     PAR7_def = PAR(7)
+                     PAR(7) = PAR(105)
+c     set rho / omega-phi rate
+                     PAR143_def = PAR(143)
+                     if(ibar(iabs(kb)).eq.0.and.IPAR(85).eq.1)
+     &                    PAR(143) = PAR(145)
+                     irnk = 0                     
+                     IF(IPAR(58).eq.3) irnk = 1                     
+                     CALL SIB_I4FLAV(ifl(1),ifl(2),irnk,idum2,KID1)
+                     PAR(5) = PAR5_def
+                     PAR(6) = PAR6_def
+                     PAR(7) = PAR7_def
+                     PAR(143) = PAR143_def
+
+c     reject spin1,isospin singlett
+                     IF(KID1.eq.32.and.PAR(111).gt.S_RNDM(KID1))
+     &                    KID1 = 27
+                  ENDIF
+                  iswtd = 1
+               endif
+               i = i + 1
+            ENDDO
+         enddo
+      ENDIF
+      IF(ndebug.gt.3)THEN        
+         WRITE(LUN,*)' SAMPLE_PROJECTILE: rmnt PID,NTRY: ',KID1,ITRY(3)
+         WRITE(LUN,*)' SAMPLE_PROJECTILE: output: I,FLV,PX,PY,X,XSUM'
+      ENDIF
+      XSUM = XJET
+      DO j=IDXVAL,2*(KINT+Krmnt)+2*(1-Krmnt)
+         XSUM = XSUM + XX(j)
+         IF(NDEBUG.gt.3) WRITE(LUN,*) j,IFL(j),PX(J),PY(J),XX(j),XSUM
+      ENDDO
+      IF(ABS(XSUM-1.D0).gt.EPS3) THEN
+         WRITE(LUN,*)' SAMPLE_PROJECTILE: parton sum incomplete!',
+     &        '(ID,XSUM,NCALL):' , KID1,XSUM, NCALL,' aborting..'
+         CALL SIB_REJECT('SAMPLE_PROJECTIL')
+      ENDIF
+      IREJ = 0
+
+      END
+C=======================================================================
+
+      SUBROUTINE DECSIB 
+
+C-----------------------------------------------------------------------
+C...Decay all unstable particle in Sibyll
+C.  decayed particle have the code increased by 10000
+C
+C   changed to allow for multiple calls to DECSIB in one event
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION CBR
+      INTEGER KDEC,LBARP,IDB
+      COMMON /S_CSYDEC/ CBR(223+16+12+8), KDEC(1338+6*(16+12+8)),
+     &     LBARP(99), IDB(99)
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+      INTEGER LLIST1
+      COMMON /S_PLIST1/ LLIST1(8000)
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      INTEGER LRNK
+      COMMON /SIB_RNK/ LRNK(8000)
+      DIMENSION P0(5), LL(10), PD(10,5)
+      SAVE
+
+c     call pythia decay routine      
+c      IF(IPAR(44).eq.1) CALL PYDEC
+
+c     decay with sibyll
+      NN = 1
+      IF(IPAR(44).ne.1)THEN
+         DO J=1,NP
+            LLIST1(J) = 0
+         ENDDO
+      ENDIF
+      DO WHILE (NN .LE. NP)
+         L= LLIST(NN)
+         LA = IABS(L)
+         if(LA.lt.100) then
+           IF (IDB(LA) .GT. 0)  THEN
+              DO K=1,5
+                P0(K) = P(NN,K)
+              ENDDO
+              CALL DECPAR (L,P0,ND,LL,PD)
+              LLIST(NN) = LLIST(NN)+ISIGN(10000,LLIST(NN))
+              DO J=1,ND
+                NP = NP+1
+                if(NP.gt.8000) then
+                  write(LUN,'(1x,a,2i8)') 
+     &              ' DECSIB: no space left in S_PLIST (NP,ND):',NP,ND
+                  NP = NP-1
+                  return
+                endif
+                DO K=1,5
+                  P(NP,K) = PD(J,K)
+                ENDDO
+                LLIST(NP)=LL(J)
+                LLIST1(NP)=NN
+                LRNK(NP)=LRNK(NN)
+                NPORIG(NP)= NPORIG(NN)
+                niorig(NP)= NIORIG(NN)
+                NFORIG(NP) = L
+              ENDDO
+           ENDIF
+         endif
+         NN = NN+1
+      ENDDO
+
+c      CALL SIB_LIST(20)
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_SIGMA_HP
+     &     (L0,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+C-----------------------------------------------------------------------
+C     Hadron-proton cross sections, taken from interpolation table
+C     calculated by SIBYLL_INI
+C
+C     input:       L     1      proton-proton
+C                        2      pi-proton
+C                        3      K-proton
+C                  SQS   sqrt(s)
+C
+C     output:      SIGT       total cross section (mb)
+C                  SIGEL      elastic cross section (mb)
+C                  SIGINEL    inelastic cross section (mb)
+C                  SIGDIF     diffraction dissociation CS (mb)
+C                  SLOPE      elastic slope parameter (GeV^-2)
+C                  RHO        real/imaginary part of forward amplitude
+C-----------------------------------------------------------------------
+Cf2py integer, intent(in) :: L0
+Cf2py double precision, intent(in) :: SQS
+Cf2py double precision, intent(out) :: SIGT,SIGEL,SIGINEL,SLOPE,RHO
+Cf2py double precision(3), intent(out) :: SIGDIF
+      IMPLICIT NONE
+
+c     external types
+      DOUBLE PRECISION SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO      
+      DIMENSION SIGDIF(3)
+      INTEGER L0
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      DOUBLE PRECISION SSIG_TOT,SSIG_SD1,SSIG_SD2,SSIG_DD,SSIG_B,
+     &     SSIG_RHO
+      COMMON /S_CCSIG2/ SSIG_TOT(61,3),SSIG_SD1(61,3),SSIG_SD2(61,3),
+     &    SSIG_DD(61,3),SSIG_B(61,3),SSIG_RHO(61,3)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     internal type declarations
+      DOUBLE PRECISION T,AL
+      INTEGER LL,L,J1
+      DIMENSION LL(39)
+      SAVE
+      DATA LL /5*0,3*2,4*3,2*1,19*0,6*1/
+
+
+      L = L0
+      IF(NSQS.LE.0) THEN
+        WRITE(LUN,'(//,1X,A)') 
+     &    ' SIB_SIGMA_HP: interpolation table not initialized.'
+        STOP
+      ENDIF
+      IF(IABS(L).gt.39)THEN
+         WRITE(LUN,*)     
+     &        ' SIB_SIGMA_HP: unknown beam particle!',L
+         STOP
+      ENDIF
+      IF(L.GT.3) L=LL(IABS(L))
+      IF(L.EQ.0)THEN
+         WRITE(LUN,*)     
+     &        ' SIB_SIGMA_HP: unknown beam particle!', L
+         STOP
+      ENDIF
+        
+      AL = LOG10(SQS)
+      J1 = INT((AL-1.D0)*10.D0 + 1)
+      if((j1.lt.1).or.(j1.gt.NSQS)) then
+        if(ndebug.gt.0)
+     &         write (LUN,'(1x,a,i3,1p,e12.3)') 
+     &         ' SIB_SIGMA_HP: energy out of range ',L,sqs
+      endif
+      if((j1.lt.1).or.(j1.ge.NSQS)) then
+        J1 = min(J1,NSQS-1)
+        J1 = max(J1,1)
+      endif
+      T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+      SIGT    = SSIG_TOT(J1,L)*(1.D0-T) + SSIG_TOT(J1+1,L)*T
+      SIGINEL = SSIG(J1,L)*(1.D0-T) + SSIG(J1+1,L)*T
+      SIGEL   = SIGT-SIGINEL
+      SIGDIF(1) = SSIG_SD1(J1,L)*(1.D0-T) + SSIG_SD1(J1+1,L)*T
+      SIGDIF(2) = SSIG_SD2(J1,L)*(1.D0-T) + SSIG_SD2(J1+1,L)*T
+      SIGDIF(3) = SSIG_DD(J1,L)*(1.D0-T) + SSIG_DD(J1+1,L)*T
+      SLOPE   = SSIG_B(J1,L) *(1.D0-T) + SSIG_B(J1+1,L)*T
+      RHO     = SSIG_RHO(J1,L) *(1.D0-T) + SSIG_RHO(J1+1,L)*T
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_SIGMA_HP2
+     +     (L,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+C-----------------------------------------------------------------------
+C     Hadron-proton cross sections, taken from interpolation table
+C     calculated by SIBYLL_INI
+C
+C     input:       L     1      proton-proton
+C                        2      pi-proton
+C                        3      K-proton
+C                  SQS   sqrt(s)
+C
+C     output:      SIGT       total cross section (mb)
+C                  SIGEL      elastic cross section (mb)
+C                  SIGINEL    inelastic cross section (mb)
+C                  SIGDIF     diffraction dissociation CS (mb)
+C                             split in high and low mass !!
+C                             ( taken from S_CCSIG3 )
+C                  SLOPE      elastic slope parameter (GeV^-2)
+C                  RHO        real/imaginary part of forward amplitude
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+c     external types      
+      DOUBLE PRECISION SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO
+      DIMENSION SIGDIF(3,2)
+      INTEGER L
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+      DOUBLE PRECISION SSIG_TOT,SSIG_SD1,SSIG_SD2,SSIG_DD,SSIG_B,
+     &     SSIG_RHO
+      COMMON /S_CCSIG2/ SSIG_TOT(61,3),SSIG_SD1(61,3),SSIG_SD2(61,3),
+     &    SSIG_DD(61,3),SSIG_B(61,3),SSIG_RHO(61,3)
+      DOUBLE PRECISION SSIG_SD1LM,SSIG_SD1HM,SSIG_SD2LM,SSIG_SD2HM,
+     &     SSIG_DDLM,SSIG_DDHM
+      COMMON /S_CCSIG3/ SSIG_SD1LM(61,3),SSIG_SD1HM(61,3),
+     &     SSIG_SD2LM(61,3),SSIG_SD2HM(61,3),
+     &     SSIG_DDLM(61,3),SSIG_DDHM(61,3)
+
+c     internal types
+      INTEGER J1
+      DOUBLE PRECISION T,AL
+      SAVE
+
+      IF(NSQS.LE.0) THEN
+        WRITE(LUN,'(//,1X,A)') 
+     &    ' SIB_SIGMA_HP2: interpolation table not initialized.'
+        STOP
+      ENDIF
+        
+      AL = dLOG10(SQS)
+      J1 = INT((AL - 1.D0)*10.D0 + 1)
+      if((j1.lt.1).or.(j1.gt.NSQS)) then
+        if(ndebug.gt.0)write(LUN,'(1x,a,i3,1p,e12.3)') 
+     &    ' SIB_SIGMA_HP2: energy out of range ',L,sqs
+      endif
+      if((j1.lt.1).or.(j1.ge.NSQS)) then
+        J1 = min(J1,NSQS-1)
+        J1 = max(J1,1)
+      endif
+      T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+      SIGT    = SSIG_TOT(J1,L)*(1.D0-T) + SSIG_TOT(J1+1,L)*T
+      SIGINEL = SSIG(J1,L)*(1.D0-T) + SSIG(J1+1,L)*T
+      SIGEL   = SIGT-SIGINEL
+      SIGDIF(1,1) = SSIG_SD1LM(J1,L)*(1.D0-T) + SSIG_SD1LM(J1+1,L)*T
+      SIGDIF(1,2) = SSIG_SD1HM(J1,L)*(1.D0-T) + SSIG_SD1HM(J1+1,L)*T
+      SIGDIF(2,1) = SSIG_SD2LM(J1,L)*(1.D0-T) + SSIG_SD2LM(J1+1,L)*T
+      SIGDIF(2,2) = SSIG_SD2HM(J1,L)*(1.D0-T) + SSIG_SD2HM(J1+1,L)*T
+      SIGDIF(3,1) = SSIG_DDLM(J1,L)*(1.D0-T) + SSIG_DDLM(J1+1,L)*T
+      SIGDIF(3,2) = SSIG_DDHM(J1,L)*(1.D0-T) + SSIG_DDHM(J1+1,L)*T
+      SLOPE   = SSIG_B(J1,L) *(1.D0-T) + SSIG_B(J1+1,L)*T
+      RHO     = SSIG_RHO(J1,L) *(1.D0-T) + SSIG_RHO(J1+1,L)*T
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_SIGMA_HAIR (L,SQS,SIGprod,SIGbdif) 
+
+C-----------------------------------------------------------------------
+C     Hadron-air cross sections, taken from interpolation table
+C     calculated by SIBYLL_INI
+C
+C     input:       L     1      proton-air
+C                        2      pi-air
+C                        3      K-air
+C                  SQS   sqrt(s)
+C
+C     output:      SIGprod    particle production cross section (mb)
+C                  SIGbdif    q.ela and ela beam diff. cross section
+C-----------------------------------------------------------------------
+Cf2py integer, intent(in) :: L
+Cf2py double precision, intent(in) :: SQS
+Cf2py double precision, intent(out) :: SIGprod,SIGbdif
+      IMPLICIT NONE
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+
+c     external
+      DOUBLE PRECISION SQS,SIGPROD,SIGBDIF
+      INTEGER L
+
+c     internal
+      DOUBLE PRECISION AL,T
+      INTEGER J1
+      SAVE
+
+      IF(NSQS.LE.0) THEN
+        WRITE(LUN,'(//,1X,A)') 
+     &    ' SIB_SIGMA_HAIR: interpolation table not initialized.'
+        STOP
+      ENDIF
+        
+      AL = LOG10(SQS)
+      J1 = INT((AL - 1.D0)*10.D0 + 1)
+      if((j1.lt.1).or.(j1.gt.NSQS)) then
+        if (ndebug .gt. 0) 
+     &          write (LUN,'(1x,a,i3,1p,e12.3)') 
+     &          ' SIB_SIGMA_HAIR: energy out of range ',L,sqs
+      endif
+      if((j1.lt.1).or.(j1.ge.NSQS)) then
+        J1 = min(J1,NSQS-1)
+        J1 = max(J1,1)
+      endif
+      T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+      SIGprod = SSIGN(J1,L)*(1.D0-T) + SSIGN(J1+1,L)*T
+      SIGbdif = SSIGNSD(J1,L)*(1.D0-T) + SSIGNSD(J1+1,L)*T
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_SIGMA_HNUC (L,IAT,SQS,SIGprod,SIGbdif) 
+
+C-----------------------------------------------------------------------
+C     calculate Hadron-nucleus cross sections
+C
+C     input:       L     1      proton-nuc
+C                        2      pi-nuc
+C                        3      K-nuc
+C                  IAT   0-18   mass number of target nucleus
+C                        (beyond A=18 nuclear profiles are inaccurate)
+C                  SQS   sqrt(s)
+C
+C     output:      SIGprod    particle production cross section (mb)
+C                  SIGbdif    q.ela and ela beam diff. cross section
+C-----------------------------------------------------------------------
+Cf2py integer, intent(in) :: L,IAT
+Cf2py double precision, intent(in) :: SQS
+Cf2py double precision, intent(out) :: SIGprod,SIGbdif
+      IMPLICIT NONE
+
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+      
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION SSIG,PJETC,SSIGN,SSIGNSD,ALINT,ASQSMIN,ASQSMAX,
+     &     DASQS
+      INTEGER NSQS
+      COMMON /S_CCSIG/ SSIG(61,3), PJETC(0:NS_max,0:NH_max,61,2),
+     &     SSIGN(61,3), SSIGNSD(61,3), ALINT(61,3),
+     &     ASQSMIN, ASQSMAX, DASQS, NSQS
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      DOUBLE PRECISION SIGT,SIGEL,SIGINEL,SIGQE,SIGSD,SIGQSD,SIGPPT,
+     &     SIGPPEL,SIGPPSD
+      INTEGER ITG
+      COMMON /NUCSIG/ SIGT,SIGEL,SIGINEL,SIGQE,SIGSD,
+     +     SIGQSD,SIGPPT,SIGPPEL,SIGPPSD,ITG
+
+c     external
+      DOUBLE PRECISION SQS,SIGPROD,SIGBDIF
+      INTEGER L,IAT
+
+c     internal
+      DOUBLE PRECISION ALAM
+      INTEGER IPARM,ICSMOD
+      SAVE
+
+      IF(NSQS.LE.0) THEN
+        WRITE(LUN,'(//,1X,A)') 
+     &    ' SIB_SIGMA_HNUC: interpolation table not initialized.'
+        STOP
+      ENDIF
+
+      IF(IAT.ge.0.and.IAT.lt.19)THEN
+         IF(ndebug.gt.0)THEN
+            WRITE(LUN,'(1X,A,2I4,F8.2)')
+     &           'SIB_SIGMA_HNUC: L,IAT,SQS:',L,IAT,SQS
+         ENDIF
+c     calculate hadron - nucleus cross section
+c     dummy arg, coupling derived from dif xsctn
+         ALAM = 1.D0              
+c     use Sibyll p-p cross section as input
+         ICSMOD = 1             
+c     use Goulianos param. for inel. coupling param.
+         IPARM = 2 
+         CALL SIG_HAD_NUC(L,IAT,SQS,ALAM,ICSMOD,IPARM)
+C     particle production cross section        
+         SIGprod = SIGT-SIGQE
+C     quasi elastic + elastic singl. diff cross section
+         SIGbdif = SIGQSD
+         if(ndebug.gt.0)THEN
+            WRITE(LUN,'(1X,A,3F8.2)')
+     &           'SIB_SIGMA_HNUC: SIGprod, SIGbdif, ALAM:',
+     &           SIGprod, SIGbdif, ALAM
+         ENDIF
+      ELSE
+         WRITE(LUN,'(//,1X,A)') 
+     &     ' SIB_SIGMA_HNUC: number of target nucleons too large!',
+     &     ' (0<=IAT<=18)'
+         SIGprod = -1.D0
+      ENDIF
+      RETURN
+      END
+
+C----------------------------------------------------------------------
+C     sampling routines for hard partons in SIBYLL
+C     includes GRV98 pdf table and initialization routines
+C----------------------------------------------------------------------
+C=======================================================================
+
+      SUBROUTINE SAMPLE_HARD (L,X1,X2,PT)
+
+C-----------------------------------------------------------------------
+C...Routine for sampling the kinematical variables 
+C.  that determine a jet-jet (gluon - gluon) system (x1,x2, pT) 
+C.  from the differential cross section:
+C.     d3sigma/(dx1 dx2 dpT)
+C.  This version assumes the `single parton approximation'
+C.  INPUT:  L=1 incident proton, L=2  incident pi
+C.          NPLD: position on parton stack
+C.  OUTPUT:  gluon 4momenta
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+c     external types
+      INTEGER L
+      DOUBLE PRECISION X1,X2,PT
+      
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+c     internal types
+      DOUBLE PRECISION Z1,Z2,SIG,S_RNDM,Q2,ZSAMPLE      
+      SAVE
+ 
+      IF(ndebug.gt.2)then
+         write(lun,*) ' SAMPLE_HARD: (SQS,S,PTmin,Xmin,Zmin)',
+     &        SQS,S,PTmin,Xmin,Zmin
+      endif
+
+ 100  Z1=ZSAMPLE (ZMIN,L)       ! beam L=1,2 for proton or pion
+      Z2=ZSAMPLE (ZMIN,1)       ! target always a nucleon
+      SIG=1.D0-XMIN*dEXP(-Z1-Z2)
+      IF (SIG .LT. S_RNDM(0))  GOTO 100      
+      X1=dEXP(Z1)
+      X2=dEXP(Z2)
+      IF (X1.gt.0.9D0.or.X2.gt.0.9D0) GOTO 100
+      Q2=PTmin**2/(1.D0-S_RNDM(L)*SIG)
+      IF(Q2.gt.S*X1*X2) goto 100
+      PT=dSQRT(Q2*(1.D0-Q2/(S*X1*X2)))
+
+      IF(ndebug.gt.2)then
+         write(lun,*) ' SAMPLE_HARD: (X1,X2,PT)',
+     &        X1,X2,PT
+      endif
+
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION ZSAMPLE (ZMIN,L)
+
+C-----------------------------------------------------------------------
+C...This function returns as output a value z=log(x)
+C.  distributed as f(x) = g(x) + 4/9 *(q(x) + qbar(x))
+C.  from a minimum value ZMIN to 0,
+C.  for a proton (L=1) or a pi (L=2)
+C.  needs to be initialised with: CALL ZSAMPLE_INI
+C.....................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      PARAMETER (b=0.268D0)
+      PARAMETER (bpi=3.7D0)
+      PARAMETER (cpi=0.698D0)
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      SAVE
+
+      F = PART_INT(ZMIN,L)*S_RNDM(0)
+      IF (F .GE. FFA(L))  THEN
+         IF(IPAR(8).EQ.0)THEN
+            ZSAMPLE = ZA(L) - (F-FFA(L))/APART(L)
+         ELSE
+            if(L.eq.1) then
+               ZSAMPLE = -1.D0/b * dLOG( 1.D0 - F / APART(L) ) 
+            else
+               ZSAMPLE = -1.D0 * ( (F - cpi)/APART(L) )**(1.D0/bpi)
+            endif
+         ENDIF
+      ELSE IF (F .GE. FFB(L))  THEN
+         JF = INT((F-FFB(L))/DFZ(L) + 1.D0)
+         JF = min(JF,199)
+         F0 = FFB(L) + DFZ(L)*DBLE(JF-1)
+         T = (F-F0)/DFZ(L)
+         ZSAMPLE = ZZ(JF,L)*(1.D0-T)+ZZ(JF+1,L)*T
+      ELSE
+         JF = INT(F/DFX(L)+1.D0)
+         JF = min(JF,199)
+         F0 = DFX(L)*DBLE(JF-1)
+         T = (F-F0)/DFX(L)
+         X = XX(JF,L)*(1.D0-T)+XX(JF+1,L)*T
+         ZSAMPLE = dLOG(X)
+      ENDIF
+
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION PART_INT (ZMIN,L)
+
+C-----------------------------------------------------------------------
+C...This function returns as output the integral of
+C.  the parton structure function:
+C.     f(x) = g(x) + 4/9 *(q(x) + qbar(x))
+C.  from xmin = exp(zmin) to 1 
+C.  for a proton (L=1) or a pi (L=2)
+C.  needs to be initialised with: CALL ZSAMPLE_INI
+C.....................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      DOUBLE PRECISION b,bpi,cpi
+      PARAMETER (b=0.268D0)
+      PARAMETER (bpi=3.7D0)
+      PARAMETER (cpi=0.698D0)
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      SAVE
+
+      IF (ZMIN .LT. ZA(L))  THEN
+         IF(IPAR(8).EQ.0)THEN
+            PART_INT = FFA(L) + APART(L) * (ZA(L) - ZMIN)
+         ELSE
+            if(L.eq.1) then
+               PART_INT = APART(L) * ( 1.D0 - dEXP(-b*ZMIN) ) 
+            else
+               PART_INT = APART(L) * ( -ZMIN )**bpi + cpi
+            endif
+         ENDIF
+      ELSE IF (ZMIN .LT. ZB(L)) THEN
+         JZ = INT((ZB(L)-ZMIN)/DZ(L)+1.D0)
+         JZ = min(JZ,199)
+         Z0 = ZB(L)-DZ(L)*DBLE(JZ-1)
+         T = (Z0-ZMIN)/DZ(L)
+         PART_INT = FFZ(JZ,L)*(1.D0-T) + FFZ(JZ+1,L)*T
+
+      ELSE
+         X = EXP(ZMIN)
+         JX = INT((XMAX-X)/DX(L)+1.D0)
+         JX = min(JX,199)
+         X0 = XMAX-DX(L)*DBLE(JX-1)
+         T = (X0-X)/DX(L)
+         PART_INT = FFX(JX,L)*(1.D0-T) + FFX(JX+1,L)*T
+      
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE GRV_INI
+
+C-----------------------------------------------------------------------
+C...This subroutine initializes the COMMON block
+C   used for sampling z, according to the GRV98LO
+C   pdf set
+C..................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      DOUBLE PRECISION b,bpi,cpi
+      PARAMETER (b=0.268D0)
+      PARAMETER (bpi=3.7D0)
+      PARAMETER (cpi=0.698D0)
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      SAVE
+
+      IPAR(8) = 1
+
+      XA(1) = 1.D-06
+      XB(1) = 1.D-01
+
+      XA(2) = 1.D-04
+      XB(2) = 1.D-01
+
+      XMAX = 0.8D0
+      ZMAX = dLOG(XMAX)
+      NX = 200
+      NZ = 200
+
+      DO L=1,2
+
+         ZA(L) = dLOG(XA(L))
+         ZB(L) = dLOG(XB(L))
+         DX(L) = (XMAX-XB(L))/DBLE(NX)
+         DZ(L) = (ZB(L)-ZA(L))/DBLE(NZ)
+
+C     large x: interpolation in x
+         FFX(1,L) = 0.D0
+         DO J=2,NX
+            X = XMAX - DX(L)*(DBLE(J)-1.D0)
+            G = PARTON(X,L)/X
+            FFX(J,L) = FFX(J-1,L)+G*DX(L)
+         ENDDO
+         CALL INVERT_ARRAY (FFX(1,L),XMAX,-DX(L),NX,XX(1,L),FMIN,DFX(L))
+
+C     small x: interpolation in log(x)
+         FFZ(1,L) = FFX(NX,L)
+         DO J=2,NZ
+            Z = ZB(L) - DZ(L)*(DBLE(J)-1.D0)
+            X = dEXP(Z)
+            G = PARTON(X,L)
+            FFZ(J,L) = FFZ(J-1,L)+G*DZ(L)
+         ENDDO
+         CALL INVERT_ARRAY(FFZ(1,L),ZB(L),-DZ(L),NZ,ZZ(1,L),FMIN,DFZ(L))
+         FFA(L) = FFZ(NZ,L)
+         FFB(L) = FFX(NX,L)
+         
+C     very small x:  f(x) = A/x**b b=1.268
+         IF(L.eq.1) THEN
+            APART(L) = FFA(L) / ( 1.D0 - dEXP(-b*ZA(L)) )
+         ELSE
+            APART(L) = ( FFA(L) - cpi ) / ( -ZA(L) )**bpi
+         ENDIF
+      ENDDO
+
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE ZSAMPLE_INI
+
+C-----------------------------------------------------------------------
+C...This subroutine initialise the generation of
+C.  z = log(x)  for the generation  of z according
+C.  to the structure functions
+C..................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      SAVE
+
+      IPAR(8) = 0
+
+      XA(1) = 1.D-04
+      XB(1) = 1.D-01
+      XMAX = 0.8D0
+      ZA(1) = dLOG(XA(1))
+      ZB(1) = dLOG(XB(1))
+      ZMAX = dLOG(XMAX)
+      NX = 200
+      NZ = 200
+      DX(1) = (XMAX-XB(1))/DBLE(NX-1)
+      DZ(1) = (ZB(1)-ZA(1))/DBLE(NZ-1)
+
+      XA(2) = 1.D-04
+      XB(2) = 1.D-01
+      XMAX = 0.8D0
+      ZA(2) = dLOG(XA(2))
+      ZB(2) = dLOG(XB(2))
+      ZMAX = dLOG(XMAX)
+      NX = 200
+      NZ = 200
+      DX(2) = (XMAX-XB(2))/DBLE(NX-1)
+      DZ(2) = (ZB(2)-ZA(2))/DBLE(NZ-1)
+
+      DO L=1,2
+            
+C     very small x:  f(x) = A/x
+         APART(L) = PARTON(0.D0,L)
+            
+C         large x: interpolation in x
+         FFX(1,L) = 0.D0
+         DO J=2,NX
+            X = XMAX - DX(L)*(DBLE(J)-0.5D0)
+            G = PARTON(X,L)/X
+            FFX(J,L) = FFX(J-1,L)+G*DX(L)
+         ENDDO
+         CALL INVERT_ARRAY (FFX(1,L),XMAX,-DX(L),NX,XX(1,L),FMIN,DFX(L))
+            
+C     small x: interpolation in log(x)
+         FFZ(1,L) = FFX(NX,L)
+         DO J=2,NZ
+            Z = ZB(L) - DZ(L)*(DBLE(J)-0.5D0)
+            X = dEXP(Z)
+            G = PARTON(X,L)
+            FFZ(J,L) = FFZ(J-1,L)+G*DZ(L)
+         ENDDO
+         CALL INVERT_ARRAY(FFZ(1,L),ZB(L),-DZ(L),NZ,ZZ(1,L),FMIN,DFZ(L))
+         FFA(L) = FFZ(NZ,L)
+         FFB(L) = FFX(NX,L)
+         
+      ENDDO
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION PARTON(X,L)
+
+C-----------------------------------------------------------------------
+C...This function returns the structure function
+C.   f(x) = x * [ g(x) + 4/9 *(q(x) + qbar(x)) ]
+C.  for a proton. 
+C................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      PARAMETER (beta=1.925978D0)
+      SAVE
+      DATA NOUTP /0/
+
+c     effective scale
+      Q2inp = PAR(22)
+      IF (L .EQ. 2)  GOTO 1000
+
+      IF(IPAR(8).eq.0) THEN
+C...  Eichten et al.  (set 1)
+c     tp060203 100      uv = 1.78 * x**0.5 * (1.-x**1.51)**3.5
+         uv = 1.78D0 * x**0.5D0 * (1.D0-x**1.51D0)**3.5D0
+         dv = 0.67D0 * x**0.4D0 * (1.D0-x**1.51D0)**4.5D0
+         us = 0.182D0 * (1.D0-x)**8.54D0
+         ss = 0.081D0 * (1.D0-x)**8.54D0
+         qq0 = uv + dv + 4.D0*us + 2.D0*ss
+         glu0 = (2.62D0 + 9.17D0*x)* (1.D0-x)**5.9D0
+      ELSE
+         IF( NOUTP.eq.0 ) print *,' using GRV pdf set'
+         IF( NOUTP.eq.0 ) print *,' Q2 scale in pdf:',Q2INP
+         NOUTP = 1
+
+         CALL SIB_DOR98LO (X, Q2inp, UV, DV, US, DS, SS, GL)
+         qq0 = uv + dv + 4.D0* (us + ds) + 2.D0*ss
+         glu0 = gl
+      ENDIF
+      parton = glu0 + 4.D0/9.D0*qq0
+      RETURN
+
+ 1000 CONTINUE
+      IF(IPAR(8).eq.0) THEN
+C...Owens set 1   from STRF from Wisc. Pheno. group. for q2=q2_min
+         AV=0.4D0
+         BV=0.7D0
+c      BETA=GGAMMA(AV)*GGAMMA(BV+1.)/GGAMMA(AV+BV+1.)  =1.925978
+         uv=X**(AV)*(1.D0-X)**BV/BETA
+         dv=uv
+
+         A=0.9D0
+         BET=5.D0
+         us=(A*(1.D0-X)**BET)/6.D0
+         
+         A=0.888D0
+         BET=3.11D0
+         GA1=6.D0
+         glu0=A*(1.D0-X)**BET*(1.D0+GA1*X)
+c   Bug Fix thanks to Sue Kashahara- correct factor in front of 
+c   sea quarks for Owens S.F.  5-94
+         qq0 = uv + dv + 6.D0*us
+         parton = (glu0 + 4.D0/9.D0*qq0)
+         RETURN
+      ELSE
+
+c     duv = valence quark distribution
+c     dgl = gluon distribution
+c     dus = sea quark distribution (u,d,s)
+c     dds = sea charm quark ( neglected )
+c     dss = sea bottom quark ( neglected )
+         CALL DORPLO (X, Q2inp, uv, gl, us, ds, ss)
+         qq0 = uv + dv + 4.D0*us
+         glu0 = gl
+         parton = (glu0 + 4.D0/9.D0*qq0)
+         RETURN
+      ENDIF
+      END
+C=======================================================================
+
+      SUBROUTINE PDF_INI
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      SAVE
+
+      IF(IPAR(8).eq.0) THEN
+         if (ndebug .gt. 0 ) WRITE(LUN,*)
+     *       ' PDF_INI: calcuLating pdf table using Eichten param..'
+         CALL ZSAMPLE_INI
+      ELSEIF(IPAR(8).eq.2) THEN
+         if (ndebug .gt. 0 ) then
+           WRITE(LUN,*)' PDF_INI: calculating pdf table using GRV',
+     *                  '  param..'
+           WRITE(LUN,*)' does not work with -fbounds-check !!'
+         endif
+         CALL GRV_INI
+      ELSE
+         if (ndebug .gt. 0 ) WRITE(LUN,*)
+     *        ' PDF_INI: using common table of GRV parametrization..'
+      ENDIF
+      if (ndebug .gt. 0 )  THEN
+           WRITE(LUN,*)APART(1),FFA(1),FFB(1),DX(1),DZ(1)
+           WRITE(LUN,*)APART(2),FFA(2),FFB(2),DX(2),DZ(2)
+      ENDIF
+      END
+
+C=======================================================================
+
+      BLOCK DATA PDFINI
+
+C-----------------------------------------------------------------------
+C..   tabled parton distribution function
+c     Proton: GRV98LO , Eur.Phys.J. C5(1998) 461-470
+c     Pion:   GRV91 , Z. Phys. C53, 651-655 (1992)
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)      
+      IMPLICIT INTEGER(I-N)
+      COMMON /S_CZGEN/ XA(2),XB(2),XMAX,ZA(2),ZB(2),ZMAX,
+     +     DX(2),DZ(2),APART(2),FFA(2),FFB(2),
+     +     DFX(2),DFZ(2),XX(200,2),ZZ(200,2),FFX(200,2),FFZ(200,2),
+     +     NX,NZ
+      SAVE
+      DATA XA /1.D-06,0.0001D0/
+      DATA XB /0.1D0,0.1D0/
+      DATA XMAX /0.800000011921D0/
+      DATA ZMAX /-0.223143532872D0/
+      DATA NX /200/
+      DATA NZ /200/
+      DATA ZA /-13.8155D0,-9.21034D0/
+      DATA ZB /-2.30259D0,-2.30259D0/
+      DATA DX /0.00351759D0,0.00351759D0/
+      DATA DZ /0.0578539D0,0.0347123D0/
+      DATA DFX /0.00952501D0,0.00847474D0/
+      DATA DFZ /1.93863D0,0.326082D0/
+      DATA APART /-9.80215D0,0.0178207D0/
+      DATA FFA /387.684D0,66.5767D0/
+      DATA FFB /1.89548D0,1.68647D0/
+      
+      DATA (FFX(K,1),K=1,200 ) /
+     &0.000D+00,6.380D-05,1.315D-04,2.034D-04,2.795D-04,
+     &3.601D-04,4.454D-04,5.356D-04,6.309D-04,7.315D-04,
+     &8.377D-04,9.497D-04,1.068D-03,1.192D-03,1.323D-03,
+     &1.460D-03,1.605D-03,1.756D-03,1.916D-03,2.083D-03,
+     &2.258D-03,2.441D-03,2.633D-03,2.835D-03,3.045D-03,
+     &3.265D-03,3.496D-03,3.736D-03,3.988D-03,4.250D-03,
+     &4.524D-03,4.810D-03,5.108D-03,5.418D-03,5.742D-03,
+     &6.078D-03,6.429D-03,6.794D-03,7.174D-03,7.570D-03,
+     &7.981D-03,8.408D-03,8.852D-03,9.313D-03,9.793D-03,
+     &1.029D-02,1.081D-02,1.134D-02,1.190D-02,1.247D-02,
+     &1.307D-02,1.369D-02,1.433D-02,1.500D-02,1.568D-02,
+     &1.640D-02,1.714D-02,1.790D-02,1.869D-02,1.951D-02,
+     &2.035D-02,2.123D-02,2.213D-02,2.307D-02,2.403D-02,
+     &2.503D-02,2.607D-02,2.713D-02,2.823D-02,2.937D-02,
+     &3.054D-02,3.176D-02,3.301D-02,3.430D-02,3.563D-02,
+     &3.701D-02,3.842D-02,3.989D-02,4.139D-02,4.295D-02,
+     &4.455D-02,4.620D-02,4.791D-02,4.966D-02,5.147D-02,
+     &5.334D-02,5.526D-02,5.724D-02,5.927D-02,6.137D-02,
+     &6.353D-02,6.576D-02,6.805D-02,7.041D-02,7.284D-02,
+     &7.534D-02,7.791D-02,8.056D-02,8.329D-02,8.609D-02,
+     &8.898D-02,9.195D-02,9.500D-02,9.814D-02,1.014D-01,
+     &1.047D-01,1.081D-01,1.116D-01,1.153D-01,1.190D-01,
+     &1.228D-01,1.267D-01,1.308D-01,1.350D-01,1.392D-01,
+     &1.436D-01,1.481D-01,1.528D-01,1.575D-01,1.624D-01,
+     &1.674D-01,1.725D-01,1.778D-01,1.832D-01,1.888D-01,
+     &1.946D-01,2.005D-01,2.066D-01,2.128D-01,2.193D-01,
+     &2.259D-01,2.327D-01,2.397D-01,2.469D-01,2.543D-01,
+     &2.619D-01,2.698D-01,2.778D-01,2.862D-01,2.947D-01,
+     &3.035D-01,3.125D-01,3.218D-01,3.314D-01,3.413D-01,
+     &3.514D-01,3.618D-01,3.726D-01,3.836D-01,3.950D-01,
+     &4.067D-01,4.188D-01,4.312D-01,4.440D-01,4.572D-01,
+     &4.708D-01,4.848D-01,4.992D-01,5.141D-01,5.294D-01,
+     &5.452D-01,5.615D-01,5.783D-01,5.956D-01,6.134D-01,
+     &6.319D-01,6.509D-01,6.706D-01,6.909D-01,7.118D-01,
+     &7.334D-01,7.558D-01,7.789D-01,8.029D-01,8.276D-01,
+     &8.532D-01,8.797D-01,9.072D-01,9.356D-01,9.650D-01,
+     &9.956D-01,1.027D+00,1.060D+00,1.094D+00,1.130D+00,
+     &1.167D+00,1.205D+00,1.245D+00,1.287D+00,1.331D+00,
+     &1.376D+00,1.423D+00,1.473D+00,1.525D+00,1.579D+00,
+     &1.636D+00,1.696D+00,1.759D+00,1.826D+00,1.895D+00/
+      
+      DATA (FFX(K,2),K=1,200 ) /
+     &0.000D+00,7.266D-04,1.470D-03,2.231D-03,3.009D-03,
+     &3.805D-03,4.619D-03,5.450D-03,6.300D-03,7.168D-03,
+     &8.055D-03,8.961D-03,9.886D-03,1.083D-02,1.179D-02,
+     &1.278D-02,1.378D-02,1.481D-02,1.585D-02,1.692D-02,
+     &1.800D-02,1.911D-02,2.024D-02,2.139D-02,2.256D-02,
+     &2.376D-02,2.498D-02,2.622D-02,2.748D-02,2.877D-02,
+     &3.008D-02,3.142D-02,3.278D-02,3.416D-02,3.557D-02,
+     &3.701D-02,3.847D-02,3.996D-02,4.147D-02,4.301D-02,
+     &4.458D-02,4.617D-02,4.779D-02,4.945D-02,5.112D-02,
+     &5.283D-02,5.457D-02,5.634D-02,5.813D-02,5.996D-02,
+     &6.182D-02,6.371D-02,6.563D-02,6.759D-02,6.957D-02,
+     &7.159D-02,7.365D-02,7.573D-02,7.786D-02,8.001D-02,
+     &8.221D-02,8.443D-02,8.670D-02,8.900D-02,9.134D-02,
+     &9.372D-02,9.614D-02,9.860D-02,1.011D-01,1.036D-01,
+     &1.062D-01,1.088D-01,1.115D-01,1.142D-01,1.170D-01,
+     &1.197D-01,1.226D-01,1.255D-01,1.284D-01,1.314D-01,
+     &1.344D-01,1.375D-01,1.406D-01,1.438D-01,1.470D-01,
+     &1.503D-01,1.536D-01,1.570D-01,1.605D-01,1.640D-01,
+     &1.675D-01,1.712D-01,1.748D-01,1.786D-01,1.824D-01,
+     &1.862D-01,1.901D-01,1.941D-01,1.982D-01,2.023D-01,
+     &2.065D-01,2.107D-01,2.151D-01,2.195D-01,2.239D-01,
+     &2.285D-01,2.331D-01,2.378D-01,2.426D-01,2.474D-01,
+     &2.524D-01,2.574D-01,2.625D-01,2.677D-01,2.730D-01,
+     &2.784D-01,2.839D-01,2.895D-01,2.951D-01,3.009D-01,
+     &3.068D-01,3.128D-01,3.189D-01,3.251D-01,3.314D-01,
+     &3.378D-01,3.443D-01,3.510D-01,3.578D-01,3.647D-01,
+     &3.717D-01,3.789D-01,3.862D-01,3.937D-01,4.012D-01,
+     &4.090D-01,4.169D-01,4.249D-01,4.331D-01,4.415D-01,
+     &4.500D-01,4.587D-01,4.676D-01,4.767D-01,4.859D-01,
+     &4.954D-01,5.050D-01,5.148D-01,5.249D-01,5.352D-01,
+     &5.457D-01,5.564D-01,5.674D-01,5.786D-01,5.901D-01,
+     &6.019D-01,6.139D-01,6.262D-01,6.388D-01,6.517D-01,
+     &6.649D-01,6.785D-01,6.923D-01,7.066D-01,7.212D-01,
+     &7.362D-01,7.516D-01,7.673D-01,7.836D-01,8.002D-01,
+     &8.174D-01,8.350D-01,8.532D-01,8.718D-01,8.911D-01,
+     &9.109D-01,9.313D-01,9.524D-01,9.742D-01,9.966D-01,
+     &1.020D+00,1.044D+00,1.069D+00,1.094D+00,1.121D+00,
+     &1.149D+00,1.177D+00,1.207D+00,1.238D+00,1.271D+00,
+     &1.304D+00,1.339D+00,1.376D+00,1.414D+00,1.454D+00,
+     &1.496D+00,1.540D+00,1.586D+00,1.635D+00,1.686D+00/
+      
+      DATA (FFZ(K,1),K=1,200 ) /
+     &1.895D+00,2.014D+00,2.137D+00,2.263D+00,2.393D+00,
+     &2.527D+00,2.665D+00,2.807D+00,2.953D+00,3.103D+00,
+     &3.257D+00,3.417D+00,3.580D+00,3.748D+00,3.921D+00,
+     &4.098D+00,4.281D+00,4.469D+00,4.663D+00,4.861D+00,
+     &5.065D+00,5.274D+00,5.489D+00,5.710D+00,5.937D+00,
+     &6.170D+00,6.409D+00,6.654D+00,6.906D+00,7.164D+00,
+     &7.430D+00,7.702D+00,7.981D+00,8.267D+00,8.561D+00,
+     &8.862D+00,9.171D+00,9.487D+00,9.811D+00,1.014D+01,
+     &1.048D+01,1.083D+01,1.119D+01,1.156D+01,1.193D+01,
+     &1.232D+01,1.271D+01,1.311D+01,1.352D+01,1.395D+01,
+     &1.438D+01,1.482D+01,1.527D+01,1.573D+01,1.621D+01,
+     &1.669D+01,1.718D+01,1.769D+01,1.821D+01,1.874D+01,
+     &1.928D+01,1.983D+01,2.040D+01,2.097D+01,2.156D+01,
+     &2.217D+01,2.278D+01,2.341D+01,2.406D+01,2.471D+01,
+     &2.539D+01,2.607D+01,2.677D+01,2.749D+01,2.822D+01,
+     &2.896D+01,2.973D+01,3.050D+01,3.130D+01,3.211D+01,
+     &3.293D+01,3.378D+01,3.464D+01,3.552D+01,3.642D+01,
+     &3.733D+01,3.827D+01,3.922D+01,4.020D+01,4.119D+01,
+     &4.220D+01,4.323D+01,4.429D+01,4.536D+01,4.646D+01,
+     &4.758D+01,4.872D+01,4.988D+01,5.106D+01,5.227D+01,
+     &5.350D+01,5.476D+01,5.604D+01,5.735D+01,5.868D+01,
+     &6.003D+01,6.142D+01,6.282D+01,6.426D+01,6.572D+01,
+     &6.721D+01,6.873D+01,7.028D+01,7.186D+01,7.346D+01,
+     &7.510D+01,7.677D+01,7.847D+01,8.020D+01,8.196D+01,
+     &8.375D+01,8.558D+01,8.744D+01,8.934D+01,9.127D+01,
+     &9.324D+01,9.524D+01,9.728D+01,9.936D+01,1.015D+02,
+     &1.036D+02,1.058D+02,1.080D+02,1.103D+02,1.126D+02,
+     &1.150D+02,1.174D+02,1.198D+02,1.223D+02,1.248D+02,
+     &1.274D+02,1.300D+02,1.327D+02,1.354D+02,1.381D+02,
+     &1.409D+02,1.438D+02,1.467D+02,1.496D+02,1.526D+02,
+     &1.557D+02,1.588D+02,1.619D+02,1.652D+02,1.684D+02,
+     &1.718D+02,1.751D+02,1.786D+02,1.821D+02,1.856D+02,
+     &1.892D+02,1.929D+02,1.967D+02,2.005D+02,2.043D+02,
+     &2.083D+02,2.122D+02,2.163D+02,2.204D+02,2.246D+02,
+     &2.289D+02,2.332D+02,2.376D+02,2.421D+02,2.467D+02,
+     &2.513D+02,2.560D+02,2.608D+02,2.656D+02,2.706D+02,
+     &2.756D+02,2.807D+02,2.859D+02,2.911D+02,2.965D+02,
+     &3.019D+02,3.074D+02,3.130D+02,3.187D+02,3.245D+02,
+     &3.304D+02,3.364D+02,3.425D+02,3.486D+02,3.549D+02,
+     &3.612D+02,3.677D+02,3.743D+02,3.809D+02,3.877D+02/
+      
+      DATA (FFZ(K,2),K=1,200 ) /
+     &1.686D+00,1.738D+00,1.791D+00,1.844D+00,1.899D+00,
+     &1.955D+00,2.011D+00,2.069D+00,2.128D+00,2.188D+00,
+     &2.249D+00,2.311D+00,2.374D+00,2.438D+00,2.504D+00,
+     &2.570D+00,2.638D+00,2.708D+00,2.778D+00,2.850D+00,
+     &2.923D+00,2.997D+00,3.072D+00,3.149D+00,3.228D+00,
+     &3.307D+00,3.388D+00,3.471D+00,3.555D+00,3.640D+00,
+     &3.727D+00,3.815D+00,3.905D+00,3.997D+00,4.090D+00,
+     &4.184D+00,4.281D+00,4.378D+00,4.478D+00,4.579D+00,
+     &4.682D+00,4.787D+00,4.893D+00,5.002D+00,5.112D+00,
+     &5.224D+00,5.337D+00,5.453D+00,5.571D+00,5.690D+00,
+     &5.811D+00,5.935D+00,6.060D+00,6.188D+00,6.317D+00,
+     &6.449D+00,6.583D+00,6.719D+00,6.857D+00,6.997D+00,
+     &7.139D+00,7.284D+00,7.431D+00,7.580D+00,7.732D+00,
+     &7.886D+00,8.042D+00,8.201D+00,8.363D+00,8.526D+00,
+     &8.693D+00,8.862D+00,9.033D+00,9.207D+00,9.384D+00,
+     &9.563D+00,9.746D+00,9.930D+00,1.012D+01,1.031D+01,
+     &1.050D+01,1.070D+01,1.090D+01,1.110D+01,1.130D+01,
+     &1.151D+01,1.172D+01,1.194D+01,1.215D+01,1.237D+01,
+     &1.260D+01,1.283D+01,1.306D+01,1.329D+01,1.353D+01,
+     &1.377D+01,1.401D+01,1.426D+01,1.451D+01,1.476D+01,
+     &1.502D+01,1.528D+01,1.554D+01,1.581D+01,1.608D+01,
+     &1.636D+01,1.664D+01,1.692D+01,1.721D+01,1.750D+01,
+     &1.780D+01,1.810D+01,1.840D+01,1.871D+01,1.902D+01,
+     &1.934D+01,1.966D+01,1.998D+01,2.031D+01,2.065D+01,
+     &2.098D+01,2.133D+01,2.167D+01,2.203D+01,2.238D+01,
+     &2.274D+01,2.311D+01,2.348D+01,2.385D+01,2.423D+01,
+     &2.462D+01,2.501D+01,2.541D+01,2.581D+01,2.621D+01,
+     &2.662D+01,2.704D+01,2.746D+01,2.789D+01,2.832D+01,
+     &2.875D+01,2.920D+01,2.965D+01,3.010D+01,3.056D+01,
+     &3.103D+01,3.150D+01,3.198D+01,3.246D+01,3.295D+01,
+     &3.344D+01,3.395D+01,3.445D+01,3.497D+01,3.549D+01,
+     &3.601D+01,3.655D+01,3.709D+01,3.763D+01,3.819D+01,
+     &3.875D+01,3.931D+01,3.989D+01,4.047D+01,4.105D+01,
+     &4.165D+01,4.225D+01,4.286D+01,4.347D+01,4.410D+01,
+     &4.473D+01,4.537D+01,4.601D+01,4.666D+01,4.732D+01,
+     &4.799D+01,4.867D+01,4.935D+01,5.005D+01,5.075D+01,
+     &5.146D+01,5.217D+01,5.290D+01,5.363D+01,5.437D+01,
+     &5.512D+01,5.588D+01,5.665D+01,5.743D+01,5.821D+01,
+     &5.901D+01,5.981D+01,6.062D+01,6.145D+01,6.228D+01,
+     &6.312D+01,6.397D+01,6.483D+01,6.570D+01,6.658D+01/
+      
+      DATA (XX(K,1),K=1,200 ) /
+     &8.000D-01,6.472D-01,5.944D-01,5.597D-01,5.335D-01,
+     &5.121D-01,4.941D-01,4.785D-01,4.647D-01,4.522D-01,
+     &4.409D-01,4.306D-01,4.210D-01,4.122D-01,4.039D-01,
+     &3.961D-01,3.887D-01,3.817D-01,3.751D-01,3.688D-01,
+     &3.628D-01,3.571D-01,3.516D-01,3.463D-01,3.413D-01,
+     &3.365D-01,3.318D-01,3.273D-01,3.230D-01,3.188D-01,
+     &3.147D-01,3.108D-01,3.070D-01,3.033D-01,2.998D-01,
+     &2.963D-01,2.929D-01,2.896D-01,2.864D-01,2.833D-01,
+     &2.802D-01,2.773D-01,2.744D-01,2.715D-01,2.688D-01,
+     &2.661D-01,2.634D-01,2.608D-01,2.583D-01,2.558D-01,
+     &2.534D-01,2.510D-01,2.487D-01,2.464D-01,2.442D-01,
+     &2.420D-01,2.398D-01,2.377D-01,2.356D-01,2.336D-01,
+     &2.316D-01,2.296D-01,2.277D-01,2.257D-01,2.239D-01,
+     &2.220D-01,2.202D-01,2.184D-01,2.167D-01,2.150D-01,
+     &2.132D-01,2.116D-01,2.099D-01,2.083D-01,2.067D-01,
+     &2.051D-01,2.036D-01,2.020D-01,2.005D-01,1.990D-01,
+     &1.976D-01,1.961D-01,1.947D-01,1.933D-01,1.919D-01,
+     &1.905D-01,1.891D-01,1.878D-01,1.865D-01,1.852D-01,
+     &1.839D-01,1.826D-01,1.814D-01,1.801D-01,1.789D-01,
+     &1.777D-01,1.765D-01,1.753D-01,1.741D-01,1.730D-01,
+     &1.718D-01,1.707D-01,1.696D-01,1.685D-01,1.674D-01,
+     &1.663D-01,1.653D-01,1.642D-01,1.632D-01,1.622D-01,
+     &1.611D-01,1.601D-01,1.591D-01,1.581D-01,1.572D-01,
+     &1.562D-01,1.552D-01,1.543D-01,1.534D-01,1.524D-01,
+     &1.515D-01,1.506D-01,1.497D-01,1.488D-01,1.479D-01,
+     &1.471D-01,1.462D-01,1.453D-01,1.445D-01,1.437D-01,
+     &1.428D-01,1.420D-01,1.412D-01,1.404D-01,1.396D-01,
+     &1.388D-01,1.380D-01,1.372D-01,1.365D-01,1.357D-01,
+     &1.349D-01,1.342D-01,1.335D-01,1.327D-01,1.320D-01,
+     &1.313D-01,1.306D-01,1.299D-01,1.292D-01,1.284D-01,
+     &1.278D-01,1.271D-01,1.264D-01,1.257D-01,1.251D-01,
+     &1.244D-01,1.237D-01,1.231D-01,1.224D-01,1.218D-01,
+     &1.212D-01,1.205D-01,1.199D-01,1.193D-01,1.187D-01,
+     &1.181D-01,1.175D-01,1.169D-01,1.163D-01,1.157D-01,
+     &1.151D-01,1.145D-01,1.139D-01,1.134D-01,1.128D-01,
+     &1.123D-01,1.117D-01,1.112D-01,1.106D-01,1.101D-01,
+     &1.095D-01,1.090D-01,1.085D-01,1.079D-01,1.074D-01,
+     &1.069D-01,1.064D-01,1.059D-01,1.054D-01,1.049D-01,
+     &1.044D-01,1.039D-01,1.034D-01,1.029D-01,1.024D-01,
+     &1.019D-01,1.014D-01,1.010D-01,1.005D-01,1.000D-01/
+      
+      DATA (XX(K,2),K=1,200 ) /
+     &8.000D-01,7.632D-01,7.331D-01,7.073D-01,6.846D-01,
+     &6.643D-01,6.458D-01,6.289D-01,6.132D-01,5.986D-01,
+     &5.849D-01,5.721D-01,5.600D-01,5.485D-01,5.376D-01,
+     &5.272D-01,5.172D-01,5.077D-01,4.986D-01,4.899D-01,
+     &4.815D-01,4.734D-01,4.656D-01,4.581D-01,4.508D-01,
+     &4.438D-01,4.370D-01,4.304D-01,4.240D-01,4.178D-01,
+     &4.118D-01,4.059D-01,4.002D-01,3.947D-01,3.893D-01,
+     &3.840D-01,3.789D-01,3.739D-01,3.690D-01,3.643D-01,
+     &3.597D-01,3.551D-01,3.507D-01,3.464D-01,3.421D-01,
+     &3.380D-01,3.340D-01,3.300D-01,3.261D-01,3.223D-01,
+     &3.186D-01,3.150D-01,3.114D-01,3.079D-01,3.045D-01,
+     &3.011D-01,2.978D-01,2.945D-01,2.914D-01,2.883D-01,
+     &2.852D-01,2.822D-01,2.792D-01,2.763D-01,2.735D-01,
+     &2.707D-01,2.679D-01,2.652D-01,2.625D-01,2.599D-01,
+     &2.574D-01,2.548D-01,2.523D-01,2.499D-01,2.475D-01,
+     &2.451D-01,2.428D-01,2.405D-01,2.382D-01,2.360D-01,
+     &2.338D-01,2.316D-01,2.295D-01,2.274D-01,2.254D-01,
+     &2.233D-01,2.213D-01,2.193D-01,2.174D-01,2.155D-01,
+     &2.136D-01,2.117D-01,2.099D-01,2.081D-01,2.063D-01,
+     &2.045D-01,2.028D-01,2.011D-01,1.994D-01,1.977D-01,
+     &1.961D-01,1.944D-01,1.929D-01,1.913D-01,1.897D-01,
+     &1.882D-01,1.867D-01,1.851D-01,1.837D-01,1.822D-01,
+     &1.808D-01,1.793D-01,1.779D-01,1.765D-01,1.752D-01,
+     &1.738D-01,1.725D-01,1.711D-01,1.698D-01,1.686D-01,
+     &1.673D-01,1.660D-01,1.648D-01,1.635D-01,1.623D-01,
+     &1.611D-01,1.599D-01,1.588D-01,1.576D-01,1.564D-01,
+     &1.553D-01,1.542D-01,1.531D-01,1.520D-01,1.509D-01,
+     &1.498D-01,1.488D-01,1.477D-01,1.467D-01,1.457D-01,
+     &1.447D-01,1.437D-01,1.427D-01,1.417D-01,1.407D-01,
+     &1.398D-01,1.388D-01,1.379D-01,1.369D-01,1.360D-01,
+     &1.351D-01,1.342D-01,1.333D-01,1.324D-01,1.316D-01,
+     &1.307D-01,1.299D-01,1.290D-01,1.282D-01,1.273D-01,
+     &1.265D-01,1.257D-01,1.249D-01,1.241D-01,1.233D-01,
+     &1.225D-01,1.218D-01,1.210D-01,1.203D-01,1.195D-01,
+     &1.188D-01,1.180D-01,1.173D-01,1.166D-01,1.159D-01,
+     &1.152D-01,1.144D-01,1.138D-01,1.131D-01,1.124D-01,
+     &1.117D-01,1.110D-01,1.104D-01,1.097D-01,1.091D-01,
+     &1.084D-01,1.078D-01,1.072D-01,1.065D-01,1.059D-01,
+     &1.053D-01,1.047D-01,1.041D-01,1.035D-01,1.029D-01,
+     &1.023D-01,1.017D-01,1.012D-01,1.006D-01,1.000D-01/
+      
+      DATA (ZZ(K,1),K=1,200 ) /
+     &-2.303D+00,-3.084D+00,-3.649D+00,-4.098D+00,
+     &-4.472D+00,-4.795D+00,-5.080D+00,-5.335D+00,
+     &-5.568D+00,-5.781D+00,-5.978D+00,-6.161D+00,
+     &-6.333D+00,-6.494D+00,-6.647D+00,-6.792D+00,
+     &-6.929D+00,-7.060D+00,-7.186D+00,-7.306D+00,
+     &-7.421D+00,-7.532D+00,-7.639D+00,-7.742D+00,
+     &-7.842D+00,-7.938D+00,-8.031D+00,-8.122D+00,
+     &-8.210D+00,-8.295D+00,-8.378D+00,-8.459D+00,
+     &-8.538D+00,-8.614D+00,-8.689D+00,-8.762D+00,
+     &-8.834D+00,-8.904D+00,-8.972D+00,-9.039D+00,
+     &-9.104D+00,-9.168D+00,-9.231D+00,-9.293D+00,
+     &-9.353D+00,-9.412D+00,-9.470D+00,-9.528D+00,
+     &-9.584D+00,-9.639D+00,-9.693D+00,-9.746D+00,
+     &-9.799D+00,-9.851D+00,-9.901D+00,-9.951D+00,
+     &-1.000D+01,-1.005D+01,-1.010D+01,-1.014D+01,
+     &-1.019D+01,-1.024D+01,-1.028D+01,-1.033D+01,
+     &-1.037D+01,-1.041D+01,-1.046D+01,-1.050D+01,
+     &-1.054D+01,-1.058D+01,-1.062D+01,-1.066D+01,
+     &-1.070D+01,-1.074D+01,-1.078D+01,-1.082D+01,
+     &-1.086D+01,-1.089D+01,-1.093D+01,-1.097D+01,
+     &-1.101D+01,-1.104D+01,-1.108D+01,-1.111D+01,
+     &-1.115D+01,-1.118D+01,-1.122D+01,-1.125D+01,
+     &-1.128D+01,-1.132D+01,-1.135D+01,-1.138D+01,
+     &-1.141D+01,-1.145D+01,-1.148D+01,-1.151D+01,
+     &-1.154D+01,-1.157D+01,-1.160D+01,-1.163D+01,
+     &-1.166D+01,-1.169D+01,-1.172D+01,-1.175D+01,
+     &-1.178D+01,-1.181D+01,-1.184D+01,-1.186D+01,
+     &-1.189D+01,-1.192D+01,-1.195D+01,-1.198D+01,
+     &-1.200D+01,-1.203D+01,-1.206D+01,-1.208D+01,
+     &-1.211D+01,-1.214D+01,-1.216D+01,-1.219D+01,
+     &-1.221D+01,-1.224D+01,-1.226D+01,-1.229D+01,
+     &-1.231D+01,-1.234D+01,-1.236D+01,-1.239D+01,
+     &-1.241D+01,-1.244D+01,-1.246D+01,-1.248D+01,
+     &-1.251D+01,-1.253D+01,-1.255D+01,-1.258D+01,
+     &-1.260D+01,-1.262D+01,-1.264D+01,-1.267D+01,
+     &-1.269D+01,-1.271D+01,-1.273D+01,-1.276D+01,
+     &-1.278D+01,-1.280D+01,-1.282D+01,-1.284D+01,
+     &-1.286D+01,-1.289D+01,-1.291D+01,-1.293D+01,
+     &-1.295D+01,-1.297D+01,-1.299D+01,-1.301D+01,
+     &-1.303D+01,-1.305D+01,-1.307D+01,-1.309D+01,
+     &-1.311D+01,-1.313D+01,-1.315D+01,-1.317D+01,
+     &-1.319D+01,-1.321D+01,-1.323D+01,-1.325D+01,
+     &-1.327D+01,-1.329D+01,-1.330D+01,-1.332D+01,
+     &-1.334D+01,-1.336D+01,-1.338D+01,-1.340D+01,
+     &-1.342D+01,-1.343D+01,-1.345D+01,-1.347D+01,
+     &-1.349D+01,-1.351D+01,-1.352D+01,-1.354D+01,
+     &-1.356D+01,-1.358D+01,-1.360D+01,-1.361D+01,
+     &-1.363D+01,-1.365D+01,-1.366D+01,-1.368D+01,
+     &-1.370D+01,-1.372D+01,-1.373D+01,-1.375D+01,
+     &-1.377D+01,-1.378D+01,-1.380D+01,-1.382D+01/
+      
+      DATA (ZZ(K,2),K=1,200 ) /
+     &-2.303D+00,-2.512D+00,-2.700D+00,-2.871D+00,
+     &-3.029D+00,-3.175D+00,-3.310D+00,-3.438D+00,
+     &-3.557D+00,-3.670D+00,-3.778D+00,-3.880D+00,
+     &-3.977D+00,-4.070D+00,-4.159D+00,-4.245D+00,
+     &-4.328D+00,-4.407D+00,-4.484D+00,-4.558D+00,
+     &-4.630D+00,-4.699D+00,-4.767D+00,-4.832D+00,
+     &-4.896D+00,-4.958D+00,-5.019D+00,-5.078D+00,
+     &-5.135D+00,-5.191D+00,-5.246D+00,-5.300D+00,
+     &-5.352D+00,-5.403D+00,-5.453D+00,-5.503D+00,
+     &-5.551D+00,-5.598D+00,-5.645D+00,-5.690D+00,
+     &-5.735D+00,-5.779D+00,-5.822D+00,-5.864D+00,
+     &-5.906D+00,-5.947D+00,-5.988D+00,-6.027D+00,
+     &-6.067D+00,-6.105D+00,-6.143D+00,-6.181D+00,
+     &-6.217D+00,-6.254D+00,-6.290D+00,-6.325D+00,
+     &-6.360D+00,-6.394D+00,-6.428D+00,-6.462D+00,
+     &-6.495D+00,-6.528D+00,-6.560D+00,-6.592D+00,
+     &-6.624D+00,-6.655D+00,-6.686D+00,-6.716D+00,
+     &-6.746D+00,-6.776D+00,-6.805D+00,-6.835D+00,
+     &-6.863D+00,-6.892D+00,-6.920D+00,-6.948D+00,
+     &-6.976D+00,-7.003D+00,-7.030D+00,-7.057D+00,
+     &-7.084D+00,-7.110D+00,-7.136D+00,-7.162D+00,
+     &-7.188D+00,-7.213D+00,-7.238D+00,-7.263D+00,
+     &-7.288D+00,-7.312D+00,-7.336D+00,-7.360D+00,
+     &-7.384D+00,-7.408D+00,-7.431D+00,-7.455D+00,
+     &-7.478D+00,-7.501D+00,-7.523D+00,-7.546D+00,
+     &-7.568D+00,-7.590D+00,-7.612D+00,-7.634D+00,
+     &-7.656D+00,-7.677D+00,-7.698D+00,-7.720D+00,
+     &-7.741D+00,-7.761D+00,-7.782D+00,-7.803D+00,
+     &-7.823D+00,-7.843D+00,-7.863D+00,-7.883D+00,
+     &-7.903D+00,-7.923D+00,-7.943D+00,-7.962D+00,
+     &-7.981D+00,-8.001D+00,-8.020D+00,-8.039D+00,
+     &-8.057D+00,-8.076D+00,-8.095D+00,-8.113D+00,
+     &-8.132D+00,-8.150D+00,-8.168D+00,-8.186D+00,
+     &-8.204D+00,-8.222D+00,-8.239D+00,-8.257D+00,
+     &-8.274D+00,-8.292D+00,-8.309D+00,-8.326D+00,
+     &-8.343D+00,-8.360D+00,-8.377D+00,-8.394D+00,
+     &-8.411D+00,-8.427D+00,-8.444D+00,-8.460D+00,
+     &-8.476D+00,-8.493D+00,-8.509D+00,-8.525D+00,
+     &-8.541D+00,-8.557D+00,-8.572D+00,-8.588D+00,
+     &-8.604D+00,-8.619D+00,-8.635D+00,-8.650D+00,
+     &-8.666D+00,-8.681D+00,-8.696D+00,-8.711D+00,
+     &-8.726D+00,-8.741D+00,-8.756D+00,-8.771D+00,
+     &-8.786D+00,-8.800D+00,-8.815D+00,-8.829D+00,
+     &-8.844D+00,-8.858D+00,-8.872D+00,-8.887D+00,
+     &-8.901D+00,-8.915D+00,-8.929D+00,-8.943D+00,
+     &-8.957D+00,-8.971D+00,-8.985D+00,-8.998D+00,
+     &-9.012D+00,-9.026D+00,-9.039D+00,-9.053D+00,
+     &-9.066D+00,-9.080D+00,-9.093D+00,-9.106D+00,
+     &-9.119D+00,-9.133D+00,-9.146D+00,-9.159D+00,
+     &-9.172D+00,-9.185D+00,-9.197D+00,-9.210D+00/
+      END
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION CHIDIS (KPARTin, IFL1, IFL2)
+
+C-----------------------------------------------------------------------
+C...Generate CHI (fraction of energy of a hadron carried by 
+C.                the valence quark, or diquark, as specified by IFL1)
+C.  INPUT KPART = code of particle
+C.        IFL1, IFL2 = codes of partons (3, 3bar of color)
+C.........................................................
+      IMPLICIT NONE
+c     external types
+      INTEGER KPARTIN,IFL1,IFL2
+c     COMMONs
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION CCHIK
+      COMMON /S_CPSPL/ CCHIK(4,99)
+      
+      DOUBLE PRECISION STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+      COMMON /S_CUTOFF/ STR_mass_val, STR_mass_val_hyp, STR_mass_sea
+c     internal types
+      DOUBLE PRECISION CUT,S_RNDM
+      INTEGER KPART,IFQ
+      SAVE
+
+      kpart=IABS(kpartin)
+      IFQ=IABS(IFL1)
+      IF (IFQ.GT.10) IFQ=IABS(IFL2)
+      CUT=2.D0*STR_mass_val/SQS
+c     hyperon beam cut
+      IF(kpart.gt.14) CUT=2.D0*STR_mass_val_hyp/SQS
+100   CHIDIS=S_RNDM(0)**2
+      if (chidis.lt.cut) goto 100
+      if (chidis.gt.(1.D0-cut)) goto 100
+      IF((CHIDIS**2/(CHIDIS**2+CUT**2))**0.5D0
+     +   *(1.D0-CHIDIS)**CCHIK(IFQ,KPART).LT.S_RNDM(1)) GOTO 100
+      CHIDIS = MAX(0.5D0*CUT,CHIDIS)
+      CHIDIS = MIN(1.D0-CUT,CHIDIS)
+c     diquarks or charm quarks      
+      IF (IABS(IFL1).GT.3)  CHIDIS=1.D0-CHIDIS
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION QMASS(IFL)
+
+C-----------------------------------------------------------------------
+C...Return quark or diquark constituent masses
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION QMAS(4)
+      SAVE
+      DATA QMAS /0.325D0,0.325D0,0.5D0,1.5D0/
+
+      IFLA = IABS(IFL)
+      IFLA = MOD(IFLA,100)
+      IF (IFLA .LE. 4)       THEN
+         QMASS = QMAS(IFLA)
+      ELSE
+         QMA = QMAS(IFLA/10)
+         QMB = QMAS(MOD(IFLA,10))
+         QMASS = QMA+QMB
+      ENDIF
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION XM2DIS(XM2MIN,XM2MAX,ALPHA)
+
+C-----------------------------------------------------------------------
+C     function that samples mass**2 from (1/M**2)**alpha
+C     with alpha <= 1                                             
+C     INPUT: Mmin**2 : minimal mass
+C            Mmax**2 : maximal mass
+C            alpha   : slope                                      \FR'14
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+      
+c     reduced alpha
+      ALPHArdc = 2.d0*(ALPHA-1.d0)
+      AMIN = LOG(XM2MIN)
+      AMAX = LOG(XM2MAX)
+      ADLT = AMAX-AMIN
+      IF(ABS(ALPHArdc).LT.1.d-3)THEN
+c     alpha = 1
+         XRNDM = MAX(S_RNDM(0),1.D-10)
+         AX = AMIN+ADLT*XRNDM
+         XM2DIS = EXP(AX)
+      ELSEIF(ALPHArdc.LT.0.D0.and.ALPHA.gt.0.D0)THEN
+c     0 < alpha < 1
+         XRNDM = MAX(S_RNDM(0),1.D-10)
+c     AX = AMAX-LOG(XRNDM)*ALPHArdc
+         DX = XM2MAX**(1.D0-ALPHA)*XRNDM +
+     +        XM2MIN**(1.D0-ALPHA)*(1.D0-XRNDM)
+         AX = LOG(DX)/(1.D0-ALPHA)
+         XM2DIS = EXP(AX)
+      ELSEIF(ALPHArdc.GE.1.D0)THEN
+c     alpha >= 1
+         ALPHAr = 1.D0-ALPHA
+         XMINA = XM2MIN**ALPHAr
+         XMAXA = XM2MAX**ALPHAr
+         XDLT = XMAXA-XMINA
+         XRNDM = MAX(S_RNDM(0),1.D-10)
+         Z = LOG(XMINA+XDLT*XRNDM)/ALPHAR
+         XM2DIS = EXP(Z)
+      ELSE
+         WRITE(6,*) 'M2DIS: undefined exponent in mass distribution!',
+     &        ALPHA
+         XM2DIS = 0.D0
+         CALL SIB_REJECT('M2DIS           ')
+      ENDIF
+      END
+C=======================================================================
+
+      SUBROUTINE EXCTDEC( IDX, LBAD)
+
+C-----------------------------------------------------------------------
+C     routine to fragment an excited system with known flavor via
+C     resonance decay
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+c     external variables
+      INTEGER IDX,LBAD
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+
+      INTEGER LRNK
+      COMMON /SIB_RNK/ LRNK(8000)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     local variables
+      DOUBLE PRECISION P0,BE,PR1,PR2,PRH,GABE,P2,
+     &     PAR2_def,PAR8_def,PAR24_def,DELTAE,PCXG,
+     &     EMIN1,EMIN2,EMIN3,EMIN4,S_RNDM,GA,PTR,PTOT,P1TOT,PX,PY,
+     &     COD,SID,COF,SIF,ANORF,BEP
+      DIMENSION P0(5),BE(3),PR1(5),PR2(5),PRH(5),GABE(4),
+     &     P2(5)
+      INTEGER IPID,IR1DX,IFLR1,IR2DX,IFLR2,IRH,IRHPID,IR,
+     &     KK,KD,IFAIL,N1,IFBAD,J,K,I
+      SAVE
+      
+c      LBAD = 1
+
+c     initial parameters
+      PAR2_def = PAR(2)         ! ud/s rate
+      PAR8_def = PAR(8)         ! popcorn rate
+      PAR24_def = PAR(24)       ! c/s rate
+      if(ndebug.gt.1)
+     &     WRITE(LUN,*) ' EXCTDEC: IDX,IREJ',IDX,LBAD
+      
+c     read remnant 4momentum from stack
+      CALL RD_PRTN_4VEC(IDX,P0,IPID,IR1DX)
+      CALL RD_PRTN_4VEC(IR1DX,PR1,IFLR1,IR2DX)
+      CALL RD_PRTN_4VEC(IR2DX,PR2,IFLR2,IRH)
+      CALL RD_PRTN_4VEC(IRH,PRH,IRHPID,IR)
+      IPFLAG = IPID
+      IF(IDX.ne.IR)then
+         write(lun,*) ' EXCTDEC: reference loop broken!',IDX,IR
+         CALL SIB_REJECT('EXCTDEC         ')
+      endif
+      IF(NDEBUG.GT.2)THEN
+         WRITE(LUN,*) ' EXCTDEC: P0:' , (P0(kk),kk=1,5)
+         WRITE(LUN,*) ' EXCTDEC: PR1:' , (PR1(kk),kk=1,5)
+         WRITE(LUN,*) ' EXCTDEC: PR2:' , (PR2(kk),kk=1,5)
+         WRITE(LUN,*) ' EXCTDEC: PH:' , (PRH(kk),kk=1,5)
+      ENDIF
+      
+C     identity of remnant
+c     form hadron from flavors in remnant
+c     (not preserving spin or isospin!)
+c      CALL SIB_I4FLAV(iflr1,iflr2,Idm, KD )
+      KD = IRHPID
+
+c     available kinetic energy
+      DELTAE = P0(5)-AM(ABS(KD))
+c     fallback region: 0 < DELTAE < EMIN1
+      EMIN1 = PAR(76)
+c     resonance region: EMIN1 < DELTAE < EMIN2
+      EMIN2 = PAR(77)
+c     phasespace decay region: EMIN2 < DELTAE < EMIN3
+      EMIN3 = PAR(78)
+c     string decay region: EMIN3 < DELTAE < EMIN4
+      EMIN4 = PAR(79)
+
+      IF(NDEBUG.gt.2)THEN
+         WRITE(LUN,*) 
+     &        ' EXCTDEC: MASS,IFL1,IFL2,PID',P0(5),IFLR1,IFLR2,KD
+         WRITE(LUN,*) ' EXCTDEC: DELTAE,EMIN1,EMIN2,EMIN3',
+     &        DELTAE,EMIN1,EMIN2,EMIN3
+      ENDIF
+      
+c     strange quark rate
+      IF(IPAR(48).eq.1)THEN
+         PAR(2) = PAR(89)
+      ENDIF
+
+c     charm quark rate
+      IF(IPAR(62).eq.1)THEN
+         PAR(24) = PAR(107)
+      ENDIF
+     
+c     popcorn rate in remnant
+      IF(IPAR(56).eq.1)THEN
+         PAR(8) = PAR(102)
+      ENDIF     
+
+      IF(DELTAE.lt.EMIN2)THEN
+c     beam or resonance region
+         IF(NDEBUG.gt.1) then 
+            if(DELTAE.lt.EMIN1)then
+               WRITE(LUN,*)' EXCTDEC: fallback to beam..'
+            else
+               WRITE(LUN,*)' EXCTDEC: forming resonance..'
+            endif
+         endif
+         NP = NP + 1
+         LLIST(NP) = KD
+         NPORIG(NP) = IPFLAG
+         LRNK(NP) = 0
+         niorig(NP) = iiflag
+         DO kk=1,5
+            P(NP,KK) = P0(KK)
+         ENDDO
+         LBAD = 0
+         PAR(2) = PAR2_def
+         PAR(8) = PAR8_def
+         PAR(24) = PAR24_def
+         RETURN         
+
+      ELSEIF(DELTAE.lt.EMIN3)THEN
+c     phasespace decay region
+         IF(NDEBUG.gt.1) WRITE(LUN,*)' EXCTDEC: phasespace decay ..'
+         IPFLAG = IPID/iabs(IPID) + ISIGN(1000,IPID)
+c     set charge exchange probability, 
+c     i.e. prob for p* -> n + pip
+         PCXG = PAR(99)
+         CALL FIREBALL_4FLV(KD,P0,PCXG,IFAIL)
+         PAR(2) = PAR2_def
+         PAR(8) = PAR8_def
+         PAR(24) = PAR24_def
+         IF(IFAIL.eq.1) THEN
+            IF(ndebug.gt.0)
+     &           WRITE(LUN,*) ' EXCTDEC: remnant frag. rejection!'
+            LBAD = 1
+            RETURN
+         ENDIF
+         LBAD = 0
+         RETURN
+
+c      ELSEIF(DELTAE.lt.EMIN4)THEN
+      ELSE
+C     string fragmentation region
+         IF(NDEBUG.gt.1) WRITE(LUN,*)' EXCTDEC: string decay ..'
+         N1 = NP+1
+         IPFLAG = IPFLAG + ISIGN(3000,IPID)
+c     for meson remnant quark and anti-quark should be treated equally
+c     therefor switch randomly
+         IF(IBAR(ABS(KD)).eq.0.and.S_RNDM(KD).lt.0.5D0)
+     &        CALL ISWTCH_LMNTS(IFLR1,IFLR2)
+
+c     turn remnant string around
+         IF(IPAR(23).eq.1)THEN
+            IF(S_RNDM(0).gt.PAR(39))
+     &           CALL ISWTCH_LMNTS(IFLR1,IFLR2)
+         ENDIF
+
+         CALL STRING_FRAG_4FLV 
+     +        (P0(5), IFLR2, IFLR1, 0.D0,0.D0,0.D0,0.D0,IFBAD,1)
+         IF (IFBAD .EQ. 1)THEN
+            IF(ndebug.gt.0)
+     &           WRITE(LUN,*) ' EXCTDEC: remnant frag. rejection!'
+            LBAD = 1
+            PAR(2) = PAR2_def
+            PAR(8) = PAR8_def
+            PAR(24) = PAR24_def
+            RETURN
+         ENDIF
+         DO J=1,3
+            BE(J)=P0(J)/P0(4)
+            GABE(J)=P0(J)/P0(5)
+         ENDDO
+         GA=P0(4)/P0(5)
+         GABE(4)=P0(4)/P0(5)
+C...  rotate and boost string
+         IF(IPAR(38).eq.1.or.IPAR(38).eq.3)THEN
+c     sample additional soft pt for remnant partons
+            CALL PTDIS_4FLV(0,PX,PY)
+            PTR = SQRT(PX**2+PY**2)
+            PTOT = SQRT(4.D0*PTR**2+P0(5)**2)*0.5D0
+c     rotation factors
+            COD = 0.5D0*P0(5)/PTOT
+            SID = PTR/PTOT
+c            COD= 1.D0/SQRT(1.D0+4.D0*PTR**2/P0(5))
+c            SID= 2.D0*PTR/P0(5)*COD
+            COF=1.D0
+            SIF=0.D0
+            IF(PTOT*SID.GT.EPS5) THEN
+               COF=PX/(SID*PTOT)
+               SIF=PY/(SID*PTOT)
+               ANORF=DSQRT(COF*COF+SIF*SIF)
+               COF=COF/ANORF
+               SIF=SIF/ANORF
+            ENDIF
+            IF(ndebug.gt.3)THEN
+            write(lun,*)' EXCTDEC: rotation factors (cod,sid,cof,sif):',
+     &           cod,sid,cof,sif
+            write(lun,*)' EXCTDEC: rotation angles (theta,phi):',
+     &           ACOS(cod),ACOS(cof)
+            ENDIF
+c     rotate string final state
+            DO K=N1,NP
+               CALL SIB_TRANI(P(K,1),P(k,2),P(k,3),cod,sid,cof,sif
+     &              ,P2(1),P2(2),P2(3))
+               do j=1,3
+                  P(K,j)=P2(j)
+               enddo
+            ENDDO
+c     boost to hadron-hadron center-of-mass
+            IF(ndebug.gt.3)
+     &        write(lun,*) ' EXCTDEC: boost to had-had (gabe,gam):',
+     &           (gabe(j),j=1,4)
+            DO K=N1,NP
+               NPORIG(K) = IPFLAG
+               niorig(K) = iiflag
+               CALL SIB_ALTRA(gabe(4),gabe(1),gabe(2),
+     &              gabe(3),P(k,1),p(k,2),p(k,3),p(k,4),
+     &              P1TOT,p2(1),p2(2),p2(3),p2(4))
+               do j=1,4
+                  P(K,j)=P2(j)
+               enddo
+            ENDDO
+         ELSEIF(IPAR(38).eq.2.or.IPAR(38).eq.0)THEN            
+C...  boost string
+            DO I=N1,NP
+               NPORIG(I) = IPFLAG
+               niorig(I) = iiflag
+               BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+               DO J=1,3
+                  P(I,J)=P(I,J)+GA*(GA*BEP/(1.D0+GA)+P(I,4))*BE(J)
+               ENDDO
+               P(I,4)=GA*(P(I,4)+BEP)
+            ENDDO
+         ENDIF
+      ENDIF
+      LBAD = 0
+      PAR(2) = PAR2_def
+      PAR(8) = PAR8_def
+      PAR(24) = PAR24_def
+      return
+      END
+C=======================================================================
+
+      SUBROUTINE PTDIS_4FLV (IFL,PX,PY)
+
+C-----------------------------------------------------------------------
+C...Generate pT
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      DOUBLE PRECISION PPT02
+      COMMON /S_CQDIS2/ PPT02(44)
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+
+      IF(IFL.eq.0)THEN
+c     quark confinement pt
+         PPTT = PAR(110)
+         XM = 0.325D0
+         XM2 = XM**2
+         RNDM = MAX(EPS10,S_RNDM(IFL))
+         XMT = PPTT * LOG(RNDM) - XM
+         XMT2 = XMT**2
+         PT = SQRT(XMT2-XM2)         
+      ELSE
+         IFLA = IABS(IFL)
+         IFLA = MOD(IFLA,100)
+         PPTT = PPT02(IFLA)
+c     Gaussian distribution
+         PT = PPTT*SQRT(-LOG(MAX(EPS10,S_RNDM(IFL))))
+         IF (IPAR(3).GE.1) THEN
+            IF(MOD(IFLA,10).NE.0) THEN
+               XM = QMASS(IFL)
+            ELSE
+               XM = 0.5D0        ! pomeron mass
+               IF(IPAR(3).ge.6) XM = 0.D0
+            ENDIF
+c     exponential transverse mass
+            XM2 = XM**2
+            RNDM = MAX(EPS10,S_RNDM(IFL))
+            XMT = PPTT * LOG(RNDM) - XM
+            XMT2 = XMT**2
+            PT = SQRT(XMT2-XM2)
+         ENDIF      
+      ENDIF
+      PHI= TWOPI*S_RNDM(IFL)
+      PX=PT*COS(PHI)
+      PY=PT*SIN(PHI)
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE PTSETUP_4FLV(ECM)
+
+C-----------------------------------------------------------------------
+C     moved from sib_ndiff to seperate subroutine 
+c     so that changes will affect diff. /FR'13
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+      DOUBLE PRECISION PPT02
+      COMMON /S_CQDIS2/ PPT02(44)
+      SAVE
+
+      SQS = ECM
+
+c     NA22 piC retune
+      PTU=.3D0+.08D0*dlog10(sqs/30.D0)
+      PTS=.45D0+.08D0*dlog10(sqs/30.D0)
+      PTQQ=.6D0+.08D0*dlog10(sqs/30.D0)
+      PTPOM= .6D0+.08D0*dlog10(sqs/30.D0)
+      if ( IPAR(3).eq.1 ) then 
+c     pt0
+         ptu=.15D0+.007D0*dlog10(sqs/20.D0)**2
+         pts=.3D0+.007D0*dlog10(sqs/20.D0)**2
+         ptqq=.3D0+.03D0*dlog10(sqs/20.D0)**2
+         ptpom= .6D0+.08D0*dlog10(sqs/30.D0)
+      elseif ( IPAR(3).eq.2 ) then
+C     pt1
+         ptu=.15D0+.007D0*dlog10(sqs/20.D0)**2
+         pts=.32D0+.007D0*dlog10(sqs/20.D0)**2
+         ptqq=.4D0+.007D0*dlog10(sqs/20.D0)**2
+         ptpom= .6D0+.08D0*dlog10(sqs/30.D0)
+c     pt2
+      elseif ( IPAR(3).eq.3 ) then
+         ptu=.17D0+.007D0*dlog10(sqs/20.D0)**2
+         pts=.3D0+.007D0*dlog10(sqs/20.D0)**2
+         ptqq=.3D0+.03D0*dlog10(sqs/20.D0)**2
+         ptpom = .6D0+.08D0*dlog10(sqs/30.D0)
+      elseif ( IPAR(3).eq.5 ) then
+         PTU=.16D0+.007D0*dlog10(sqs/20.D0)**2
+         PTS=.28D0+.007D0*dlog10(sqs/20.D0)**2
+         PTQQ= .3D0+.03D0*dlog10(sqs/20.D0)**2
+         PTPOM = .23D0+.03D0*dlog10(sqs/20.D0)**2
+      elseif ( IPAR(3).eq.6 ) then
+         PTU=.16D0+.007D0*dlog10(sqs/20.D0)**2
+         PTS=.28D0+.007D0*dlog10(sqs/20.D0)**2
+         PTQQ= .3D0+.03D0*dlog10(sqs/20.D0)**2
+         PTPOM = .23D0+.03D0*dlog10(sqs/20.D0)**2
+      elseif ( IPAR(3).eq.7 ) then
+         PTU= PAR(46) + .007D0*dlog10(sqs/20.D0)**2
+         PTS= PAR(47) + .007D0*dlog10(sqs/20.D0)**2
+         PTQQ= PAR(48) + .03D0*dlog10(sqs/20.D0)**2
+         PTPOM = PAR(49) + .03D0*dlog10(sqs/20.D0)**2
+      elseif ( IPAR(3).eq.8 ) then
+         ASQS = MAX(log10(SQS/PAR(109)),0.D0)
+         PTU= PAR(46) + PAR(68)*ASQS**2
+         PTS= PAR(47) + PAR(70)*ASQS**2
+         PTQQ= PAR(48) + PAR(69)*ASQS**2
+         PTPOM = PAR(49) + PAR(51)*ASQS**2
+         PTSEA = PAR(67) + PAR(52)*ASQS**2
+      endif
+      PPT02 (1) = PTU
+      PPT02 (2) = PTU
+      PPT02 (3) = PTS
+c     valence pt
+      PPT02 (10) = PTPOM
+      DO J=11,33
+         PPT02(J) = PTQQ
+      ENDDO
+c     soft minijet pt
+      PPT02 (20) = PTSEA
+c     sea quark pt
+      PPT02 (30) = PAR(132)
+c     charm pt
+      ASQS = MAX(log10(SQS/30.D0),0.D0)
+      IF(IPAR(16).eq.8)THEN
+         PTCHM= PAR(147) + PAR(149)*ASQS
+         PTCHB= PAR(148) + PAR(149)*ASQS         
+      ELSE
+c     rc4a charm pt
+         PTCHM=0.308D0 + .165D0*ASQS
+         PTCHB=0.5D0 + .165D0*ASQS         
+      ENDIF
+      PPT02(4) = PTCHM
+      PPT02(14) = PTCHB
+      PPT02(24) = PTCHB
+      DO J=34,44
+         PPT02(J) = PTCHB
+      ENDDO
+     
+      IF(ndebug.gt.2)THEN
+         WRITE(LUN,*)' PTSETUP_4FLV: (sqs,(u,d),s,diq,pom,cm,cb)',sqs
+     +      ,ppt02(1),ppt02(3),ppt02(11), ppt02(10),ppt02(4),ppt02(34)
+      ENDIF
+
+      RETURN
+      END
+C=======================================================================
+
+      INTEGER FUNCTION IMRG2HAD(IFLB1,IFLB2)
+
+C-----------------------------------------------------------------------
+C     -----------------------------------------------------
+C     function that merges two flavors into lightest hadron
+C     -----------------------------------------------------
+      IMPLICIT NONE
+c     flavor merging array
+      INTEGER KFLV
+      COMMON /S_KFLV/ KFLV(4,43)
+      INTEGER IFLB1,IFLB2,IFLA,IFLB,IFL1,IFL2
+      SAVE
+
+      IFLA = IFLB1
+      IFLB = IFLB2
+c     order by flavor, meson: antiquark-quark, baryon: quark-diquark
+      IF(IFLB.lt.IFLA) CALL ISWTCH_LMNTS(ifla,iflb)
+c     if antibaryon switch again..
+      IF(IFLB.lt.0) CALL ISWTCH_LMNTS(ifla,iflb)
+      IFL1 = IABS(IFLA)
+      IFL2 = IABS(IFLB)
+      IMRG2HAD = ISIGN(KFLV(IFL1,IFL2),IFLB)
+      END
+
+C=======================================================================
+
+      SUBROUTINE SAMPLE_SEA_TOT
+     &     (KRMNT,KINT,NSEA,XGAM,XJET,STR_MASS,XSJ,XX)
+
+C-----------------------------------------------------------------------
+C   input parameter: xgam,xjet,str_mass,  Nsea,KINT,krmnt
+c   outpt parameter: xsj,xx
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+c     include COMMON blocks
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      
+c     input/output type definitions
+      DOUBLE PRECISION XGAM,XJET,STR_MASS,XSEA,XX,XSJ
+      DIMENSION XX(2*NW_max+2)
+
+      INTEGER NSEA,KINT,KRMNT
+
+c     local type definitions
+      DOUBLE PRECISION AC,GAMMAX,S_RNDM,XA,XREM,R,Z,Z1,Z2,XMINA
+      INTEGER j,jj,ilast
+      SAVE
+      DATA AC /-0.2761856692D0/ ! log(2) - gamma(Eulero)
+
+      GAMMAX = xgam
+      XMINA = 2.D0*STR_mass/SQS
+      IF(IPAR(73).eq.1.and.KINT.gt.1) GAMMAX = PAR(119)
+      IF(ndebug.gt.3) THEN
+         WRITE(LUN,*)' IMRG2HAD: called with ',
+     &        '(KRMNT,KINT,NSEA,XGAM,XJET,STR_MASS):', 
+     &        KRMNT,KINT,NSEA,XGAM,XJET,STR_MASS
+         
+         WRITE(LUN,*)' IMRG2HAD: XMIN,XMIN*N,XREM:',
+     &        XMINA,NSEA*XMINA,1.D0-XJET
+      ENDIF
+c     sample total fraction for sea partons..
+      Z1 = LOG(DBLE(NSEA))
+ 50   Z2 = LOG(0.5D0*SQS*(1.D0-XJET)/STR_MASS-2.D0)
+      R = S_RNDM(0)
+      Z=(Z1+AC)*(1.D0+R*(((Z2+AC)/(Z1+AC))**NSEA-1.D0))
+     &     **(1.D0/DBLE(NSEA))-AC
+      XSEA = XMINA*EXP(Z)
+      IF(ndebug.gt.3) WRITE(LUN,*) '  total SEA fraction:' , xsea
+      IF ( (1.D0-XSEA)**GAMMAX .LT. S_RNDM(1)) GOTO 50
+c     maximal fraction remaining for valence..
+ 60   XREM = XSEA - DBLE(Nsea)*XMINA
+      IF(ndebug.gt.3) 
+     &     WRITE(LUN,*) '  Xsea,xval,xjet:',
+     &     xsea,1.D0-XSEA-XJET,xjet
+      
+C...  Split the energy of sea partons among the different partons
+      DO j=1,Nsea-1
+         jj = 2+j
+         IF(KRMNT.eq.0) jj = 4+j
+c     fraction for first parton
+         XA = XREM*S_RNDM(J)
+c     for interactions other than first decrease energy fraction
+c     (beam side hadron can participate in multiple binary collisions)
+c     IF(KINT.gt.1.and.j.gt.2*KRMNT) XA=SIGN(ABS(XA)**PAR(116),XA)
+         XX(jj) = XMINA + XA
+c     new remainder
+         XREM = XREM - XA
+         IF(ndebug.gt.3) write(lun,*)'  x1,j,rem,xa',xX(jj),jj,xrem,xa
+      ENDDO
+c     last parton..
+      ilast = 2+Nsea
+      IF(KRMNT.eq.0) ilast = 4+Nsea
+      XX(ILAST) = XMINA + XREM
+
+c     break symmetry between nucleon interactions
+c     first interaction takes most energy
+      IF(KINT.gt.1.and.IPAR(71).eq.1)THEN
+         JJ = 3
+         IF(KRMNT.eq.0) JJ = 5
+         if(ndebug.gt.4) write(lun,*) '  x1+x2,p*xeq:',
+     &        XX(JJ)+XX(JJ+1),PAR(117)*XSEA/KINT
+         IF(XX(JJ)+XX(JJ+1).lt.PAR(117)*XSEA/KINT) GOTO 60
+      ENDIF
+
+      XSJ = XSJ + XSEA
+      IF(ndebug.gt.3)THEN  
+         write(lun,*)'  x1,N,rem',xx(ilast),ilast,xrem
+         write(lun,*) '  xseajet',xsj
+      endif
+
+      END
+C-----------------------------------------------------------------------
+C
+C     dummy subroutines, remove to link PDFLIB
+C
+C=======================================================================
+c
+c     SUBROUTINE PDFSET(PARAM,VALUE)
+c
+c-----------------------------------------------------------------------
+c     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c     IMPLICIT INTEGER(I-N)
+c     DIMENSION PARAM(20),VALUE(20)
+c     CHARACTER*20 PARAM
+c     END
+c
+c=======================================================================
+c
+c     SUBROUTINE STRUCTM(XI,SCALE2,UV,DV,US,DS,SS,CS,BS,TS,GL)
+c
+c-----------------------------------------------------------------------
+c     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c     IMPLICIT INTEGER(I-N)
+c     END
+c
+c=======================================================================
+c
+c     SUBROUTINE STRUCTP(XI,SCALE2,P2,IP2,UV,DV,US,DS,SS,CS,BS,TS,GL)
+c
+c-----------------------------------------------------------------------
+c     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+c     IMPLICIT INTEGER(I-N)
+c     END
+c
+C-----------------------------------------------------------------------
+C
+C=======================================================================
+
+      SUBROUTINE SIB_NDIFF(K_beam, NW, Ecm, Irec, IREJ)
+
+C-----------------------------------------------------------------------
+C     routine that samples and fragments a non-diffractive interaction
+C
+C     3 stages: 0: setup
+C               1: sampling of event structure (number of parton interactions)
+C                  (labeled as 2000)
+C               2: sampling of kinematics
+C                  (labeled as 3000)
+C               3: fragmentation
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+
+c     external types
+      DOUBLE PRECISION ECM
+      INTEGER K_beam, NW, Irec, IREJ
+
+c     COMMONs
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+C     The final particle output is contained in COMMON /S_PLIST/    
+C     NP           : number of final particles
+C     P(1:NP, 1:5) : 4-momenta + masses of the final particles 
+C     LLIST (1:NP) : codes of final particles
+      DOUBLE PRECISION P
+      INTEGER NP,LLIST,NP_max
+      PARAMETER (NP_max=8000)
+      COMMON /S_PLIST/ P(NP_max,5), LLIST(NP_max), NP
+
+      INTEGER NFORIG,NPORIG,NIORIG,IPFLAG,IIFLAG,KINT
+      COMMON /S_PARTO/ NFORIG(NP_max),NPORIG(NP_max),NIORIG(NP_max),
+     &IPFLAG,IIFLAG,KINT
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+      INTEGER NS_max, NH_max
+      PARAMETER (NS_max = 20, NH_max = 80)
+
+      INTEGER IBMRDX,ITGRDX,IHMJDX,ISMJDX,ICSTDX,IINTDX
+      COMMON /S_INDX/ IBMRDX(3),ITGRDX(NW_max,3),
+     &     IHMJDX(NW_max*NH_max),IINTDX(NW_max),
+     &     ISMJDX(NW_max*NS_max),ICSTDX(2*NW_max,3)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     internal type declarations
+      DOUBLE PRECISION X2JET,SQS_0,PZ,E2,PAWT,xnsof,xnjet,xjdif,x1jet,
+     &     Esum,PXsum,PYsum,PZsum
+      DIMENSION X2JET(NW_max)
+      INTEGER LL,LXBAD,NP_0,NPP_0,NPP0_0,J,JJ,I,KBA,L,NPP_1,NPP0_1,
+     &     IREFout,IREF,nj,ns,nv,II,Idm,LPID,NF,NPP,NPP0
+      DIMENSION LL(99)      
+      SAVE
+      DATA LL /5*0,7*2,2*1,12*0,2,6*0,6*1,19*0,2,2,10*0,
+     &     2,2,0,2,2,11*0,1,1,1,9*0,1/
+
+
+C..   setup stage
+      IREJ = 1
+c     default return point is kinematic sampling stage
+      LXBAD = 3
+
+c     remember initial setup
+      NP_0    = NP
+      SQS_0   = SQS
+c     remember position on parton stack
+      CALL GET_NPP(NPP_0,NPP0_0)
+
+c     set interaction properties
+c      IF(Irec.ne.1) CALL INI_EVENT(ECM,K_beam,Idm,Irec)
+
+      IF(ndebug.gt.0)then
+         IF(Irec.eq.0)THEN
+            WRITE(LUN,*) 
+     &           ' SIB_NDIFF: recursive call with (ecm,kb,kt,np,jdif):',
+     &           ecm,k_beam,kt(1),(jdif(j),j=1,NW),NP
+         ELSE
+            WRITE(LUN,*)' SIB_NDIFF: regular call with (ECM,KB,NW,KT,',
+     &           'JDIF,NP):',ecm,k_beam,NW,(kt(ii),ii=1,NW),
+     &           (jdif(j),j=1,NW),NP
+         ENDIF
+      ENDIF
+      
+ 2000 CONTINUE
+
+c     reset parton stack
+      CALL INI_PRTN_STCK(NPP_0,NPP0_0)
+
+C...  sample multiple interaction configuration
+      KBA = IABS(K_beam)
+      L = LL(KBA)
+      DO I=1,NW
+        if(JDIF(I).eq.0) then
+           CALL CUT_PRO(L, SQS, PTmin, NNSOF(I), NNJET(I))
+        else
+          NNSOF(I) = 1
+          NNJET(I) = 0
+        endif
+c     add incoming target particles
+        PZ = PAWT(SQS,AM(KBA),AM(KT(I)))
+        E2 = SQRT(PZ**2+AM2(KT(I)))
+        CALL ADD_PRTN(0.D0,0.D0,-PZ,E2,AM(KT(I)),KT(I),-2,0,IREFout)
+
+c     add interactions
+        xjdif = dble(jdif(I))
+        xnjet = dble(nnjet(I))
+        xnsof = dble(nnsof(I))
+        CALL ADD_PRTN(xnsof,xnjet,xjdif,sqs,0.D0,I,-1,IREFout,IREF)
+c     write parton stack index to interaction index
+        IINTDX(I) = IREF
+      ENDDO
+c     remember state of parton stack
+      CALL GET_NPP(NPP_1,NPP0_1)
+
+C...  kinematic sampling stage
+
+C...  sample x values
+      ITRY(1) = 0
+ 3000 CONTINUE
+      ITRY(1) = ITRY(1)+1
+      IF(ITRY(1).GT.NREJ(1)) THEN 
+c         NCALL = NCALL + 1
+         GOTO 2000
+      ENDIF
+      NP = NP_0
+      CALL INI_PRTN_STCK(NPP_1,NPP0_1)
+
+      CALL SAMPLE_MINIJET(L,NW,NNJET,NNSOF,NJET,NSOF,x1jet,x2jet,lxbad)
+      IF(LXBAD.eq.3)THEN
+c     reject kinematics
+         GOTO 3000
+      ELSEIF(LXBAD.eq.2)THEN
+c     reject kinematics and event structure
+c         NCALL = NCALL + 1
+         GOTO 2000
+      ELSEIF(LXBAD.eq.1)THEN
+c     reject entire event
+         if(Ndebug.gt.0) 
+     &        WRITE(LUN,*)' SIB_NDIFF: minijet rejection (Ncall):',Ncall
+c     restore initial state
+         NP    = NP_0
+         CALL INI_PRTN_STCK(NPP_0,NPP0_0)
+         SQS   = SQS_0
+         S     = SQS*SQS
+         RETURN
+      ENDIF
+
+C...  Prepare 2*NW valence/sea color strings and/or remnant.
+
+c     default return point, jump back to sampling interaction structure
+c      LXBAD = 2
+      CALl SAMPLE_RMNT(K_beam,NW,X1Jet,X2JET,Irec,LXBAD)
+      IF(LXBAD.eq.3)THEN
+c     reject kinematics
+         GOTO 3000
+      ELSEIF(LXBAD.eq.2)THEN         
+c     reject kinematics and event structure
+c         NCALL = NCALL + 1
+         GOTO 2000
+      ELSEIF(LXBAD.eq.1)THEN         
+c     reject entire event
+         if(Ndebug.gt.0) 
+     &   WRITE(LUN,*)' SIB_NDIFF: rmnt rejection (Ncall,NW):',Ncall,NW
+c     restore initial state
+         NP    = NP_0
+         CALL INI_PRTN_STCK(NPP_0,NPP0_0)
+         SQS   = SQS_0
+         S     = SQS*SQS
+         RETURN
+      ENDIF
+
+C     Check parton final state..
+      CALL GET_NPP(NPP,NPP0)
+      CALL PPSUM(1,NPP,Esum,PXsum,PYsum,PZsum,NF)
+      IF(ABS(Esum/(0.5D0*Ecm*DBLE(NW+1))-1.D0).GT.EPS3)THEN
+         WRITE(LUN,*) ' SIB_NDIFF: energy not conserved! : ',Ncall
+         WRITE(LUN,*) '  sqs_inp = ', Ecm, ' sqs_out = ', Esum
+         CALL PRNT_PRTN_STCK
+         WRITE(LUN,*) ' SIB_NDIFF: event rejected! ',
+     &        'partons do not conserve energy'
+         WRITE(LUN,*)' (Ncall,NW,NPP,NJET,NSOF):',Ncall,NW,NPP,NJET,NSOF
+c     CALL SIB_REJECT('SIB_NDIFF       ')
+c     restore initial state
+         NP    = NP_0
+         CALL INI_PRTN_STCK(NPP_0,NPP0_0)
+         SQS   = SQS_0
+         S     = SQS*SQS
+         RETURN
+      ENDIF
+      IF(NDEBUG.gt.0) THEN
+         IF(NDEBUG.gt.1) CALL PRNT_PRTN_STCK
+         WRITE(LUN,*) ' SIB_NDIFF: entering fragmentation stage...'
+      ENDIF
+
+C...  Fragmentation stage
+      nj = 0
+      ns = 0
+      nv = 0
+      II = NPP0_0+1
+      DO WHILE (II.gt.0)
+c     default return point: reject event if fragmentation fails
+         LXBAD = 1         
+c     loop over level0 partons
+         CALL ITR_LVL0_PRTN(II,JJ,LPID)
+c     read interaction
+         CALL RD_INT(jj,Idm,iiflag)
+
+C...  Fragmentation of soft/hard sea color strings
+         IF(LPID.eq.100)THEN
+            nj = nj + 1
+            ipflag = 100
+            KINT = nj
+            CALL FRAG_MINIJET(jj,LXBAD)
+            IF(LXBAD.ne.0) RETURN
+
+         ELSEIF(LPID.eq.10)THEN
+            ns = ns + 1
+            ipflag = 10
+            KINT = ns
+            CALL FRAG_MINIJET(jj,LXBAD)
+            IF(LXBAD.ne.0) RETURN
+
+C...  fragment 'valence' strings
+         ELSEIF(LPID.eq.1)THEN
+            nv = nv + 1
+            KINT = nv
+            ipflag = 1
+            CALL FRAG_VLNCE(jj,LXBAD)
+            IF(LXBAD.ne.0) RETURN
+
+C...  fragment remnants
+         ELSEIF(IABS(LPID).eq.2)THEN
+            CALL EXCTDEC(JJ,LXBAD)
+            IF(LXBAD.ne.0) RETURN
+
+C...  fragment incoherent diffraction
+         ELSEIF(LPID.eq.-10.or.LPID.eq.-20.or.LPID.eq.-30)THEN
+            CALL FRAG_INCHRNT_DIFF(jj,lxbad)
+            IF(LXBAD.ne.0) RETURN
+
+         ENDIF
+      ENDDO
+      IREJ = 0
+      
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_RMNT(Kbeam,NW,X1JET,X2JET,Irec,LBAD)
+
+C-----------------------------------------------------------------------
+C     routine to sample remnants
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+      
+c     external type declarations
+      DOUBLE PRECISION X1JET,X2JET
+      DIMENSION X2JET(NW_max)
+      INTEGER KBEAM,NW,IREC,LBAD
+
+C     COMMONs
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+C     parameters that represent: NW: max. number of wounded nucleons,
+C     NS,NH: max. number of soft and hard interactions
+c      PARAMETER (NW_max = 20)
+C     The COMMON block /S_CHIST/ contains information about the
+C     the structure of the  generated event:
+C     NWD   = number of wounded nucleons
+C     NJET = total number of hard interactions
+C     NSOF = total number of soft interactions
+C     NNSOF (1:NW) = number of soft pomeron cuts in each interaction
+C     NNJET (1:NW) = number of minijets produced in each interaction 
+C     JDIF(1:NW) = diffraction code 
+C                  0 : non-diff,
+C                  1 : beam-diff
+C                  2 : target-diff
+C                  3 : double-diff
+      INTEGER NNSOF,NNJET,JDIF,NWD,NJET,NSOF
+      COMMON /S_CHIST/ NNSOF(NW_max),NNJET(NW_max),
+     &     JDIF(NW_max),NWD,NJET,NSOF
+
+      INTEGER IRMNT,KRB,KRT
+      DOUBLE PRECISION XRMASS,XRMEX
+      COMMON /S_RMNT/ XRMASS(2),XRMEX(2),IRMNT(NW_max),KRB,KRT(NW_max)
+
+      INTEGER ICHP,ISTR,IBAR
+      COMMON /S_CHP/ ICHP(99), ISTR(99), IBAR(99)
+
+      INTEGER IISO,ISPN
+      COMMON /S_SPN/ IISO(99), ISPN(99)
+
+      INTEGER ICHM
+      COMMON /S_CHM/ ICHM(99)
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     internals
+      DOUBLE PRECISION PREM,PREM_NUC,R,R2,S_RNDM,FLVXCHG,ALPH
+      INTEGER ITGRMNT,IBMRMNT,I,j,jj,K,NPPLD,NPP0LD,IBMRMNT_OLD,
+     &     IBAD,IKBAD,KBM
+      DIMENSION ITGRMNT(NW_max)
+      SAVE
+      DATA PREM /0.D0/ , PREM_NUC /0.D0/
+
+      IF(Ndebug.gt.1) 
+     &  WRITE(LUN,*)' SAMPLE_RMNT: called with (Kbeam,NW,X1JET,',
+     &     'X2JET,JDIF,Irec):',Kbeam,NW,X1JET,(X2JET(JJ),JJ=1,NW),
+     &     (JDIF(JJ),JJ=1,NW),Irec
+
+      IF(Irec.eq.0.and.NW.ne.1)then
+         WRITE(LUN,*)' SAMPLE_RMNT: recursive call inconsistent!'
+         CALL SIB_REJECT('SAMPLE_RMNT     ')
+      endif
+
+c     default return point for remnant excitation routine:
+c     beam and target sampling
+      IBAD = 1
+
+c     set trial counter
+      ITRY(2) = 0
+c     remember position on parton stack
+      CALL GET_NPP(NPPLD,NPP0LD)
+
+C...  sample no. of remnants
+c     ibmrmnt: 0,1..NW : number of excitations on beamside
+C     itgrmnt: 0,1 : target side excitation
+
+c     prob. of remnant excitation
+      IF(IPAR(78).ne.0)THEN
+         PREM = PAR(23)
+         PREM_NUC = PAR(23)
+         IF(IPAR(84).eq.2.and.IBAR(IABS(KBeam)).eq.0)
+     &        PREM = PAR(140)
+      ENDIF           
+
+c     define Prem as probablility for remnant survival
+c     switch to sampling of remnant de-excitation
+      IF(IPAR(79).ne.0) PREM = 1.D0-PREM     
+
+c     prob. of remnant excitation target side
+      IF(IPAR(79).ne.0) PREM_NUC = 1.D0-PAR(23)
+      IF(IPAR(63).eq.1) PREM_NUC = PREM_NUC/dble(NW)
+
+c     turn of remnant for Nw>1
+      IF(IPAR(77).eq.1)THEN
+c     only beamside
+         IF(NW.gt.1) PREM = 0
+      ELSEIF(IPAR(77).eq.2)THEN
+c     target and beam-side
+         IF(NW.gt.1) then
+            PREM = 0.D0
+            PREM_NUC = 0.D0
+         endif
+      ELSE
+         CONTINUE
+      ENDIF
+
+C...  remnant mass dis. exponents
+      XRMEX(1) = PAR(98)        ! baryons
+      IF(IPAR(84).gt.0)THEN
+         XRMEX(2) = PAR(141)    ! mesons
+      else
+         XRMEX(2) = PAR(98)     ! mesons same as baryons
+      endif
+      
+      IBMRMNT = 0
+      DO K=1, NW
+c     additionally penalize remnant survival for multiple nucleon interactions
+         IF(IPAR(79).eq.2.and.K.gt.1) PREM=1.D0-PAR(23)*PAR(128)
+c     penalize remnant survival for multiple parton interactions
+         IF(IPAR(80).ne.0) THEN
+c     multiple interaction penalty for remnant survival, individual interaction
+            ALPH = 1.D0+PAR(129)*DBLE(NNSOF(K)+NNJET(K)-1)
+            PREM = 1.D0-(1.D0-PREM)**ALPH
+            PREM_NUC = 1.D0-(1.D0-PREM_NUC)**ALPH
+         ENDIF
+         IF(JDIF(K).eq.0)THEN
+            R = S_RNDM(k)
+            R2 = S_RNDM(0)
+            IF(R.LT.PREM) IBMRMNT = IBMRMNT + 1
+c     no target side excitation if recursive call (irec=0)!
+            IF(R2.LT.PREM_NUC*Irec) THEN
+               ITGRMNT(K) = 1
+            ELSE
+               ITGRMNT(K) = 0
+            ENDIF
+         ELSE
+            ITGRMNT(K) = 0
+         ENDIF
+         IF(Ndebug.gt.1) 
+     &        WRITE(LUN,'(2X,A,1X,I2,1X,F5.3,1X,I2,1X,I2,1X,I2,1X,I2)')
+     &        'SAMPLE_RMNT: (JW,PREM,NS,NH,IBMRMNT,LTGRMNT):',
+     &        K,PREM,NNSOF(k),NNJET(k),IBMRMNT,ITGRMNT(k)
+      ENDDO
+      IF(IPAR(79).ne.0)THEN
+c     Prem was redefined as probablility for remnant destruction
+c     therefore invert configuration..
+         DO K=1, NW
+            IF(JDIF(K).eq.0)THEN
+               ITGRMNT(K)=IABS(ITGRMNT(K)-1)
+            ENDIF
+         ENDDO
+c     multiple de-excitations not possible..
+         IBMRMNT=MIN(IBMRMNT,1)
+         IBMRMNT=IABS(IBMRMNT-1)*Irec
+      ENDIF
+      IF(Ndebug.gt.1) 
+     &     WRITE(LUN,*)
+     &     ' SAMPLE_RMNT: remnant sampling (PREM,NW,LBMRMNT,LTGRMNT): ',
+     &     PREM,NW,IBMRMNT,(ITGRMNT(j),j=1,NW)
+
+      IBMRMNT_OLD = IBMRMNT
+
+C...  Sample flavor and momentum fractions
+ 20   ITRY(2) = ITRY(2) + 1
+c     reset parton stack
+      CALL INI_PRTN_STCK(NPPLD,NPP0LD)
+      IBMRMNT = IBMRMNT_OLD
+
+c     retry without counting
+c 22   CONTINUE
+      IF(ITRY(2).gt.NREJ(2))THEN
+         LBAD = 2
+         IF(ndebug.gt.1)then 
+            WRITE(LUN,*)' SAMPLE_RMNT: number of trials exceeded'
+            WRITE(LUN,*)' resample minijets...(IREJ,NW,NCALL)',
+     &           LBAD, NW, NCALL
+         endif
+c     raise event call counter
+c         NCALL = NCALL + 1
+         RETURN
+      ENDIF
+
+      Kbm = Kbeam
+
+C..   sample central strings and remnant flavor
+      flvXchg = PAR(80)     ! prob. of flv exchange between strgs and rmnt
+c     remnant and sea on beam side
+      CALL SAMPLE_BEAM(Kbm,NW,flvXchg,IBMRMNT,X1JET,IKBAD)
+      IF(IKBAD.eq.1)THEN
+c     resample minijets event
+         LBAD = 3
+         RETURN
+      ELSEIF(IKBAD.eq.2)THEN
+c     too many partons, reject NW, i.e. entire event
+         LBAD = 1
+         RETURN
+      ENDIF
+
+c     remnants and sea on target side
+      CALL SAMPLE_TARGET(NW,flvXchg,ITGRMNT,X2JET,Irec,IKBAD)
+      IF(IKBAD.eq.1)THEN
+c     resample minijets event
+         LBAD = 3
+         RETURN
+      ELSEIF(IKBAD.eq.2)THEN
+c     too many partons, reject NW, i.e. entire event
+         LBAD = 1
+         RETURN
+      ENDIF
+
+C...  sample remnant excitation masses and add to parton stack
+c     beam-side (one remnant, formed by several interactions)
+c     target-side (possibly NW remnants)
+
+      DO I=1,NW
+c     default return point
+         IBAD = 1
+         IF(IPAR(78).EQ.1)THEN
+c$$$            write(lun,*) 
+c$$$     &           ' SIB_RMNT: multiple excitation model',
+c$$$     &           ' not implemented yet!'
+c$$$            stop
+c     model where beam side remnant can receive mass from multiple target nucleons
+            IF(IBMRMNT.gt.0)THEN
+c     beam side remnant excited               
+               if(ITGRMNT(I).eq.0)then
+                  CALL EXCT_RMNT(I,1,IBAD)
+               else
+                  CALL EXCT_RMNT(I,3,IBAD)
+               endif
+               IBMRMNT = IBMRMNT - 1
+            ELSE
+c     beam side remnant not excited
+               if(ITGRMNT(I).ne.0)then
+                  CALL EXCT_RMNT(I,2,IBAD)
+               else
+                  CALL EXCT_RMNT(I,0,IBAD)
+               endif
+            ENDIF
+
+         ELSEIF(IPAR(78).eq.2)then
+            IF(IBMRMNT.gt.0)then
+c     beam side remnant excited, only once!
+               IF(ITGRMNT(I).eq.0)then
+                  CALL EXCT_RMNT(I,1,IBAD)
+               else
+                  CALL EXCT_RMNT(I,3,IBAD)
+               endif
+               IBMRMNT = 0
+            ELSE
+c     beam side remnant not excited
+               IF(ITGRMNT(I).ne.0)then
+                  CALL EXCT_RMNT(I,2,IBAD)
+               else
+                  CALL EXCT_RMNT(I,0,IBAD)
+               endif
+            ENDIF
+         ELSE
+c     no remnant model
+            CALL EXCT_RMNT(I,0,IBAD)
+         ENDIF
+c     catch remant excitation exception, redo sea kinematics..
+         IF(IBAD.eq.1) GOTO 20
+c     catch severe exception, resample minijet kinematics..
+         IF(IBAD.eq.2) THEN
+            LBAD = 3
+            RETURN              ! resample event
+         ENDIF
+      ENDDO
+      LBAD = 0
+      
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_HADCSL(L,ECM,SIGTOT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+C-----------------------------------------------------------------------
+C     low-energy cross section parametrizations (target always proton)
+C
+C     input:   L           beam particle: (1 - proton,
+C                                          2 - pion,
+C                                          3 - kaon)
+C                          target is always proton
+C              ECM         c.m. energy (GeV)
+C
+C     output:  SIGTOT      total cross section (mb)
+C              SIGEL       elastic cross section (mb)
+C              SIGDIF      diffractive cross section (sd-1,sd-2,dd, mb)
+C              SLOPE       forward elastic slope (GeV**-2)
+C              RHO         real/imaginary part of elastic amplitude
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION SIGDIF(3)
+
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      SAVE
+
+C  proton-proton cross section as reference
+      CALL SIB_HADCS1(1,ECM,SIGTOT,SIGEL,SIGINEL,SLOPE,RHO)
+
+C  parametrization for diffraction
+      Xi_min = 1.5D0/(ECM*ECM)
+      Xi_max = PAR(13)
+      SIGeff = SIGEL
+      CALL SIB_HADCS2(ECM,Xi_min,Xi_max,SIGeff,SIGDIF)
+
+      if(L.eq.1) return
+
+C  regge motivated rescaling of diffraction dissociation
+      sigtot_pp = SIGTOT
+      sigel_pp  = SIGEL
+      slope_pp  = SLOPE
+      CALL SIB_HADCS1(L,ECM,SIGTOT,SIGEL,SIGINEL,SLOPE,RHO)
+      SIGDIF(1) = slope_pp/SLOPE*SIGTOT/sigtot_pp*SIGDIF(1)
+      SIGDIF(2) = slope_pp/SLOPE*SIGEL/sigel_pp*SIGDIF(2)
+      SIGDIF(3) = SIGTOT/sigtot_pp*SIGDIF(3)
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_HADCS1(L,ECM,SIGTOT,SIGEL,SIGINEL,SLOPE,RHO)
+
+C-----------------------------------------------------------------------
+C     low-energy cross section parametrizations
+C
+C     input:   L           beam particle: (1 - proton,
+C                                          2 - pion,
+C                                          3 - kaon)
+C                          target is always proton
+C              ECM         c.m. energy (GeV)
+C
+C     output:  SIGTOT      total cross section (mb)
+C              SIGEL       elastic cross section (mb)
+C              SIGDIF      diffractive cross section (sd-1,sd-2,dd, mb)
+C              SLOPE       forward elastic slope (GeV**-2)
+C              RHO         real/imaginary part of elastic amplitude
+C
+C     comments:
+C     - low-energy data interpolation uses PDG fits from 1992
+C     - slopes from ???, new fit to pp data
+C     - high-energy extrapolation by Donnachie-Landshoff like fit made
+C       by PDG 1996
+C     - analytic extension of amplitude to calculate rho
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+      DIMENSION TPDG92(7,2,6),TPDG96(9,6),BURQ83(3,6),XMA(6)
+      SAVE
+
+      DATA TPDG92  /
+     &  3.D0, 2100.D0, 48.D0, 0.D0, 1.D0, 0.522D0, -4.51D0,
+     &  3.D0, 2100.D0, 11.9D0, 26.9D0, -1.21D0, 0.169D0, -1.85D0,
+     &  5.D0, 2100.D0, 38.4D0, 77.6D0, -0.64D0, 0.26D0, -1.2D0,
+     &  5.D0, 2100.D0, 10.2D0, 52.7D0, -1.16D0, 0.125D0, -1.28D0,
+     &  4.D0, 340.D0,  16.4D0, 19.3D0, -0.42D0, 0.19D0, 0.D0,
+     &  4.D0, 340.D0,  0.D0, 11.4D0, -0.4D0, 0.079D0, 0.D0,
+     &  2.5D0, 370.D0, 33.D0, 14.D0, -1.36D0, 0.456D0, -4.03D0,
+     &  2.5D0, 370.D0, 1.76D0, 11.2D0, -0.64D0, 0.043D0, 0.D0,
+     &  2.D0, 310.D0,  18.1D0, 0.D0, 1.D0, 0.26D0, -1.D0,
+     &  2.D0, 310.D0,  5.D0, 8.1D0, -1.8D0, 0.16D0, -1.3D0,
+     &  3.D0, 310.D0,  32.1D0, 0.D0, 1.D0, 0.66D0, -5.6D0,
+     &  3.D0, 310.D0,  7.3D0, 0.D0, 1.D0, 0.29D0, -2.4D0  /
+
+      DATA TPDG96  /
+     &  50.D0, 22.D0,0.079D0,0.25D0,0.D0,
+     &         77.15D0,-21.05D0,0.46D0,0.9D0,
+     &  50.D0, 22.D0,0.079D0,0.25D0,0.D0,
+     &         77.15D0,21.05D0,0.46D0,0.9D0,
+     &  10.D0, 13.70D0,0.079D0,0.25D0,0.D0,
+     &         31.85D0,-4.05D0,0.45D0,0.9D0,
+     &  10.D0, 13.70D0,0.079D0,0.25D0,0.D0,
+     &         31.85D0,4.05D0,0.45D0,0.9D0,
+     &  10.D0, 12.20D0,0.079D0,0.25D0,0.D0,
+     &         17.35D0,-9.05D0,0.50D0,0.9D0,
+     &  10.D0, 12.20D0,0.079D0,0.25D0,0.D0,
+     &         17.35D0,9.05D0,0.50D0,0.9D0  /
+
+      DATA BURQ83 /
+     &  8.557D0,  0.00D0, 0.574D0,
+     &  11.13D0,  7.23D0, 0.30D0,
+     &  9.11D0,  -0.73D0, 0.28D0,
+     &  9.11D0,   0.65D0, 0.28D0,
+     &  8.55D0,  -5.98D0, 0.28D0,
+     &  8.55D0,   1.60D0, 0.28D0  /
+
+c     DATA XMA / 2*0.93956563D0, 2*0.13956995D0, 2*0.493677D0 /
+      DATA GEV2MB /0.389365D0/
+      DATA INIT/0/
+
+      IF(INIT.EQ.0) THEN
+c  use the internal masses 
+        XMA(1) =  AM(13)   ! proton
+        XMA(2) =  AM(14)   ! neutron
+        XMA(3) =  AM(7)    ! pi+
+        XMA(4) =  AM(8)    ! pi-
+        XMA(5) =  AM(9)    ! K+
+        XMA(6) =  AM(10)   ! K-
+        INIT = 1
+      ENDIF
+
+C  find index
+      IF    (L.eq.1) THEN
+        K = 1                            ! p p
+      ELSEIF(L.eq.2) THEN
+        K = 3                            ! pi+ p
+*       K = 4                            ! pi- p
+      ELSEIF(L.eq.3) THEN
+        K = 5                            ! K+ p
+*       K = 6                            ! K- p
+      ELSE
+        GOTO 100
+      ENDIF
+
+C  calculate lab momentum
+      SS = ECM**2
+      E1 = (SS-XMA(1)**2-XMA(K)**2)/(2.D0*XMA(1))
+      PL = dSQRT((E1-XMA(K))*(E1+XMA(K)))
+      PLL = dLOG(PL)
+
+C  check against lower limit
+      IF(ECM.LE.XMA(1)+XMA(K)) GOTO 200
+
+      XP  = TPDG96(2,K)*SS**TPDG96(3,K)
+      YP  = TPDG96(6,K)/SS**TPDG96(8,K)
+      YM  = TPDG96(7,K)/SS**TPDG96(8,K)
+
+      PHR = dTAN(PI/2.D0*(1.D0-TPDG96(8,K)))
+      PHP = dTAN(PI/2.D0*(1.D0+TPDG96(3,K)))
+      RHO = (-YP/PHR + YM*PHR - XP/PHP)/(YP+YM+XP)
+
+      SLOPE = BURQ83(1,K)+BURQ83(2,K)/dSQRT(PL)+BURQ83(3,K)*PLL
+
+C  select energy range and interpolation method
+      IF(PL.LT.TPDG96(1,K)) THEN
+        SIGTOT = TPDG92(3,1,K)+TPDG92(4,1,K)*PL**TPDG92(5,1,K)
+     &          + TPDG92(6,1,K)*PLL**2+TPDG92(7,1,K)*PLL
+        SIGEL  = TPDG92(3,2,K)+TPDG92(4,2,K)*PL**TPDG92(5,2,K)
+     &          + TPDG92(6,2,K)*PLL**2+TPDG92(7,2,K)*PLL
+      ELSE IF(PL.LT.TPDG92(2,1,K)) THEN
+        SIGTO1 = TPDG92(3,1,K)+TPDG92(4,1,K)*PL**TPDG92(5,1,K)
+     &          + TPDG92(6,1,K)*PLL**2+TPDG92(7,1,K)*PLL
+        SIGEL1 = TPDG92(3,2,K)+TPDG92(4,2,K)*PL**TPDG92(5,2,K)
+     &          + TPDG92(6,2,K)*PLL**2+TPDG92(7,2,K)*PLL
+        SIGTO2 = YP+YM+XP
+        SIGEL2 = SIGTO2**2/(16.D0*PI*SLOPE*GEV2MB)*(1.D0+RHO**2)
+        X2 = dLOG(PL/TPDG96(1,K))/dLOG(TPDG92(2,1,K)/TPDG96(1,K))
+        X1 = 1.D0 - X2
+        SIGTOT = SIGTO2*X2 + SIGTO1*X1
+        SIGEL  = SIGEL2*X2 + SIGEL1*X1
+      ELSE
+        SIGTOT = YP+YM+XP
+        SIGEL  = SIGTOT**2/(16.D0*PI*SLOPE*GEV2MB)*(1.D0+RHO**2)
+      ENDIF
+      SIGINEL = SIGTOT-SIGEL
+
+      RETURN
+
+ 100  CONTINUE
+        WRITE(LUN,'(1X,2A,2I7)') ' SIB_HADCS1: ',
+     &    'invalid beam particle: ',L
+        RETURN
+
+ 200  CONTINUE
+        WRITE(LUN,'(1X,2A,1P,E12.4)') ' SIB_HADCS1: ',
+     &    'energy too small (Ecm): ',ECM
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_HADCS2(SQS,Xi_min,Xi_max,SIGeff,SIGDIF)
+
+C-----------------------------------------------------------------------
+C   cross section for diffraction dissociation 
+C
+C   - single diffraction dissociation:
+C     Goulianos' parametrization (Ref: PL B358 (1995) 379)
+C   - double diffration dissociation: simple scaling model using 
+C     single diff. cross section
+C
+C     in addition rescaling for different particles is applied using
+C     internal rescaling tables (not implemented yet)
+C
+C     input:     SQS         c.m. energy (GeV)
+C                Xi_min      min. diff mass (squared) = Xi_min*SQS**2
+C                Xi_max      max. diff mass (squared) = Xi_max*SQS**2
+C                SIGeff      effective cross section for DD scaling
+C
+C     output:    sig_sd1     cross section for diss. of particle 1 (mb)
+C                sig_sd2     cross section for diss. of particle 2 (mb)
+C                sig_dd      cross section for diss. of both particles
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DIMENSION SIGDIF(3)
+      DIMENSION Xpos1(96),Xwgh1(96),Xpos2(96),Xwgh2(96)
+      DOUBLE PRECISION xil,xiu,tl,tu
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+C  model parameters
+      DATA delta    / 0.104D0 /
+      DATA alphap   / 0.25D0 /
+      DATA beta0    / 6.56D0 /
+      DATA gpom0    / 1.21D0 /
+      DATA xm_p     / 0.938D0 /
+      DATA x_rad2   / 0.71D0 /
+
+C  integration precision
+      DATA Ngau1    / 32 /
+      DATA Ngau2    / 32 /
+
+      DATA GEV2MB /0.389365D0/
+
+      SIGDIF(1) = 0.D0
+      SIGDIF(2) = 0.D0
+      SIGDIF(3) = 0.D0
+
+      XIL = dLOG(Xi_min)
+      XIU = dLOG(Xi_max)
+
+      if(XIL.ge.XIU) return
+
+      SS = SQS*SQS
+      xm4_p2 = 4.D0*xm_p**2
+      fac = beta0**2/(16.D0*PI)
+
+      t1 = -5.D0
+      t2 = 0.D0
+      tl = x_rad2/3.D0/(1.D0-t1/x_rad2)**3
+      tu = x_rad2/3.D0/(1.D0-t2/x_rad2)**3
+
+C  flux renormalization and cross section for pp/ppbar case
+
+      Xnorm  = 0.D0
+
+      xil = dlog(1.5D0/SS)
+      xiu = dlog(0.1D0)
+
+      IF(xiu.LE.xil) goto 1000
+
+      CALL SIB_GAUSET(xil,xiu,Ngau1,xpos1,xwgh1)
+      CALL SIB_GAUSET(tl,tu,Ngau2,xpos2,xwgh2)
+
+      do i1=1,Ngau1
+
+        xi = dexp(xpos1(i1))
+        w_xi = Xwgh1(i1)
+
+        do i2=1,Ngau2
+
+          tt = x_rad2-x_rad2*(x_rad2/(3.D0*xpos2(i2)))**(1.D0/3.D0)
+
+          alpha_t =  1.D0+delta+alphap*tt
+          f2_t = ((xm4_p2-2.8D0*tt)/(xm4_p2-tt))**2
+            
+          Xnorm = Xnorm
+     &      + f2_t*xi**(2.D0-2.D0*alpha_t)*Xwgh2(i2)*w_xi
+
+        enddo
+      enddo   
+
+      Xnorm = Xnorm*fac
+
+ 1000 continue
+
+      XIL = dLOG(Xi_min)
+      XIU = dLOG(Xi_max)
+
+      T1 = -5.D0
+      T2 = 0.D0
+
+      TL = x_rad2/3.D0/(1.D0-t1/x_rad2)**3
+      TU = x_rad2/3.D0/(1.D0-t2/x_rad2)**3
+
+C  single diffraction diss. cross section 
+
+      CSdiff = 0.D0
+
+      CALL SIB_GAUSET(XIL,XIU,NGAU1,XPOS1,XWGH1)
+      CALL SIB_GAUSET(TL,TU,NGAU2,XPOS2,XWGH2)
+
+      do i1=1,Ngau1
+
+        xi = dexp(xpos1(i1))
+        w_xi = Xwgh1(i1)*beta0*gpom0*(xi*ss)**delta
+
+        do i2=1,Ngau2
+
+          tt = x_rad2-x_rad2*(x_rad2/(3.D0*xpos2(i2)))**(1.D0/3.D0)
+
+          alpha_t =  1.D0+delta+alphap*tt
+          f2_t = ((xm4_p2-2.8D0*tt)/(xm4_p2-tt))**2
+
+          CSdiff = CSdiff 
+     &      + f2_t*xi**(2.D0-2.D0*alpha_t)*Xwgh2(i2)*w_xi
+
+        enddo
+      enddo
+
+      CSdiff = CSdiff*fac*GEV2MB/MAX(1.D0,Xnorm)
+
+*     write(LUN,'(1x,1p,4e14.3)') 
+*    &  sqrt(SS),Xnorm,2.d0*CSdiff*MAX(1.d0,Xnorm),2.d0*CSdiff
+
+      SIGDIF(1) = CSdiff
+      SIGDIF(2) = CSdiff
+
+C  double diff. dissociation from simple probability consideration
+*     Pdiff = 0.5d0-sqrt(0.25d0-CSdiff/SIGeff)
+      Pdiff = CSdiff/SIGeff
+      SIGDIF(3) = Pdiff*Pdiff*SIGeff
+
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_GAUSET(AX,BX,NX,Z,W)
+
+C-----------------------------------------------------------------------
+C
+C     N-point gauss zeros and weights for the interval (AX,BX) are
+C           stored in  arrays Z and W respectively.
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      COMMON /GQCOM/A(273),X(273),KTAB(96)
+      DIMENSION Z(NX),W(NX)
+      SAVE
+      DATA INIT/0/
+C
+      ALPHA=0.5D0*(BX+AX)
+      BETA=0.5D0*(BX-AX)
+      N=NX
+*
+*  the N=1 case:
+      IF(N.NE.1) GO TO 1
+      Z(1)=ALPHA
+      W(1)=BX-AX
+      RETURN
+*
+*  the Gauss cases:
+    1 IF((N.LE.16).AND.(N.GT.1)) GO TO 2
+      IF(N.EQ.20) GO TO 2
+      IF(N.EQ.24) GO TO 2
+      IF(N.EQ.32) GO TO 2
+      IF(N.EQ.40) GO TO 2
+      IF(N.EQ.48) GO TO 2
+      IF(N.EQ.64) GO TO 2
+      IF(N.EQ.80) GO TO 2
+      IF(N.EQ.96) GO TO 2
+*
+*  the extended Gauss cases:
+      IF((N/96)*96.EQ.N) GO TO 3
+*
+C  jump to center of intervall intrgration:
+      GO TO 100
+*
+C  get Gauss point array
+*
+    2 CALL PO106BD
+C     -print out message
+*     IF(INIT.LE.20)THEN
+*       INIT=init+1
+*       WRITE (6,*) ' initialization of Gauss int. N=',N
+*     ENDIF
+C  extract real points
+      K=KTAB(N)
+      M=N/2
+      DO 21 J=1,M
+C       extract values from big array
+        JTAB=K-1+J
+        WTEMP=BETA*A(JTAB)
+        DELTA=BETA*X(JTAB)
+C       store them backward
+        Z(J)=ALPHA-DELTA
+        W(J)=WTEMP
+C       store them forward
+        JP=N+1-J
+        Z(JP)=ALPHA+DELTA
+        W(JP)=WTEMP
+   21 CONTINUE
+C     store central point (odd N)
+      IF((N-M-M).EQ.0) RETURN
+      Z(M+1)=ALPHA
+      JMID=K+M
+      W(M+1)=BETA*A(JMID)
+      RETURN
+C
+C  get ND96 times chained 96 Gauss point array
+C
+    3 CALL PO106BD
+C  print out message
+      IF(INIT.LE.20)THEN
+        INIT=init+1
+        WRITE (6,*) ' initialization of extended Gauss int. N=',N
+      ENDIF
+C     -extract real points
+      K=KTAB(96)
+      ND96=N/96
+      DO 31 J=1,48
+C       extract values from big array
+        JTAB=K-1+J
+        WTEMP=BETA*A(JTAB)
+        DELTA=BETA*X(JTAB)
+        WTeMP=WTEMP/ND96
+        DeLTA=DELTA/ND96
+        DO 32 JD96=0,ND96-1
+          ZCNTR= (ALPHA-BETA)+ BETA*DBLE(2*JD96+1)/DBLE(ND96)
+C         store them backward
+          Z(J+JD96*96)=ZCNTR-DELTA
+          W(J+JD96*96)=WTEMP
+C         store them forward
+          JP=96+1-J
+          Z(JP+JD96*96)=ZCNTR+DELTA
+          W(JP+JD96*96)=WTEMP
+   32   CONTINUE
+   31 CONTINUE
+      RETURN
+*
+C  the center of intervall cases:
+  100 CONTINUE
+C  print out message
+      IF(INIT.LE.20)THEN
+        INIT=init+1
+        WRITE (6,*) ' init. of center of intervall int. N=',N
+      ENDIF
+C  put in constant weight and equally spaced central points
+      N=IABS(N)
+      DO 111 IN=1,N
+        WIN=(BX-AX)/DBLE(N)
+        Z(IN)=AX  + (DBLE(IN)-.5D0)*WIN
+  111 W(IN)=WIN
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE PO106BD
+
+C-----------------------------------------------------------------------
+C
+C     store big arrays needed for Gauss integral, CERNLIB D106BD
+C     (arrays A,X,ITAB copied on B,Y,LTAB)
+C
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+C
+      COMMON /GQCOM/ B(273),Y(273),LTAB(96)
+      DIMENSION      A(273),X(273),KTAB(96)
+      SAVE
+C
+C-----TABLE OF INITIAL SUBSCRIPTS FOR N=2(1)16(4)96
+      DATA KTAB(2)/1/
+      DATA KTAB(3)/2/
+      DATA KTAB(4)/4/
+      DATA KTAB(5)/6/
+      DATA KTAB(6)/9/
+      DATA KTAB(7)/12/
+      DATA KTAB(8)/16/
+      DATA KTAB(9)/20/
+      DATA KTAB(10)/25/
+      DATA KTAB(11)/30/
+      DATA KTAB(12)/36/
+      DATA KTAB(13)/42/
+      DATA KTAB(14)/49/
+      DATA KTAB(15)/56/
+      DATA KTAB(16)/64/
+      DATA KTAB(20)/72/
+      DATA KTAB(24)/82/
+      DATA KTAB(28)/82/
+      DATA KTAB(32)/94/
+      DATA KTAB(36)/94/
+      DATA KTAB(40)/110/
+      DATA KTAB(44)/110/
+      DATA KTAB(48)/130/
+      DATA KTAB(52)/130/
+      DATA KTAB(56)/130/
+      DATA KTAB(60)/130/
+      DATA KTAB(64)/154/
+      DATA KTAB(68)/154/
+      DATA KTAB(72)/154/
+      DATA KTAB(76)/154/
+      DATA KTAB(80)/186/
+      DATA KTAB(84)/186/
+      DATA KTAB(88)/186/
+      DATA KTAB(92)/186/
+      DATA KTAB(96)/226/
+C
+C-----TABLE OF ABSCISSAE (X) AND WEIGHTS (A) FOR INTERVAL (-1,+1).
+C
+C-----N=2
+      DATA X(1)/0.577350269189626D0  /, A(1)/1.000000000000000D0  /
+C-----N=3
+      DATA X(2)/0.774596669241483D0  /, A(2)/0.555555555555556D0  /
+      DATA X(3)/0.000000000000000D0  /, A(3)/0.888888888888889D0  /
+C-----N=4
+      DATA X(4)/0.861136311594053D0  /, A(4)/0.347854845137454D0  /
+      DATA X(5)/0.339981043584856D0  /, A(5)/0.652145154862546D0  /
+C-----N=5
+      DATA X(6)/0.906179845938664D0  /, A(6)/0.236926885056189D0  /
+      DATA X(7)/0.538469310105683D0  /, A(7)/0.478628670499366D0  /
+      DATA X(8)/0.000000000000000D0  /, A(8)/0.568888888888889D0  /
+C-----N=6
+      DATA X(9)/0.932469514203152D0  /, A(9)/0.171324492379170D0  /
+      DATA X(10)/0.661209386466265D0 /, A(10)/0.360761573048139D0 /
+      DATA X(11)/0.238619186083197D0 /, A(11)/0.467913934572691D0 /
+C-----N=7
+      DATA X(12)/0.949107912342759D0 /, A(12)/0.129484966168870D0 /
+      DATA X(13)/0.741531185599394D0 /, A(13)/0.279705391489277D0 /
+      DATA X(14)/0.405845151377397D0 /, A(14)/0.381830050505119D0 /
+      DATA X(15)/0.000000000000000D0 /, A(15)/0.417959183673469D0 /
+C-----N=8
+      DATA X(16)/0.960289856497536D0 /, A(16)/0.101228536290376D0 /
+      DATA X(17)/0.796666477413627D0 /, A(17)/0.222381034453374D0 /
+      DATA X(18)/0.525532409916329D0 /, A(18)/0.313706645877887D0 /
+      DATA X(19)/0.183434642495650D0 /, A(19)/0.362683783378362D0 /
+C-----N=9
+      DATA X(20)/0.968160239507626D0 /, A(20)/0.081274388361574D0 /
+      DATA X(21)/0.836031107326636D0 /, A(21)/0.180648160694857D0 /
+      DATA X(22)/0.613371432700590D0 /, A(22)/0.260610696402935D0 /
+      DATA X(23)/0.324253423403809D0 /, A(23)/0.312347077040003D0 /
+      DATA X(24)/0.000000000000000D0 /, A(24)/0.330239355001260D0 /
+C-----N=10
+      DATA X(25)/0.973906528517172D0 /, A(25)/0.066671344308688D0 /
+      DATA X(26)/0.865063366688985D0 /, A(26)/0.149451349150581D0 /
+      DATA X(27)/0.679409568299024D0 /, A(27)/0.219086362515982D0 /
+      DATA X(28)/0.433395394129247D0 /, A(28)/0.269266719309996D0 /
+      DATA X(29)/0.148874338981631D0 /, A(29)/0.295524224714753D0 /
+C-----N=11
+      DATA X(30)/0.978228658146057D0 /, A(30)/0.055668567116174D0 /
+      DATA X(31)/0.887062599768095D0 /, A(31)/0.125580369464905D0 /
+      DATA X(32)/0.730152005574049D0 /, A(32)/0.186290210927734D0 /
+      DATA X(33)/0.519096129206812D0 /, A(33)/0.233193764591990D0 /
+      DATA X(34)/0.269543155952345D0 /, A(34)/0.262804544510247D0 /
+      DATA X(35)/0.000000000000000D0 /, A(35)/0.272925086777901D0 /
+C-----N=12
+      DATA X(36)/0.981560634246719D0 /, A(36)/0.047175336386512D0 /
+      DATA X(37)/0.904117256370475D0 /, A(37)/0.106939325995318D0 /
+      DATA X(38)/0.769902674194305D0 /, A(38)/0.160078328543346D0 /
+      DATA X(39)/0.587317954286617D0 /, A(39)/0.203167426723066D0 /
+      DATA X(40)/0.367831498998180D0 /, A(40)/0.233492536538355D0 /
+      DATA X(41)/0.125233408511469D0 /, A(41)/0.249147045813403D0 /
+C-----N=13
+      DATA X(42)/0.984183054718588D0 /, A(42)/0.040484004765316D0 /
+      DATA X(43)/0.917598399222978D0 /, A(43)/0.092121499837728D0 /
+      DATA X(44)/0.801578090733310D0 /, A(44)/0.138873510219787D0 /
+      DATA X(45)/0.642349339440340D0 /, A(45)/0.178145980761946D0 /
+      DATA X(46)/0.448492751036447D0 /, A(46)/0.207816047536889D0 /
+      DATA X(47)/0.230458315955135D0 /, A(47)/0.226283180262897D0 /
+      DATA X(48)/0.000000000000000D0 /, A(48)/0.232551553230874D0 /
+C-----N=14
+      DATA X(49)/0.986283808696812D0 /, A(49)/0.035119460331752D0 /
+      DATA X(50)/0.928434883663574D0 /, A(50)/0.080158087159760D0 /
+      DATA X(51)/0.827201315069765D0 /, A(51)/0.121518570687903D0 /
+      DATA X(52)/0.687292904811685D0 /, A(52)/0.157203167158194D0 /
+      DATA X(53)/0.515248636358154D0 /, A(53)/0.185538397477938D0 /
+      DATA X(54)/0.319112368927890D0 /, A(54)/0.205198463721296D0 /
+      DATA X(55)/0.108054948707344D0 /, A(55)/0.215263853463158D0 /
+C-----N=15
+      DATA X(56)/0.987992518020485D0 /, A(56)/0.030753241996117D0 /
+      DATA X(57)/0.937273392400706D0 /, A(57)/0.070366047488108D0 /
+      DATA X(58)/0.848206583410427D0 /, A(58)/0.107159220467172D0 /
+      DATA X(59)/0.724417731360170D0 /, A(59)/0.139570677926154D0 /
+      DATA X(60)/0.570972172608539D0 /, A(60)/0.166269205816994D0 /
+      DATA X(61)/0.394151347077563D0 /, A(61)/0.186161000015562D0 /
+      DATA X(62)/0.201194093997435D0 /, A(62)/0.198431485327111D0 /
+      DATA X(63)/0.000000000000000D0 /, A(63)/0.202578241925561D0 /
+C-----N=16
+      DATA X(64)/0.989400934991650D0 /, A(64)/0.027152459411754D0 /
+      DATA X(65)/0.944575023073233D0 /, A(65)/0.062253523938648D0 /
+      DATA X(66)/0.865631202387832D0 /, A(66)/0.095158511682493D0 /
+      DATA X(67)/0.755404408355003D0 /, A(67)/0.124628971255534D0 /
+      DATA X(68)/0.617876244402644D0 /, A(68)/0.149595988816577D0 /
+      DATA X(69)/0.458016777657227D0 /, A(69)/0.169156519395003D0 /
+      DATA X(70)/0.281603550779259D0 /, A(70)/0.182603415044924D0 /
+      DATA X(71)/0.095012509837637D0 /, A(71)/0.189450610455069D0 /
+C-----N=20
+      DATA X(72)/0.993128599185094D0 /, A(72)/0.017614007139152D0 /
+      DATA X(73)/0.963971927277913D0 /, A(73)/0.040601429800386D0 /
+      DATA X(74)/0.912234428251325D0 /, A(74)/0.062672048334109D0 /
+      DATA X(75)/0.839116971822218D0 /, A(75)/0.083276741576704D0 /
+      DATA X(76)/0.746331906460150D0 /, A(76)/0.101930119817240D0 /
+      DATA X(77)/0.636053680726515D0 /, A(77)/0.118194531961518D0 /
+      DATA X(78)/0.510867001950827D0 /, A(78)/0.131688638449176D0 /
+      DATA X(79)/0.373706088715419D0 /, A(79)/0.142096109318382D0 /
+      DATA X(80)/0.227785851141645D0 /, A(80)/0.149172986472603D0 /
+      DATA X(81)/0.076526521133497D0 /, A(81)/0.152753387130725D0 /
+C-----N=24
+      DATA X(82)/0.995187219997021D0 /, A(82)/0.012341229799987D0 /
+      DATA X(83)/0.974728555971309D0 /, A(83)/0.028531388628933D0 /
+      DATA X(84)/0.938274552002732D0 /, A(84)/0.044277438817419D0 /
+      DATA X(85)/0.886415527004401D0 /, A(85)/0.059298584915436D0 /
+      DATA X(86)/0.820001985973902D0 /, A(86)/0.073346481411080D0 /
+      DATA X(87)/0.740124191578554D0 /, A(87)/0.086190161531953D0 /
+      DATA X(88)/0.648093651936975D0 /, A(88)/0.097618652104113D0 /
+      DATA X(89)/0.545421471388839D0 /, A(89)/0.107444270115965D0 /
+      DATA X(90)/0.433793507626045D0 /, A(90)/0.115505668053725D0 /
+      DATA X(91)/0.315042679696163D0 /, A(91)/0.121670472927803D0 /
+      DATA X(92)/0.191118867473616D0 /, A(92)/0.125837456346828D0 /
+      DATA X(93)/0.064056892862605D0 /, A(93)/0.127938195346752D0 /
+C-----N=32
+      DATA X(94)/0.997263861849481D0 /, A(94)/0.007018610009470D0 /
+      DATA X(95)/0.985611511545268D0 /, A(95)/0.016274394730905D0 /
+      DATA X(96)/0.964762255587506D0 /, A(96)/0.025392065309262D0 /
+      DATA X(97)/0.934906075937739D0 /, A(97)/0.034273862913021D0 /
+      DATA X(98)/0.896321155766052D0 /, A(98)/0.042835898022226D0 /
+      DATA X(99)/0.849367613732569D0 /, A(99)/0.050998059262376D0 /
+      DATA X(100)/0.794483795967942D0/, A(100)/0.058684093478535D0/
+      DATA X(101)/0.732182118740289D0/, A(101)/0.065822222776361D0/
+      DATA X(102)/0.663044266930215D0/, A(102)/0.072345794108848D0/
+      DATA X(103)/0.587715757240762D0/, A(103)/0.078193895787070D0/
+      DATA X(104)/0.506899908932229D0/, A(104)/0.083311924226946D0/
+      DATA X(105)/0.421351276130635D0/, A(105)/0.087652093004403D0/
+      DATA X(106)/0.331868602282127D0/, A(106)/0.091173878695763D0/
+      DATA X(107)/0.239287362252137D0/, A(107)/0.093844399080804D0/
+      DATA X(108)/0.144471961582796D0/, A(108)/0.095638720079274D0/
+      DATA X(109)/0.048307665687738D0/, A(109)/0.096540088514727D0/
+C-----N=40
+      DATA X(110)/0.998237709710559D0/, A(110)/0.004521277098533D0/
+      DATA X(111)/0.990726238699457D0/, A(111)/0.010498284531152D0/
+      DATA X(112)/0.977259949983774D0/, A(112)/0.016421058381907D0/
+      DATA X(113)/0.957916819213791D0/, A(113)/0.022245849194166D0/
+      DATA X(114)/0.932812808278676D0/, A(114)/0.027937006980023D0/
+      DATA X(115)/0.902098806968874D0/, A(115)/0.033460195282547D0/
+      DATA X(116)/0.865959503212259D0/, A(116)/0.038782167974472D0/
+      DATA X(117)/0.824612230833311D0/, A(117)/0.043870908185673D0/
+      DATA X(118)/0.778305651426519D0/, A(118)/0.048695807635072D0/
+      DATA X(119)/0.727318255189927D0/, A(119)/0.053227846983936D0/
+      DATA X(120)/0.671956684614179D0/, A(120)/0.057439769099391D0/
+      DATA X(121)/0.612553889667980D0/, A(121)/0.061306242492928D0/
+      DATA X(122)/0.549467125095128D0/, A(122)/0.064804013456601D0/
+      DATA X(123)/0.483075801686178D0/, A(123)/0.067912045815233D0/
+      DATA X(124)/0.413779204371605D0/, A(124)/0.070611647391286D0/
+      DATA X(125)/0.341994090825758D0/, A(125)/0.072886582395804D0/
+      DATA X(126)/0.268152185007253D0/, A(126)/0.074723169057968D0/
+      DATA X(127)/0.192697580701371D0/, A(127)/0.076110361900626D0/
+      DATA X(128)/0.116084070675255D0/, A(128)/0.077039818164247D0/
+      DATA X(129)/0.038772417506050D0/, A(129)/0.077505947978424D0/
+C-----N=48
+      DATA X(130)/0.998771007252426D0/, A(130)/0.003153346052305D0/
+      DATA X(131)/0.993530172266350D0/, A(131)/0.007327553901276D0/
+      DATA X(132)/0.984124583722826D0/, A(132)/0.011477234579234D0/
+      DATA X(133)/0.970591592546247D0/, A(133)/0.015579315722943D0/
+      DATA X(134)/0.952987703160430D0/, A(134)/0.019616160457355D0/
+      DATA X(135)/0.931386690706554D0/, A(135)/0.023570760839324D0/
+      DATA X(136)/0.905879136715569D0/, A(136)/0.027426509708356D0/
+      DATA X(137)/0.876572020274247D0/, A(137)/0.031167227832798D0/
+      DATA X(138)/0.843588261624393D0/, A(138)/0.034777222564770D0/
+      DATA X(139)/0.807066204029442D0/, A(139)/0.038241351065830D0/
+      DATA X(140)/0.767159032515740D0/, A(140)/0.041545082943464D0/
+      DATA X(141)/0.724034130923814D0/, A(141)/0.044674560856694D0/
+      DATA X(142)/0.677872379632663D0/, A(142)/0.047616658492490D0/
+      DATA X(143)/0.628867396776513D0/, A(143)/0.050359035553854D0/
+      DATA X(144)/0.577224726083972D0/, A(144)/0.052890189485193D0/
+      DATA X(145)/0.523160974722233D0/, A(145)/0.055199503699984D0/
+      DATA X(146)/0.466902904750958D0/, A(146)/0.057277292100403D0/
+      DATA X(147)/0.408686481990716D0/, A(147)/0.059114839698395D0/
+      DATA X(148)/0.348755886292160D0/, A(148)/0.060704439165893D0/
+      DATA X(149)/0.287362487355455D0/, A(149)/0.062039423159892D0/
+      DATA X(150)/0.224763790394689D0/, A(150)/0.063114192286254D0/
+      DATA X(151)/0.161222356068891D0/, A(151)/0.063924238584648D0/
+      DATA X(152)/0.097004699209462D0/, A(152)/0.064466164435950D0/
+      DATA X(153)/0.032380170962869D0/, A(153)/0.064737696812683D0/
+C-----N=64
+      DATA X(154)/0.999305041735772D0/, A(154)/0.001783280721696D0/
+      DATA X(155)/0.996340116771955D0/, A(155)/0.004147033260562D0/
+      DATA X(156)/0.991013371476744D0/, A(156)/0.006504457968978D0/
+      DATA X(157)/0.983336253884625D0/, A(157)/0.008846759826363D0/
+      DATA X(158)/0.973326827789910D0/, A(158)/0.011168139460131D0/
+      DATA X(159)/0.961008799652053D0/, A(159)/0.013463047896718D0/
+      DATA X(160)/0.946411374858402D0/, A(160)/0.015726030476024D0/
+      DATA X(161)/0.929569172131939D0/, A(161)/0.017951715775697D0/
+      DATA X(162)/0.910522137078502D0/, A(162)/0.020134823153530D0/
+      DATA X(163)/0.889315445995114D0/, A(163)/0.022270173808383D0/
+      DATA X(164)/0.865999398154092D0/, A(164)/0.024352702568710D0/
+      DATA X(165)/0.840629296252580D0/, A(165)/0.026377469715054D0/
+      DATA X(166)/0.813265315122797D0/, A(166)/0.028339672614259D0/
+      DATA X(167)/0.783972358943341D0/, A(167)/0.030234657072402D0/
+      DATA X(168)/0.752819907260531D0/, A(168)/0.032057928354851D0/
+      DATA X(169)/0.719881850171610D0/, A(169)/0.033805161837141D0/
+      DATA X(170)/0.685236313054233D0/, A(170)/0.035472213256882D0/
+      DATA X(171)/0.648965471254657D0/, A(171)/0.037055128540240D0/
+      DATA X(172)/0.611155355172393D0/, A(172)/0.038550153178615D0/
+      DATA X(173)/0.571895646202634D0/, A(173)/0.039953741132720D0/
+      DATA X(174)/0.531279464019894D0/, A(174)/0.041262563242623D0/
+      DATA X(175)/0.489403145707052D0/, A(175)/0.042473515123653D0/
+      DATA X(176)/0.446366017253464D0/, A(176)/0.043583724529323D0/
+      DATA X(177)/0.402270157963991D0/, A(177)/0.044590558163756D0/
+      DATA X(178)/0.357220158337668D0/, A(178)/0.045491627927418D0/
+      DATA X(179)/0.311322871990210D0/, A(179)/0.046284796581314D0/
+      DATA X(180)/0.264687162208767D0/, A(180)/0.046968182816210D0/
+      DATA X(181)/0.217423643740007D0/, A(181)/0.047540165714830D0/
+      DATA X(182)/0.169644420423992D0/, A(182)/0.047999388596458D0/
+      DATA X(183)/0.121462819296120D0/, A(183)/0.048344762234802D0/
+      DATA X(184)/0.072993121787799D0/, A(184)/0.048575467441503D0/
+      DATA X(185)/0.024350292663424D0/, A(185)/0.048690957009139D0/
+C-----N=80
+      DATA X(186)/0.999553822651630D0/, A(186)/0.001144950003186D0/
+      DATA X(187)/0.997649864398237D0/, A(187)/0.002663533589512D0/
+      DATA X(188)/0.994227540965688D0/, A(188)/0.004180313124694D0/
+      DATA X(189)/0.989291302499755D0/, A(189)/0.005690922451403D0/
+      DATA X(190)/0.982848572738629D0/, A(190)/0.007192904768117D0/
+      DATA X(191)/0.974909140585727D0/, A(191)/0.008683945269260D0/
+      DATA X(192)/0.965485089043799D0/, A(192)/0.010161766041103D0/
+      DATA X(193)/0.954590766343634D0/, A(193)/0.011624114120797D0/
+      DATA X(194)/0.942242761309872D0/, A(194)/0.013068761592401D0/
+      DATA X(195)/0.928459877172445D0/, A(195)/0.014493508040509D0/
+      DATA X(196)/0.913263102571757D0/, A(196)/0.015896183583725D0/
+      DATA X(197)/0.896675579438770D0/, A(197)/0.017274652056269D0/
+      DATA X(198)/0.878722567678213D0/, A(198)/0.018626814208299D0/
+      DATA X(199)/0.859431406663111D0/, A(199)/0.019950610878141D0/
+      DATA X(200)/0.838831473580255D0/, A(200)/0.021244026115782D0/
+      DATA X(201)/0.816954138681463D0/, A(201)/0.022505090246332D0/
+      DATA X(202)/0.793832717504605D0/, A(202)/0.023731882865930D0/
+      DATA X(203)/0.769502420135041D0/, A(203)/0.024922535764115D0/
+      DATA X(204)/0.744000297583597D0/, A(204)/0.026075235767565D0/
+      DATA X(205)/0.717365185362099D0/, A(205)/0.027188227500486D0/
+      DATA X(206)/0.689637644342027D0/, A(206)/0.028259816057276D0/
+      DATA X(207)/0.660859898986119D0/, A(207)/0.029288369583267D0/
+      DATA X(208)/0.631075773046871D0/, A(208)/0.030272321759557D0/
+      DATA X(209)/0.600330622829751D0/, A(209)/0.031210174188114D0/
+      DATA X(210)/0.568671268122709D0/, A(210)/0.032100498673487D0/
+      DATA X(211)/0.536145920897131D0/, A(211)/0.032941939397645D0/
+      DATA X(212)/0.502804111888784D0/, A(212)/0.033733214984611D0/
+      DATA X(213)/0.468696615170544D0/, A(213)/0.034473120451753D0/
+      DATA X(214)/0.433875370831756D0/, A(214)/0.035160529044747D0/
+      DATA X(215)/0.398393405881969D0/, A(215)/0.035794393953416D0/
+      DATA X(216)/0.362304753499487D0/, A(216)/0.036373749905835D0/
+      DATA X(217)/0.325664370747701D0/, A(217)/0.036897714638276D0/
+      DATA X(218)/0.288528054884511D0/, A(218)/0.037365490238730D0/
+      DATA X(219)/0.250952358392272D0/, A(219)/0.037776364362001D0/
+      DATA X(220)/0.212994502857666D0/, A(220)/0.038129711314477D0/
+      DATA X(221)/0.174712291832646D0/, A(221)/0.038424993006959D0/
+      DATA X(222)/0.136164022809143D0/, A(222)/0.038661759774076D0/
+      DATA X(223)/0.097408398441584D0/, A(223)/0.038839651059051D0/
+      DATA X(224)/0.058504437152420D0/, A(224)/0.038958395962769D0/
+      DATA X(225)/0.019511383256793D0/, A(225)/0.039017813656306D0/
+C-----N=96
+      DATA X(226)/0.999689503883230D0/, A(226)/0.000796792065552D0/
+      DATA X(227)/0.998364375863181D0/, A(227)/0.001853960788946D0/
+      DATA X(228)/0.995981842987209D0/, A(228)/0.002910731817934D0/
+      DATA X(229)/0.992543900323762D0/, A(229)/0.003964554338444D0/
+      DATA X(230)/0.988054126329623D0/, A(230)/0.005014202742927D0/
+      DATA X(231)/0.982517263563014D0/, A(231)/0.006058545504235D0/
+      DATA X(232)/0.975939174585136D0/, A(232)/0.007096470791153D0/
+      DATA X(233)/0.968326828463264D0/, A(233)/0.008126876925698D0/
+      DATA X(234)/0.959688291448742D0/, A(234)/0.009148671230783D0/
+      DATA X(235)/0.950032717784437D0/, A(235)/0.010160770535008D0/
+      DATA X(236)/0.939370339752755D0/, A(236)/0.011162102099838D0/
+      DATA X(237)/0.927712456722308D0/, A(237)/0.012151604671088D0/
+      DATA X(238)/0.915071423120898D0/, A(238)/0.013128229566961D0/
+      DATA X(239)/0.901460635315852D0/, A(239)/0.014090941772314D0/
+      DATA X(240)/0.886894517402420D0/, A(240)/0.015038721026994D0/
+      DATA X(241)/0.871388505909296D0/, A(241)/0.015970562902562D0/
+      DATA X(242)/0.854959033434601D0/, A(242)/0.016885479864245D0/
+      DATA X(243)/0.837623511228187D0/, A(243)/0.017782502316045D0/
+      DATA X(244)/0.819400310737931D0/, A(244)/0.018660679627411D0/
+      DATA X(245)/0.800308744139140D0/, A(245)/0.019519081140145D0/
+      DATA X(246)/0.780369043867433D0/, A(246)/0.020356797154333D0/
+      DATA X(247)/0.759602341176647D0/, A(247)/0.021172939892191D0/
+      DATA X(248)/0.738030643744400D0/, A(248)/0.021966644438744D0/
+      DATA X(249)/0.715676812348967D0/, A(249)/0.022737069658329D0/
+      DATA X(250)/0.692564536642171D0/, A(250)/0.023483399085926D0/
+      DATA X(251)/0.668718310043916D0/, A(251)/0.024204841792364D0/
+      DATA X(252)/0.644163403784967D0/, A(252)/0.024900633222483D0/
+      DATA X(253)/0.618925840125468D0/, A(253)/0.025570036005349D0/
+      DATA X(254)/0.593032364777572D0/, A(254)/0.026212340735672D0/
+      DATA X(255)/0.566510418561397D0/, A(255)/0.026826866725591D0/
+      DATA X(256)/0.539388108324357D0/, A(256)/0.027412962726029D0/
+      DATA X(257)/0.511694177154667D0/, A(257)/0.027970007616848D0/
+      DATA X(258)/0.483457973920596D0/, A(258)/0.028497411065085D0/
+      DATA X(259)/0.454709422167743D0/, A(259)/0.028994614150555D0/
+      DATA X(260)/0.425478988407300D0/, A(260)/0.029461089958167D0/
+      DATA X(261)/0.395797649828908D0/, A(261)/0.029896344136328D0/
+      DATA X(262)/0.365696861472313D0/, A(262)/0.030299915420827D0/
+      DATA X(263)/0.335208522892625D0/, A(263)/0.030671376123669D0/
+      DATA X(264)/0.304364944354496D0/, A(264)/0.031010332586313D0/
+      DATA X(265)/0.273198812591049D0/, A(265)/0.031316425596861D0/
+      DATA X(266)/0.241743156163840D0/, A(266)/0.031589330770727D0/
+      DATA X(267)/0.210031310460567D0/, A(267)/0.031828758894411D0/
+      DATA X(268)/0.178096882367618D0/, A(268)/0.032034456231992D0/
+      DATA X(269)/0.145973714654896D0/, A(269)/0.032206204794030D0/
+      DATA X(270)/0.113695850110665D0/, A(270)/0.032343822568575D0/
+      DATA X(271)/0.081297495464425D0/, A(271)/0.032447163714064D0/
+      DATA X(272)/0.048812985136049D0/, A(272)/0.032516118713868D0/
+      DATA X(273)/0.016276744849602D0/, A(273)/0.032550614492363D0/
+      DATA IBD/0/
+
+      IF(IBD.NE.0) RETURN
+      IBD=1
+      DO 10 I=1,273
+        B(I) = A(I)
+10      Y(I) = X(I)
+      DO 20 I=1,96
+20      LTAB(I) = KTAB(I)
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SIB_ALTRA(GA,BGX,BGY,BGZ,PCX,PCY,PCZ,EC,P,PX,PY,PZ,E)
+
+C-----------------------------------------------------------------------
+C
+C    arbitrary Lorentz transformation
+C
+C     Input: GA : gamma factor
+C            BG? : components of gamma * beta
+C            PC?,EC : components of initial 4 vector
+C
+C     Output: P?,E : components of 4vector in final frame
+C             P : 3-norm in final frame, a.k.a momentum
+C
+C     PHO_ALTRA taken from PHOJET /FR'14
+C*********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      DOUBLE PRECISION P,E
+      SAVE
+
+c     consistency check: (gamma*beta)**2 = gamma**2 - 1
+      BETGAM2 = BGX**2+BGY**2+BGZ**2
+      xtst = 1.D0-BETGAM2/GA**2 - 1.D0/GA**2
+      IF(abs(xtst).gt.1.D-5) THEN
+         WRITE(LUN,*) ' SIB_ALTRA: transf. inconsistent!'
+         WRITE(LUN,*) ' SIB_ALTRA: input (GA,GABE):',GA,BGX,BGY,BGZ
+      ENDIF
+      IF(GA.LT.1.D0) THEN
+         WRITE(LUN,*) ' SIB_ALTRA: you are joking right? GAMMA=',GA
+         CALL SIB_REJECT('SIB_ALTRA       ')
+      ENDIF
+      EP=PCX*BGX+PCY*BGY+PCZ*BGZ
+      PE=EP/(GA+1.D0)+EC
+      PX=PCX+BGX*PE
+      PY=PCY+BGY*PE
+      PZ=PCZ+BGZ*PE
+      P=DSQRT(PX*PX+PY*PY+PZ*PZ)
+      E=GA*EC+EP
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_TRANS(XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
+
+C-----------------------------------------------------------------------
+C
+C  rotation of coordinate frame (1) de rotation around y axis
+C                               (2) fe rotation around z axis
+C  (inverse rotation to SIB_TRANI)
+C
+C     Input: ?0 : vector components in initial frame
+C            C? : cosine of rotation angle
+C            S? : sine of rotation angle
+C            DE : angle of rotation around y axis 
+C                 (polar angle in spherical coord.)
+C            FE : angle of rotation around z axis 
+C                 (azimuthal angle in spherical coord.)
+C
+C     Output: X,Y,Z: components of vector in rotated frame
+C
+C     PHO_TRANS taken from PHOJET \FR'14
+C**********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+ 
+      X= CDE*CFE*XO-SFE*YO+SDE*CFE*ZO
+      Y= CDE*SFE*XO+CFE*YO+SDE*SFE*ZO
+      Z=-SDE    *XO       +CDE    *ZO
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_TRANI(XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
+
+C-----------------------------------------------------------------------
+C
+C  rotation of coordinate frame (1) -fe rotation around z axis
+C                               (2) -de rotation around y axis
+C  (inverse rotation to SIB_TRANS)
+C
+C     Input: ?0 : vector components in initial frame
+C            C? : cosine of rotation angle
+C            S? : sine of rotation angle
+C            DE : angle of rotation around y axis 
+C                 (polar angle in spherical coord.)
+C            FE : angle of rotation around z axis 
+C                 (azimuthal angle in spherical coord.)
+C
+C     Output: X,Y,Z: components of vector in rotated frame
+C
+C     PHO_TRANS taken from PHOJET \FR'14
+C**********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      X= CDE*CFE*XO+CDE*SFE*YO-SDE*ZO
+      Y=-SFE    *XO+CFE*    YO
+      Z= SDE*CFE*XO+SDE*SFE*YO+CDE*ZO
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIROBO( NBEG, NEND, THE, PHI, DBEX, DBEY, DBEZ)
+
+C-----------------------------------------------------------------------
+C   THIS IS A SLIGHTLY ALTERED VERSION OF "LUROBO" [JETSET63.PYTHIA]   *
+C SET TO WORK IN THE SIBYL ENVIROMENT. THE TRANSFORMATION IS PERFORMED *
+C ON PARTICLES NUMBER FROM NBEG TO NEND. COMMON BLOCKS CHANGED.        *
+C                                      TSS,   Oct '87                  *
+C  modification  use directly BETA in double precision in input (PL)   *
+C **********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /S_PLIST/ P(8000,5), LLIST(8000), NP
+      DIMENSION ROT(3,3),PV(3),DP(4)
+      SAVE
+
+      IF(THE**2+PHI**2 .LE. 1.D-20) GO TO 131
+C...ROTATE (TYPICALLY FROM Z AXIS TO DIRECTION THETA,PHI)
+       ROT(1,1)=dCOS(THE)*dCOS(PHI)
+       ROT(1,2)=-dSIN(PHI)
+       ROT(1,3)=dSIN(THE)*dCOS(PHI)
+       ROT(2,1)=dCOS(THE)*dSIN(PHI)
+       ROT(2,2)=dCOS(PHI)
+       ROT(2,3)=dSIN(THE)*dSIN(PHI)
+       ROT(3,1)=-dSIN(THE)
+       ROT(3,2)=0.D0
+       ROT(3,3)=dCOS(THE)
+       DO 120 I=NBEG,NEND
+       DO 100 J=1,3
+ 100   PV(J)=P(I,J)
+       DO 110 J=1,3
+ 110   P(I,J)=ROT(J,1)*PV(1)+ROT(J,2)*PV(2)+ROT(J,3)*PV(3)
+ 120   CONTINUE
+ 131    IF(DBEX**2+DBEY**2+DBEZ**2 .LE. 1.D-20) GO TO 151
+C...LORENTZ BOOST (TYPICALLY FROM REST TO MOMENTUM/ENERGY=BETA)
+       DGA=1.D0/DSQRT(1D0-DBEX**2-DBEY**2-DBEZ**2)
+       DO 140 I=NBEG, NEND
+       DO 130 J=1,4
+ 130   DP(J)=P(I,J)
+       DBEP=DBEX*DP(1)+DBEY*DP(2)+DBEZ*DP(3)
+       DGABEP=DGA*(DGA*DBEP/(1.D0+DGA)+DP(4))
+       P(I,1)=DP(1)+DGABEP*DBEX
+       P(I,2)=DP(2)+DGABEP*DBEY
+       P(I,3)=DP(3)+DGABEP*DBEZ
+       P(I,4)=DGA*(DP(4)+DBEP)
+ 140   CONTINUE
+ 151   RETURN
+      END
+
+
+C=======================================================================
+
+      SUBROUTINE ISWTCH_LMNTS(ia,ib)
+
+C-----------------------------------------------------------------------
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      itmp = ia
+      ia = ib
+      ib = itmp
+      end
+C=======================================================================
+
+      SUBROUTINE SWTCH_LMNTS(a,b)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      tmp = a
+      a = b
+      b = tmp
+      end
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION PAWT(A,B,C)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+      SAVE
+
+C...  c.m.s. Momentum in two particle decays
+      PAWT = SQRT((A**2-(B+C)**2+EPS10)*(A**2-(B-C)**2))/(2.D0*A)
+      END
+
+C=======================================================================
+
+      SUBROUTINE HSPLI (KF,KP1,KP2)
+
+C-----------------------------------------------------------------------
+C...This subroutine splits one hadron of code KF
+C.  into 2 partons of code KP1 and KP2
+C.  KP1 refers to a color triplet [q or (qq)bar]         
+C.  KP2 to a a color anti-triplet [qbar or (qq)]         
+C.  allowed inputs:
+C.  KF = 6:14 pi0,pi+-,k+-,k0L,k0s, p,n
+C.     = -13,-14  pbar,nbar
+C.     = 34:39 Sig+, Sig0, Sig-, Xi0, Xi-, Lam0 
+C.     = 49: Omega-
+C.   \FR'16
+C------------------------------------------------
+      IMPLICIT NONE
+
+c     external types
+      INTEGER KF,KP1,KP2
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+
+c     internal types
+      INTEGER KPP
+      DOUBLE PRECISION R,XBUG,S_RNDM
+      SAVE
+
+      IF(IABS(KF).eq.6.or.IABS(KF).eq.27)THEN     ! pi0, rho0
+         R = S_RNDM(0)              
+         XBUG = 0.D0
+         IF(IPAR(19).eq.1) XBUG = 0.5D0
+         IF (R.LE.XBUG)  THEN
+            KP1 = 1                  
+            KP2 = -1
+         ELSE
+            KP1 = 2
+            KP2 = -2
+         ENDIF
+
+      ELSEIF(IABS(KF).eq.7)THEN ! pi+
+         KP1 = 1                  
+         KP2 = -2
+
+      ELSEIF(IABS(KF).eq.8)THEN ! pi-
+         KP1 = 2                  
+         KP2 = -1
+
+      ELSEIF(IABS(KF).eq.9)THEN                 ! K+
+         KP1 = 1                  
+         KP2 = -3
+      ELSEIF(IABS(KF).eq.10)THEN                ! K-
+         KP1 = 3                  
+         KP2 = -1
+      ELSEIF(IABS(KF).eq.11.or.IABS(KF).eq.12)THEN             ! K0S/K0L
+         KP1 = 2
+         KP2 = -3
+         IF (S_RNDM(1).GT. 0.5D0)  THEN
+            KP1 = 3
+            KP2 = -2
+         ENDIF
+      ELSEIF(IABS(KF).eq.21)THEN                ! K0
+         KP1 = 2
+         KP2 = -3
+      ELSEIF(IABS(KF).eq.22)THEN                ! K0bar
+         KP1 = 3
+         KP2 = -2
+      ELSEIF(IABS(KF).eq.33)THEN                 ! phi
+         KP1 = 3
+         KP2 = -3
+      ELSEIF(IABS(KF).eq.13.or.IABS(KF).eq.41)THEN             ! p/pbar,delta+
+         R = PAR(53)*S_RNDM(KF)
+         IF (R .LT.3.D0)       THEN
+            KP1 = 1
+            KP2 = 12
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 1
+            KP2 = 21
+         ELSE
+            KP1 = 2
+            KP2 = 11
+         ENDIF
+      ELSEIF(IABS(KF).eq.14.or.IABS(KF).eq.42)THEN             ! n/nbar,delta0
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 2
+            KP2 = 12
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 2
+            KP2 = 21
+         ELSE
+            KP1 = 1
+            KP2 = 22
+         ENDIF
+      ELSEIF(IABS(KF).eq.40)THEN                ! delta++
+         KP1 = 1
+         KP2 = 11
+      ELSEIF(IABS(KF).eq.43)THEN                ! delta-
+         KP1 = 2
+         KP2 = 22
+      ELSEIF(IABS(KF).eq.34)THEN                !Sigma+
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 3
+            KP2 = 11
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 1
+            KP2 = 31
+         ELSE
+            KP1 = 1
+            KP2 = 13
+         ENDIF
+      ELSEIF(IABS(KF).eq.35.or.IABS(KF).eq.39)THEN             !Sigma0/Lambda0     
+c     all configurations equally likely --> Knuth shuffle
+c     setup quarks: u,d,s
+         CALL SHFFL_QRKS(1,2,3,KP1,KP2)
+         
+      ELSEIF(IABS(KF).eq.36)THEN                !Sigma-
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 3
+            KP2 = 22
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 2
+            KP2 = 32
+         ELSE
+            KP1 = 2
+            KP2 = 23
+         ENDIF
+      ELSEIF(IABS(KF).eq.37)THEN                !Xi0
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 1
+            KP2 = 33
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 3
+            KP2 = 13
+         ELSE
+            KP1 = 1
+            KP2 = 33
+         ENDIF
+      ELSEIF(IABS(KF).eq.38)THEN                !Xi-
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 2
+            KP2 = 33
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 3
+            KP2 = 23
+         ELSE
+            KP1 = 2
+            KP2 = 33
+         ENDIF
+      ELSEIF(IABS(KF).eq.49)THEN                 ! Omega-
+         KP1 = 3
+         KP2 = 33
+
+      ELSEIF(IABS(KF).eq.59)THEN                 ! D+
+         KP1 = 4
+         KP2 = -2
+
+      ELSEIF(IABS(KF).eq.60)THEN                 ! D-
+         KP1 = 2
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.71)THEN                 ! D0
+         KP1 = 4
+         KP2 = -1
+
+      ELSEIF(IABS(KF).eq.72)THEN                 ! D0bar
+         KP1 = 1
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.73)THEN                 ! eta_c
+         KP1 = 4
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.74)THEN                 ! Ds+
+         KP1 = 4
+         KP2 = -3
+
+      ELSEIF(IABS(KF).eq.75)THEN                 ! Ds-
+         KP1 = 3
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.76)THEN                 ! Ds*+
+         KP1 = 4
+         KP2 = -3
+
+      ELSEIF(IABS(KF).eq.77)THEN                 ! Ds*-
+         KP1 = 3
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.78)THEN                 ! D*+
+         KP1 = 4
+         KP2 = -2
+
+      ELSEIF(IABS(KF).eq.79)THEN                 ! D*-
+         KP1 = 2
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.80)THEN                 ! D*0
+         KP1 = 4
+         KP2 = -1
+
+      ELSEIF(IABS(KF).eq.81)THEN                 ! D*0bar
+         KP1 = 1
+         KP2 = -4
+
+      ELSEIF(IABS(KF).eq.83)THEN                 ! J/psi
+         KP1 = 4
+         KP2 = -4
+         
+      ELSEIF(IABS(KF).eq.84)THEN                  ! Sigma_c++
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 4
+            KP2 = 11
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 1
+            KP2 = 41
+         ELSE
+            KP1 = 1
+            KP2 = 14
+         ENDIF
+
+      ELSEIF(IABS(KF).eq.85.or.IABS(KF).eq.89)THEN               ! Sigma_c+ / Lambda_c+
+c     setup quarks: u,d,c
+         CALL SHFFL_QRKS(1,2,4,KP1,KP2)
+
+      ELSEIF(IABS(KF).eq.86)THEN                  ! Sigma_c0
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 4
+            KP2 = 22
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 2
+            KP2 = 42
+         ELSE
+            KP1 = 2
+            KP2 = 24
+         ENDIF
+
+      ELSEIF(IABS(KF).eq.87)THEN               ! Xi_c+
+c     setup quarks: u,s,c
+         CALL SHFFL_QRKS(1,3,4,KP1,KP2)
+
+      ELSEIF(IABS(KF).eq.88)THEN                  ! Xi_c0
+         CALL SHFFL_QRKS(2,3,4,KP1,KP2)
+
+      ELSEIF(IABS(KF).eq.99)THEN                  ! Omega_c0
+         R = 6.D0*S_RNDM(0)                  
+         IF (R .LT.3.D0)       THEN
+            KP1 = 4
+            KP2 = 33
+         ELSEIF (R .LT. 4.D0)  THEN
+            KP1 = 3
+            KP2 = 43
+         ELSE
+            KP1 = 3
+            KP2 = 34
+         ENDIF         
+
+      ELSE
+C...  Test for good input
+         WRITE(LUN,*)
+     &        ' HSPLI : Routine entered with illegal particle code ',KF
+         CALL SIB_REJECT('HSPLI           ')
+      ENDIF
+
+C     if anti-baryon, invert valences
+      IF (KF .LT. 0) THEN
+         KPP = KP1
+         KP1 = -KP2
+         KP2 = -KPP
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================      
+
+      SUBROUTINE SHFFL_QRKS(IQF1,IQF2,IQF3,KF1,KF2)
+
+C-----------------------------------------------------------------------
+c     routine to shuffle 3 quark flavors
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      INTEGER IQF1,IQF2,IQF3,KF1,KF2
+      INTEGER KPL,JJ,II,IFL
+      DOUBLE PRECISION S_RNDM
+      DIMENSION KPL(3)
+c     quark flavors to shuffle
+      KPL(1) = IQF1
+      KPL(2) = IQF2
+      KPL(3) = IQF3
+c     Knuth shuffle..
+      DO II=3,2,-1
+         JJ=1+INT(II*S_RNDM(II))
+         IFL=KPL(jj)
+         KPL(jj)=KPL(ii)
+         KPL(ii)=IFL
+      ENDDO
+      KF1=KPL(1)
+      KF2=KPL(2)*10+KPL(3)     
+      END
+            
+C.=========================================================================
+C.  Library of programs for the generation of nucleus-nucleus interactions
+C.  and the study of nucleus-induced cosmic ray showers
+C.
+C.  September 2001  changes in FPNI, and SIGMA_INI,
+C.                  new SIGMA_PP, SIGMA_PPI, SIGMA_KP  (R. Engel)
+C.
+C.  may  1996       small bug  corrected by Dieter Heck in NUC_CONF 
+C.
+C.  march 1996      small modification to the superposition code
+C.
+C.  February 1996   change to FPNI to give an interaction length
+C.                   also  at very low energy  
+C.
+C.  Version 1.01  september 1995 
+C.       (small corrections P.L.)
+C.       the random number generator is called as S_RNDM(0)
+C.  ------------------------------------------------------
+C.  Version 1.00  April 1992
+C.
+C.  Authors:
+C.
+C.     J. Engel
+C.     T.K Gaisser
+C.     P.Lipari
+C.     T. Stanev
+C. 
+C.  This set of routines  when used in  the simulation of cosmic ray
+C.  showers have only three  "contact points" with the "external world"
+C.
+C.    (i) SUBROUTINE NUC_NUC_INI
+C.        (no  calling arguments)         
+C.         to be called once during general initialization
+C.    (ii) SUBROUTINE HEAVY (IA, E0)
+C.         where IA (integer) is the mass number of the projectile
+C.         nucleus  and E0 (TeV) is the energy per nucleon
+C.         The output (positions of first interaction for the IA
+C.         nucleons of the projectile) is  contained in  the common block:
+C.           COMMON /C1STNC/ XX0(60),XX(60),YY(60),AX(60),AY(60)
+C.         In detail:
+C.             XX0(j)   (g cm-2) =  position of interaction
+C.             XX(j) (mm)    x-distance from shower axis
+C.             YY(j) (mm)    y-distance from shower axis
+C.             AX(j) (radiants)  Theta_x with respect to original direction
+C.             AY(j) (radiants)  Theta_y with respect to original direction
+C.      
+C.    (iii)  FUNCTION FPNI (E,L)
+C.           Interaction length in air.
+C.           E (TeV) is the energy of the particle, L is the particle
+C.           code (NOTE: "Sibyll" codes are used : L =1-18) 
+C.           WANRNING : The nucleus-nucleus cross section
+C.           tabulated in the program are "matched" to the p-Air
+C.           cross section calculated  with this FUNCTION, in other words 
+C.           they are both calculated with the same input pp cross section
+C==========================================================================
+
+      SUBROUTINE NUC_NUC_INI
+
+C-----------------------------------------------------------------------
+C...Initialization for the generation of nucleus-nucleus interactions
+C.  INPUT : E0 (TeV) Energy per nucleon of the beam nucleus
+C........................................................................
+      SAVE
+
+      CALL NUC_GEOM_INI                       ! nucleus profiles
+      CALL SIGMA_INI                          ! initialize pp cross sections
+
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE FRAGM1 (IA,NW, NF, IAF)
+
+C-----------------------------------------------------------------------
+C...Nuclear Fragmentation 
+C.  total dissolution of nucleus
+C.......................................................................
+      SAVE
+
+      DIMENSION IAF(60)
+      NF = IA-NW
+      DO J=1,NF
+         IAF(J) = 1
+      ENDDO
+      RETURN
+      END
+C->
+C=======================================================================
+
+      SUBROUTINE FRAGM2 (IA,NW, NF, IAF)
+
+C-----------------------------------------------------------------------
+C...Nuclear Fragmentation 
+C.  Spectator in one single fragment 
+C.......................................................................
+      SAVE
+
+      DIMENSION IAF(60)
+      IF (IA-NW .GT. 0)  THEN
+         NF = 1
+         IAF(1) = IA-NW
+      ELSE
+         NF = 0
+      ENDIF
+      RETURN
+      END
+
+C-----------------------------------------------------------------------
+C...Code of fragmentation  of spectator nucleons
+C.  based on Jon Engel  abrasion-ablation algorithms
+C=======================================================================
+
+      BLOCK DATA FRAG_DATA
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+C...Data for the fragmentation of  nucleus  projectiles
+      COMMON /FRAGMOD/A(10,10,20),AE(10,10,20),ERES(10,10),NFLAGG(10,10)
+      SAVE
+      DATA (NFLAGG(I, 1),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  0,  0,  0 /
+      DATA (NFLAGG(I, 2),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  0,  0,  0 /
+      DATA (NFLAGG(I, 3),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  0,  0,  0 /
+      DATA (NFLAGG(I, 4),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  0,  0,  0 /
+      DATA (NFLAGG(I, 5),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  0,  0,  0 /
+      DATA (NFLAGG(I, 6),I=1,10)  / 
+     +    0,  0,  0,  0,  0,  0,  0,  1,  1,  1 /
+      DATA (NFLAGG(I, 7),I=1,10)  / 
+     +    1,  1,  1,  1,  1,  1,  1,  1,  1,  1 /
+      DATA (NFLAGG(I, 8),I=1,10)  / 
+     +    1,  1,  1,  1,  1,  1,  1,  1,  1,  1 /
+      DATA (NFLAGG(I, 9),I=1,10)  / 
+     +    1,  1,  1,  1,  1,  1,  1,  1,  1,  1 /
+      DATA (NFLAGG(I,10),I=1,10)  / 
+     +    1,  1,  1,  1,  1,  1,  1,  1,  1,  1 /
+      DATA (A(I, 1, 1),I=1,10)  / 
+     +  .438D-01,.172D0  ,.283D0  ,.511D0  ,.715D0  ,.920D0  ,1.19D0  ,
+     +  1.37D0  ,1.65D0  ,2.14D0   /
+      DATA (A(I, 1, 2),I=1,10)  / 
+     +  .147D-01,.249D-01,.439D-01,.592D-01,.776D-01,.886D-01,.108D0  ,
+     +  .117D0  ,.126D0  ,.128D0   /
+      DATA (A(I, 1, 3),I=1,10)  / 
+     +  .216D-02,.627D-02,.834D-02,.108D-01,.144D-01,.152D-01,.196D-01,
+     +  .200D-01,.210D-01,.224D-01 /
+      DATA (A(I, 1, 4),I=1,10)  / 
+     +  .593D-01,.653D-01,.116D0  ,.145D0  ,.184D0  ,.204D0  ,.234D0  ,
+     +  .257D0  ,.271D0  ,.248D0   /
+      DATA (A(I, 1, 5),I=1,10)  / 
+     +  .000D+00,.918D-02,.362D-02,.805D-02,.436D-02,.728D-02,.466D-02,
+     +  .707D-02,.932D-02,.130D-01 /
+      DATA (A(I, 1, 6),I=1,10)  / 
+     +  .000D+00,.180D-02,.247D-02,.208D-02,.224D-02,.214D-02,.226D-02,
+     +  .233D-02,.230D-02,.194D-02 /
+      DATA (A(I, 1, 7),I=1,10)  / 
+     +  .000D+00,.106D-02,.703D-03,.687D-03,.739D-03,.674D-03,.819D-03,
+     +  .768D-03,.756D-03,.720D-03 /
+      DATA (A(I, 1, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.188D-02,.130D-02,.138D-02,.117D-02,.124D-02,
+     +  .119D-02,.111D-02,.829D-03 /
+      DATA (A(I, 1, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.302D-03,.258D-03,.249D-03,.208D-03,.248D-03,
+     +  .222D-03,.210D-03,.187D-03 /
+      DATA (A(I, 1,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.235D-03,.222D-03,.172D-03,.181D-03,
+     +  .166D-03,.152D-03,.124D-03 /
+      DATA (A(I, 1,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.238D-03,.179D-03,.145D-03,.156D-03,
+     +  .138D-03,.129D-03,.111D-03 /
+      DATA (A(I, 1,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.368D-03,.400D-03,.255D-03,.262D-03,
+     +  .221D-03,.182D-03,.112D-03 /
+      DATA (A(I, 1,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.753D-04,.712D-04,.527D-04,
+     +  .537D-04,.538D-04,.487D-04 /
+      DATA (A(I, 1,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.103D-03,.589D-04,.578D-04,
+     +  .468D-04,.385D-04,.269D-04 /
+      DATA (A(I, 1,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.444D-04,.372D-04,
+     +  .318D-04,.284D-04,.218D-04 /
+      DATA (A(I, 1,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.487D-04,.473D-04,
+     +  .338D-04,.243D-04,.122D-04 /
+      DATA (A(I, 1,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.121D-04,.117D-04,
+     +  .932D-05,.792D-05,.583D-05 /
+      DATA (A(I, 1,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.147D-04,
+     +  .101D-04,.756D-05,.496D-05 /
+      DATA (A(I, 1,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.755D-05,
+     +  .612D-05,.505D-05,.341D-05 /
+      DATA (A(I, 1,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .630D-05,.444D-05,.282D-05 /
+      DATA (A(I, 2, 1),I=1,10)  / 
+     +  .269D0  ,.510D0  ,.738D0  ,1.12D0  ,1.46D0  ,1.83D0  ,2.22D0  ,
+     +  2.57D0  ,3.00D0  ,3.67D0   /
+      DATA (A(I, 2, 2),I=1,10)  / 
+     +  .121D0  ,.133D0  ,.190D0  ,.234D0  ,.293D0  ,.332D0  ,.395D0  ,
+     +  .431D0  ,.468D0  ,.502D0   /
+      DATA (A(I, 2, 3),I=1,10)  / 
+     +  .227D-01,.374D-01,.474D-01,.578D-01,.722D-01,.794D-01,.960D-01,
+     +  .102D0  ,.110D0  ,.120D0   /
+      DATA (A(I, 2, 4),I=1,10)  / 
+     +  .287D0  ,.196D0  ,.270D0  ,.314D0  ,.373D0  ,.408D0  ,.462D0  ,
+     +  .498D0  ,.529D0  ,.523D0   /
+      DATA (A(I, 2, 5),I=1,10)  / 
+     +  .000D+00,.433D-01,.218D-01,.384D-01,.263D-01,.385D-01,.298D-01,
+     +  .405D-01,.504D-01,.671D-01 /
+      DATA (A(I, 2, 6),I=1,10)  / 
+     +  .000D+00,.151D-01,.177D-01,.159D-01,.173D-01,.173D-01,.187D-01,
+     +  .196D-01,.201D-01,.191D-01 /
+      DATA (A(I, 2, 7),I=1,10)  / 
+     +  .000D+00,.457D-02,.607D-02,.610D-02,.677D-02,.670D-02,.784D-02,
+     +  .787D-02,.806D-02,.803D-02 /
+      DATA (A(I, 2, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.702D-02,.536D-02,.558D-02,.510D-02,.554D-02,
+     +  .546D-02,.538D-02,.489D-02 /
+      DATA (A(I, 2, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.190D-02,.199D-02,.205D-02,.191D-02,.221D-02,
+     +  .214D-02,.213D-02,.204D-02 /
+      DATA (A(I, 2,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.226D-02,.219D-02,.195D-02,.208D-02,
+     +  .204D-02,.203D-02,.194D-02 /
+      DATA (A(I, 2,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.213D-02,.195D-02,.175D-02,.191D-02,
+     +  .183D-02,.179D-02,.166D-02 /
+      DATA (A(I, 2,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.588D-03,.186D-02,.137D-02,.141D-02,
+     +  .128D-02,.117D-02,.947D-03 /
+      DATA (A(I, 2,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.554D-03,.562D-03,.454D-03,
+     +  .485D-03,.505D-03,.509D-03 /
+      DATA (A(I, 2,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.490D-03,.533D-03,.531D-03,
+     +  .476D-03,.437D-03,.369D-03 /
+      DATA (A(I, 2,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.427D-03,.382D-03,
+     +  .358D-03,.340D-03,.294D-03 /
+      DATA (A(I, 2,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.239D-03,.298D-03,
+     +  .238D-03,.196D-03,.134D-03 /
+      DATA (A(I, 2,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.299D-04,.893D-04,
+     +  .796D-04,.744D-04,.683D-04 /
+      DATA (A(I, 2,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.127D-03,
+     +  .107D-03,.916D-04,.720D-04 /
+      DATA (A(I, 2,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.397D-04,
+     +  .630D-04,.565D-04,.461D-04 /
+      DATA (A(I, 2,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .511D-04,.459D-04,.402D-04 /
+      DATA (A(I, 3, 1),I=1,10)  / 
+     +  .708D0  ,1.02D0  ,1.41D0  ,1.91D0  ,2.42D0  ,3.00D0  ,3.53D0  ,
+     +  4.09D0  ,4.71D0  ,5.57D0   /
+      DATA (A(I, 3, 2),I=1,10)  / 
+     +  .397D0  ,.410D0  ,.539D0  ,.648D0  ,.795D0  ,.910D0  ,1.06D0  ,
+     +  1.17D0  ,1.29D0  ,1.42D0   /
+      DATA (A(I, 3, 3),I=1,10)  / 
+     +  .845D-01,.122D0  ,.157D0  ,.190D0  ,.232D0  ,.262D0  ,.307D0  ,
+     +  .335D0  ,.366D0  ,.402D0   /
+      DATA (A(I, 3, 4),I=1,10)  / 
+     +  .210D0  ,.379D0  ,.450D0  ,.490D0  ,.574D0  ,.636D0  ,.709D0  ,
+     +  .769D0  ,.820D0  ,.849D0   /
+      DATA (A(I, 3, 5),I=1,10)  / 
+     +  .000D+00,.102D0  ,.675D-01,.104D0  ,.858D-01,.115D0  ,.102D0  ,
+     +  .129D0  ,.154D0  ,.194D0   /
+      DATA (A(I, 3, 6),I=1,10)  / 
+     +  .000D+00,.392D-01,.615D-01,.593D-01,.649D-01,.674D-01,.735D-01,
+     +  .779D-01,.817D-01,.828D-01 /
+      DATA (A(I, 3, 7),I=1,10)  / 
+     +  .000D+00,.539D-02,.222D-01,.238D-01,.269D-01,.280D-01,.320D-01,
+     +  .334D-01,.350D-01,.361D-01 /
+      DATA (A(I, 3, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.838D-02,.130D-01,.133D-01,.131D-01,.141D-01,
+     +  .144D-01,.149D-01,.152D-01 /
+      DATA (A(I, 3, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.228D-02,.647D-02,.688D-02,.687D-02,.772D-02,
+     +  .786D-02,.811D-02,.824D-02 /
+      DATA (A(I, 3,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.664D-02,.828D-02,.802D-02,.845D-02,
+     +  .869D-02,.902D-02,.930D-02 /
+      DATA (A(I, 3,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.338D-02,.735D-02,.710D-02,.767D-02,
+     +  .767D-02,.776D-02,.756D-02 /
+      DATA (A(I, 3,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.280D-03,.262D-02,.349D-02,.342D-02,
+     +  .322D-02,.312D-02,.291D-02 /
+      DATA (A(I, 3,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.618D-03,.161D-02,.138D-02,
+     +  .148D-02,.155D-02,.166D-02 /
+      DATA (A(I, 3,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.313D-03,.128D-02,.161D-02,
+     +  .150D-02,.144D-02,.134D-02 /
+      DATA (A(I, 3,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.645D-03,.118D-02,
+     +  .115D-02,.111D-02,.103D-02 /
+      DATA (A(I, 3,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.117D-03,.497D-03,
+     +  .581D-03,.501D-03,.401D-03 /
+      DATA (A(I, 3,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.115D-04,.997D-04,
+     +  .202D-03,.203D-03,.206D-03 /
+      DATA (A(I, 3,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.877D-04,
+     +  .242D-03,.263D-03,.226D-03 /
+      DATA (A(I, 3,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.158D-04,
+     +  .881D-04,.152D-03,.136D-03 /
+      DATA (A(I, 3,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .358D-04,.997D-04,.117D-03 /
+      DATA (A(I, 4, 1),I=1,10)  / 
+     +  .945D0  ,1.29D0  ,1.40D0  ,1.98D0  ,2.73D0  ,3.17D0  ,3.77D0  ,
+     +  4.29D0  ,4.78D0  ,5.54D0   /
+      DATA (A(I, 4, 2),I=1,10)  / 
+     +  .581D0  ,.599D0  ,.645D0  ,.839D0  ,1.10D0  ,1.25D0  ,1.47D0  ,
+     +  1.64D0  ,1.78D0  ,1.99D0   /
+      DATA (A(I, 4, 3),I=1,10)  / 
+     +  .127D0  ,.182D0  ,.202D0  ,.264D0  ,.344D0  ,.387D0  ,.455D0  ,
+     +  .504D0  ,.549D0  ,.611D0   /
+      DATA (A(I, 4, 4),I=1,10)  / 
+     +  .183D0  ,.464D0  ,.351D0  ,.444D0  ,.642D0  ,.659D0  ,.772D0  ,
+     +  .830D0  ,.882D0  ,.930D0   /
+      DATA (A(I, 4, 5),I=1,10)  / 
+     +  .000D+00,.122D0  ,.803D-01,.136D0  ,.134D0  ,.173D0  ,.164D0  ,
+     +  .203D0  ,.239D0  ,.300D0   /
+      DATA (A(I, 4, 6),I=1,10)  / 
+     +  .000D+00,.393D-01,.766D-01,.872D-01,.108D0  ,.111D0  ,.123D0  ,
+     +  .132D0  ,.139D0  ,.145D0   /
+      DATA (A(I, 4, 7),I=1,10)  / 
+     +  .000D+00,.416D-02,.289D-01,.360D-01,.454D-01,.477D-01,.549D-01,
+     +  .583D-01,.618D-01,.654D-01 /
+      DATA (A(I, 4, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.761D-02,.157D-01,.214D-01,.205D-01,.233D-01,
+     +  .241D-01,.255D-01,.271D-01 /
+      DATA (A(I, 4, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.238D-02,.803D-02,.123D-01,.123D-01,.140D-01,
+     +  .145D-01,.153D-01,.160D-01 /
+      DATA (A(I, 4,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.695D-02,.150D-01,.154D-01,.166D-01,
+     +  .172D-01,.181D-01,.192D-01 /
+      DATA (A(I, 4,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.355D-02,.104D-01,.143D-01,.156D-01,
+     +  .158D-01,.164D-01,.165D-01 /
+      DATA (A(I, 4,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.112D-03,.276D-02,.568D-02,.736D-02,
+     +  .684D-02,.691D-02,.661D-02 /
+      DATA (A(I, 4,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.740D-03,.222D-02,.339D-02,
+     +  .352D-02,.382D-02,.409D-02 /
+      DATA (A(I, 4,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.369D-03,.160D-02,.322D-02,
+     +  .375D-02,.375D-02,.355D-02 /
+      DATA (A(I, 4,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.750D-03,.190D-02,
+     +  .298D-02,.319D-02,.299D-02 /
+      DATA (A(I, 4,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.260D-03,.673D-03,
+     +  .117D-02,.156D-02,.126D-02 /
+      DATA (A(I, 4,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.283D-05,.131D-03,
+     +  .363D-03,.618D-03,.690D-03 /
+      DATA (A(I, 4,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.205D-03,
+     +  .378D-03,.709D-03,.844D-03 /
+      DATA (A(I, 4,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.654D-05,
+     +  .150D-03,.341D-03,.527D-03 /
+      DATA (A(I, 4,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .957D-04,.197D-03,.406D-03 /
+      DATA (A(I, 5, 1),I=1,10)  / 
+     +  1.16D0  ,1.70D0  ,2.19D0  ,2.79D0  ,3.33D0  ,3.90D0  ,4.49D0  ,
+     +  5.07D0  ,5.66D0  ,6.38D0   /
+      DATA (A(I, 5, 2),I=1,10)  / 
+     +  .779D0  ,.899D0  ,1.09D0  ,1.28D0  ,1.51D0  ,1.71D0  ,1.96D0  ,
+     +  2.18D0  ,2.39D0  ,2.62D0   /
+      DATA (A(I, 5, 3),I=1,10)  / 
+     +  .167D0  ,.263D0  ,.334D0  ,.408D0  ,.482D0  ,.548D0  ,.632D0  ,
+     +  .700D0  ,.767D0  ,.840D0   /
+      DATA (A(I, 5, 4),I=1,10)  / 
+     +  .203D0  ,.565D0  ,.845D0  ,.867D0  ,.906D0  ,.961D0  ,1.08D0  ,
+     +  1.13D0  ,1.21D0  ,1.25D0   /
+      DATA (A(I, 5, 5),I=1,10)  / 
+     +  .000D+00,.129D0  ,.152D0  ,.237D0  ,.208D0  ,.268D0  ,.258D0  ,
+     +  .312D0  ,.368D0  ,.450D0   /
+      DATA (A(I, 5, 6),I=1,10)  / 
+     +  .000D+00,.460D-01,.126D0  ,.174D0  ,.182D0  ,.188D0  ,.208D0  ,
+     +  .219D0  ,.233D0  ,.239D0   /
+      DATA (A(I, 5, 7),I=1,10)  / 
+     +  .000D+00,.289D-02,.380D-01,.611D-01,.788D-01,.845D-01,.974D-01,
+     +  .103D0  ,.111D0  ,.117D0   /
+      DATA (A(I, 5, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.137D-01,.223D-01,.374D-01,.436D-01,.488D-01,
+     +  .488D-01,.524D-01,.547D-01 /
+      DATA (A(I, 5, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.162D-02,.114D-01,.198D-01,.263D-01,.315D-01,
+     +  .323D-01,.348D-01,.364D-01 /
+      DATA (A(I, 5,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.149D-01,.240D-01,.320D-01,.428D-01,
+     +  .436D-01,.469D-01,.493D-01 /
+      DATA (A(I, 5,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.562D-02,.194D-01,.290D-01,.408D-01,
+     +  .460D-01,.492D-01,.500D-01 /
+      DATA (A(I, 5,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.476D-04,.106D-01,.134D-01,.191D-01,
+     +  .227D-01,.264D-01,.253D-01 /
+      DATA (A(I, 5,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.281D-02,.679D-02,.879D-02,
+     +  .123D-01,.165D-01,.190D-01 /
+      DATA (A(I, 5,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.542D-04,.847D-02,.125D-01,
+     +  .144D-01,.173D-01,.192D-01 /
+      DATA (A(I, 5,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.652D-02,.982D-02,
+     +  .129D-01,.159D-01,.192D-01 /
+      DATA (A(I, 5,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.109D-03,.688D-02,
+     +  .751D-02,.845D-02,.905D-02 /
+      DATA (A(I, 5,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.823D-06,.237D-02,
+     +  .318D-02,.446D-02,.569D-02 /
+      DATA (A(I, 5,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.604D-03,
+     +  .610D-02,.673D-02,.827D-02 /
+      DATA (A(I, 5,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.716D-06,
+     +  .412D-02,.519D-02,.617D-02 /
+      DATA (A(I, 5,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .710D-03,.543D-02,.674D-02 /
+      DATA (A(I, 6, 1),I=1,10)  / 
+     +  1.36D0  ,2.08D0  ,2.67D0  ,3.30D0  ,3.94D0  ,4.62D0  ,5.18D0  ,
+     +  3.60D0  ,3.64D0  ,3.95D0   /
+      DATA (A(I, 6, 2),I=1,10)  / 
+     +  1.07D0  ,1.33D0  ,1.58D0  ,1.82D0  ,2.10D0  ,2.44D0  ,2.74D0  ,
+     +  1.78D0  ,1.73D0  ,1.80D0   /
+      DATA (A(I, 6, 3),I=1,10)  / 
+     +  .158D0  ,.276D0  ,.402D0  ,.506D0  ,.609D0  ,.700D0  ,.802D0  ,
+     +  .638D0  ,.629D0  ,.658D0   /
+      DATA (A(I, 6, 4),I=1,10)  / 
+     +  .308D0  ,.739D0  ,1.02D0  ,1.12D0  ,1.26D0  ,1.35D0  ,1.57D0  ,
+     +  1.94D0  ,1.71D0  ,1.55D0   /
+      DATA (A(I, 6, 5),I=1,10)  / 
+     +  .000D+00,.217D0  ,.183D0  ,.324D0  ,.276D0  ,.395D0  ,.393D0  ,
+     +  .558D0  ,.602D0  ,.681D0   /
+      DATA (A(I, 6, 6),I=1,10)  / 
+     +  .000D+00,.658D-01,.251D0  ,.267D0  ,.299D0  ,.326D0  ,.386D0  ,
+     +  .452D0  ,.475D0  ,.409D0   /
+      DATA (A(I, 6, 7),I=1,10)  / 
+     +  .000D+00,.198D-02,.774D-01,.136D0  ,.149D0  ,.164D0  ,.187D0  ,
+     +  .210D0  ,.238D0  ,.256D0   /
+      DATA (A(I, 6, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.290D-01,.122D0  ,.139D0  ,.128D0  ,.129D0  ,
+     +  .137D0  ,.147D0  ,.167D0   /
+      DATA (A(I, 6, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.699D-03,.617D-01,.750D-01,.801D-01,.905D-01,
+     +  .974D-01,.105D0  ,.122D0   /
+      DATA (A(I, 6,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.310D-01,.112D0  ,.127D0  ,.140D0  ,
+     +  .143D0  ,.155D0  ,.176D0   /
+      DATA (A(I, 6,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.277D-02,.889D-01,.143D0  ,.150D0  ,
+     +  .175D0  ,.184D0  ,.208D0   /
+      DATA (A(I, 6,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.202D-04,.343D-01,.959D-01,.109D0  ,
+     +  .115D0  ,.112D0  ,.116D0   /
+      DATA (A(I, 6,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.186D-02,.435D-01,.512D-01,
+     +  .744D-01,.856D-01,.103D0   /
+      DATA (A(I, 6,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.144D-04,.427D-01,.786D-01,
+     +  .911D-01,.993D-01,.108D0   /
+      DATA (A(I, 6,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.466D-02,.518D-01,
+     +  .848D-01,.109D0  ,.119D0   /
+      DATA (A(I, 6,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.655D-05,.330D-01,
+     +  .586D-01,.617D-01,.594D-01 /
+      DATA (A(I, 6,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.228D-06,.328D-02,
+     +  .190D-01,.301D-01,.454D-01 /
+      DATA (A(I, 6,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.218D-04,
+     +  .272D-01,.501D-01,.707D-01 /
+      DATA (A(I, 6,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.146D-06,
+     +  .441D-02,.378D-01,.556D-01 /
+      DATA (A(I, 6,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .160D-03,.204D-01,.679D-01 /
+      DATA (A(I, 7, 1),I=1,10)  / 
+     +  .522D0  ,.862D0  ,1.14D0  ,1.40D0  ,1.70D0  ,1.94D0  ,2.26D0  ,
+     +  2.48D0  ,2.72D0  ,3.95D0   /
+      DATA (A(I, 7, 2),I=1,10)  / 
+     +  .314D0  ,.450D0  ,.588D0  ,.692D0  ,.834D0  ,.936D0  ,1.09D0  ,
+     +  1.18D0  ,1.28D0  ,1.80D0   /
+      DATA (A(I, 7, 3),I=1,10)  / 
+     +  .814D-01,.147D0  ,.189D0  ,.226D0  ,.272D0  ,.302D0  ,.351D0  ,
+     +  .378D0  ,.406D0  ,.658D0   /
+      DATA (A(I, 7, 4),I=1,10)  / 
+     +  .252D0  ,.864D0  ,1.01D0  ,.851D0  ,.837D0  ,.774D0  ,.763D0  ,
+     +  .757D0  ,.748D0  ,1.55D0   /
+      DATA (A(I, 7, 5),I=1,10)  / 
+     +  .000D+00,.225D0  ,.180D0  ,.276D0  ,.193D0  ,.240D0  ,.190D0  ,
+     +  .228D0  ,.259D0  ,.681D0   /
+      DATA (A(I, 7, 6),I=1,10)  / 
+     +  .000D+00,.485D-01,.272D0  ,.273D0  ,.253D0  ,.216D0  ,.206D0  ,
+     +  .197D0  ,.191D0  ,.409D0   /
+      DATA (A(I, 7, 7),I=1,10)  / 
+     +  .000D+00,.137D-02,.752D-01,.137D0  ,.152D0  ,.134D0  ,.125D0  ,
+     +  .119D0  ,.116D0  ,.256D0   /
+      DATA (A(I, 7, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.220D-01,.155D0  ,.175D0  ,.155D0  ,.116D0  ,
+     +  .977D-01,.858D-01,.167D0   /
+      DATA (A(I, 7, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.326D-03,.695D-01,.881D-01,.106D0  ,.897D-01,
+     +  .782D-01,.706D-01,.122D0   /
+      DATA (A(I, 7,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.261D-01,.124D0  ,.131D0  ,.156D0  ,
+     +  .141D0  ,.121D0  ,.176D0   /
+      DATA (A(I, 7,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.785D-03,.864D-01,.130D0  ,.170D0  ,
+     +  .182D0  ,.172D0  ,.208     /
+      DATA (A(I, 7,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.896D-05,.225D-01,.105D0  ,.126D0  ,
+     +  .126D0  ,.135D0  ,.116D0   /
+      DATA (A(I, 7,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.542D-03,.427D-01,.553D-01,
+     +  .744D-01,.980D-01,.103D0   /
+      DATA (A(I, 7,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.515D-05,.377D-01,.831D-01,
+     +  .985D-01,.104D0  ,.108D0   /
+      DATA (A(I, 7,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.285D-02,.495D-01,
+     +  .871D-01,.106D0  ,.119D0   /
+      DATA (A(I, 7,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.110D-05,.284D-01,
+     +  .588D-01,.657D-01,.594D-01 /
+      DATA (A(I, 7,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.722D-07,.176D-02,
+     +  .170D-01,.305D-01,.454D-01 /
+      DATA (A(I, 7,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.148D-05,
+     +  .213D-01,.492D-01,.707D-01 /
+      DATA (A(I, 7,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.323D-07,
+     +  .722D-02,.359D-01,.556D-01 /
+      DATA (A(I, 7,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .461D-05,.155D-01,.679D-01 /
+      DATA (A(I, 8, 1),I=1,10)  / 
+     +  .630D0  ,.974D0  ,1.29D0  ,1.58D0  ,1.89D0  ,2.16D0  ,2.49D0  ,
+     +  2.75D0  ,3.02D0  ,3.95D0   /
+      DATA (A(I, 8, 2),I=1,10)  / 
+     +  .328D0  ,.459D0  ,.613D0  ,.735D0  ,.879D0  ,.994D0  ,1.15D0  ,
+     +  1.27D0  ,1.38D0  ,1.80D0   /
+      DATA (A(I, 8, 3),I=1,10)  / 
+     +  .748D-01,.121D0  ,.164D0  ,.197D0  ,.235D0  ,.265D0  ,.310D0  ,
+     +  .339D0  ,.370D0  ,.658D0   /
+      DATA (A(I, 8, 4),I=1,10)  / 
+     +  .194D0  ,.211D0  ,.337D0  ,.344D0  ,.339D0  ,.351D0  ,.390    ,
+     +  .419D0  ,.442D0  ,1.55D0   /
+      DATA (A(I, 8, 5),I=1,10)  / 
+     +  .000D+00,.869D-01,.725D-01,.113D0  ,.810D-01,.106D0  ,.951D-01,
+     +  .120D0  ,.143D0  ,.681D0   /
+      DATA (A(I, 8, 6),I=1,10)  / 
+     +  .000D+00,.288D-01,.102D0  ,.922D-01,.857D-01,.845D-01,.932D-01,
+     +  .983D-01,.102D0  ,.409D0   /
+      DATA (A(I, 8, 7),I=1,10)  / 
+     +  .000D+00,.668D-03,.533D-01,.575D-01,.493D-01,.482D-01,.539D-01,
+     +  .558D-01,.582D-01,.256D0   /
+      DATA (A(I, 8, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.205D-01,.808D-01,.510D-01,.409D-01,.406D-01,
+     +  .394D-01,.389D-01,.167D0   /
+      DATA (A(I, 8, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.999D-04,.647D-01,.385D-01,.325D-01,.325D-01,
+     +  .316D-01,.314D-01,.122D0   /
+      DATA (A(I, 8,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.169D-01,.834D-01,.611D-01,.565D-01,
+     +  .533D-01,.519D-01,.176D0   /
+      DATA (A(I, 8,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.107D-03,.769D-01,.922D-01,.805D-01,
+     +  .745D-01,.711D-01,.208D0   /
+      DATA (A(I, 8,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.180D-05,.143D-01,.983D-01,.775D-01,
+     +  .627D-01,.541D-01,.116D0   /
+      DATA (A(I, 8,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.157D-04,.346D-01,.507D-01,
+     +  .479D-01,.455D-01,.103D0   /
+      DATA (A(I, 8,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.752D-06,.248D-01,.721D-01,
+     +  .728D-01,.611D-01,.108D0   /
+      DATA (A(I, 8,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.686D-04,.356D-01,
+     +  .731D-01,.791D-01,.119D0   /
+      DATA (A(I, 8,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.838D-07,.151D-01,
+     +  .470D-01,.567D-01,.594D-01 /
+      DATA (A(I, 8,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.759D-08,.400D-04,
+     +  .193D-01,.313D-01,.454D-01 /
+      DATA (A(I, 8,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.385D-07,
+     +  .921D-02,.353D-01,.707D-01 /
+      DATA (A(I, 8,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.219D-08,
+     +  .348D-03,.226D-01,.556D-01 /
+      DATA (A(I, 8,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .212D-07,.149D-01,.679D-01 /
+      DATA (A(I, 9, 1),I=1,10)  / 
+     +  .736D0  ,1.13D0  ,1.49D0  ,1.82D0  ,2.20D0  ,2.49D0  ,2.86D0  ,
+     +  3.17D0  ,3.49D0  ,3.95D0   /
+      DATA (A(I, 9, 2),I=1,10)  / 
+     +  .339D0  ,.492D0  ,.658D0  ,.789D0  ,.958D0  ,1.08D0  ,1.25D0  ,
+     +  1.37D0  ,1.50D0  ,1.80D0   /
+      DATA (A(I, 9, 3),I=1,10)  / 
+     +  .680D-01,.110D0  ,.150D0  ,.180D0  ,.222D0  ,.247D0  ,.289    ,
+     +  .318D0  ,.349D0  ,.658D0   /
+      DATA (A(I, 9, 4),I=1,10)  / 
+     +  .110D0  ,.104D0  ,.157D0  ,.156D0  ,.210D0  ,.205D0  ,.246D0  ,
+     +  .274D0  ,.300D0  ,1.55D0   /
+      DATA (A(I, 9, 5),I=1,10)  / 
+     +  .000D+00,.379D-01,.347D-01,.477D-01,.486D-01,.576D-01,.569D-01,
+     +  .732D-01,.893D-01,.681D0   /
+      DATA (A(I, 9, 6),I=1,10)  / 
+     +  .000D+00,.223D-01,.354D-01,.312D-01,.436D-01,.400D-01,.489D-01,
+     +  .548D-01,.600D-01,.409D0   /
+      DATA (A(I, 9, 7),I=1,10)  / 
+     +  .000D+00,.338D-03,.149D-01,.142D-01,.215D-01,.188D-01,.248D-01,
+     +  .278D-01,.307D-01,.256D0   /
+      DATA (A(I, 9, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.553D-02,.862D-02,.150D-01,.106D-01,.145D-01,
+     +  .165D-01,.181D-01,.167D0   /
+      DATA (A(I, 9, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.375D-04,.641D-02,.111D-01,.792D-02,.112D-01,
+     +  .127D-01,.140D-01,.122D0   /
+      DATA (A(I, 9,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.112D-01,.200D-01,.127D-01,.176D-01,
+     +  .200D-01,.220D-01,.176D0   /
+      DATA (A(I, 9,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.244D-04,.261D-01,.162D-01,.232D-01,
+     +  .263D-01,.287D-01,.208D0   /
+      DATA (A(I, 9,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.455D-06,.635D-02,.121D-01,.186D-01,
+     +  .201D-01,.207D-01,.116D0   /
+      DATA (A(I, 9,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.146D-05,.922D-02,.116D-01,
+     +  .145D-01,.165D-01,.103D0   /
+      DATA (A(I, 9,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.135D-06,.128D-01,.202D-01,
+     +  .215D-01,.220D-01,.108D0   /
+      DATA (A(I, 9,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.237D-05,.229D-01,
+     +  .259D-01,.271D-01,.119D0   /
+      DATA (A(I, 9,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.100D-07,.534D-02,
+     +  .210D-01,.193D-01,.594D-01 /
+      DATA (A(I, 9,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.915D-09,.847D-06,
+     +  .119D-01,.125D-01,.454D-01 /
+      DATA (A(I, 9,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.298D-08,
+     +  .101D-01,.242D-01,.707D-01 /
+      DATA (A(I, 9,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.196D-09,
+     +  .243D-05,.234D-01,.556D-01 /
+      DATA (A(I, 9,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .575D-09,.364D-02,.679D-01 /
+      DATA (A(I,10, 1),I=1,10)  / 
+     +  .959D0  ,1.46D0  ,1.92D0  ,2.34D0  ,2.80D0  ,3.24D0  ,3.64D0  ,
+     +  4.05D0  ,4.48D0  ,3.95D0   /
+      DATA (A(I,10, 2),I=1,10)  / 
+     +  .343D0  ,.516D0  ,.692D0  ,.836D0  ,1.01D0  ,1.16D0  ,1.31D0  ,
+     +  1.46D0  ,1.61D0  ,1.80D0   /
+      DATA (A(I,10, 3),I=1,10)  / 
+     +  .512D-01,.837D-01,.115D0  ,.138D0  ,.169D0  ,.195D0  ,.220D0  ,
+     +  .245D0  ,.270D0  ,.658D0   /
+      DATA (A(I,10, 4),I=1,10)  / 
+     +  .274D-01,.361D-01,.510D-01,.562D-01,.703D-01,.828D-01,.877D-01,
+     +  .996D-01,.111D0  ,1.55D0   /
+      DATA (A(I,10, 5),I=1,10)  / 
+     +  .000D+00,.850D-02,.875D-02,.118D-01,.124D-01,.170D-01,.154D-01,
+     +  .194D-01,.237D-01,.681D0   /
+      DATA (A(I,10, 6),I=1,10)  / 
+     +  .000D+00,.345D-02,.519D-02,.533D-02,.691D-02,.842D-02,.844D-02,
+     +  .987D-02,.113D-01,.409D0   /
+      DATA (A(I,10, 7),I=1,10)  / 
+     +  .000D+00,.722D-04,.130D-02,.135D-02,.189D-02,.240D-02,.235D-02,
+     +  .281D-02,.331D-02,.256D0   /
+      DATA (A(I,10, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,.283D-03,.272D-03,.394D-03,.557D-03,.480D-03,
+     +  .616D-03,.775D-03,.167D0   /
+      DATA (A(I,10, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,.457D-05,.122D-03,.192D-03,.275D-03,.225D-03,
+     +  .292D-03,.373D-03,.122D0   /
+      DATA (A(I,10,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.119D-03,.185D-03,.278D-03,.201D-03,
+     +  .274D-03,.364D-03,.176D0   /
+      DATA (A(I,10,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.140D-05,.129D-03,.200D-03,.137D-03,
+     +  .188D-03,.252D-03,.208D0   /
+      DATA (A(I,10,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.207D-07,.307D-04,.518D-04,.278D-04,
+     +  .421D-04,.608D-04,.116D0   /
+      DATA (A(I,10,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.306D-07,.252D-04,.111D-04,
+     +  .188D-04,.295D-04,.103D0   /
+      DATA (A(I,10,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.321D-08,.220D-04,.104D-04,
+     +  .162D-04,.243D-04,.108D0   /
+      DATA (A(I,10,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.770D-08,.632D-05,
+     +  .105D-04,.162D-04,.119D0   /
+      DATA (A(I,10,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.117D-09,.199D-05,
+     +  .321D-05,.492D-05,.594D-01 /
+      DATA (A(I,10,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.888E-11,.323D-09,
+     +  .106D-05,.192D-05,.454D-01 /
+      DATA (A(I,10,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.174E-10,
+     +  .131D-05,.218D-05,.707D-01 /
+      DATA (A(I,10,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.994E-12,
+     +  .233D-09,.104D-05,.556D-01 /
+      DATA (A(I,10,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  .144E-11,.724D-06,.679D-01 /
+      DATA (AE(I, 1, 1),I=1,10)  / 
+     +  7.27D0  ,6.29D0  ,7.76D0  ,6.70D0  ,8.17D0  ,7.34D0  ,8.70D0  ,
+     +  8.02D0  ,7.37D0  ,6.18D0   /
+      DATA (AE(I, 1, 2),I=1,10)  / 
+     +  7.41D0  ,7.52D0  ,8.14D0  ,8.20D0  ,8.96D0  ,9.05D0  ,9.96D0  ,
+     +  10.0D0  ,10.1D0  ,9.86D0   /
+      DATA (AE(I, 1, 3),I=1,10)  / 
+     +  7.72D0  ,7.69D0  ,9.17D0  ,8.99D0  ,10.6D0  ,10.5D0  ,12.1D0  ,
+     +  12.1D0  ,12.0D0  ,11.5D0   /
+      DATA (AE(I, 1, 4),I=1,10)  / 
+     +  7.90D0  ,8.48D0  ,9.50D0  ,9.94D0  ,10.8D0  ,11.4D0  ,12.2D0  ,
+     +  12.8D0  ,13.3D0  ,13.8D0   /
+      DATA (AE(I, 1, 5),I=1,10)  / 
+     +  .000D+00,8.52D0  ,9.59D0  ,10.1D0  ,11.1D0  ,11.8D0  ,12.7D0  ,
+     +  13.3D0  ,13.8D0  ,14.4D0   /
+      DATA (AE(I, 1, 6),I=1,10)  / 
+     +  .000D+00,9.00D0  ,10.7D0  ,11.7D0  ,13.2D0  ,14.2D0  ,15.6D0  ,
+     +  16.5D0  ,17.3D0  ,18.0D0   /
+      DATA (AE(I, 1, 7),I=1,10)  / 
+     +  .000D+00,9.01D0  ,11.1D0  ,11.9D0  ,14.3D0  ,15.0D0  ,17.4D0  ,
+     +  18.0D0  ,18.6D0  ,18.8D0   /
+      DATA (AE(I, 1, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,11.2D0  ,12.4D0  ,14.5D0  ,15.7D0  ,17.6D0  ,
+     +  18.8D0  ,19.9D0  ,20.9D0   /
+      DATA (AE(I, 1, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,11.4D0  ,12.7D0  ,15.5D0  ,16.6D0  ,19.3D0  ,
+     +  20.2D0  ,21.1D0  ,21.7D0   /
+      DATA (AE(I, 1,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,13.2D0  ,15.8D0  ,17.3D0  ,19.9D0  ,
+     +  21.2D0  ,22.4D0  ,23.2D0   /
+      DATA (AE(I, 1,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,13.2D0  ,16.3D0  ,17.8D0  ,20.8D0  ,
+     +  22.1D0  ,23.3D0  ,24.2D0   /
+      DATA (AE(I, 1,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,13.4D0  ,16.2D0  ,18.2D0  ,21.0D0  ,
+     +  22.8D0  ,24.4D0  ,25.9D0   /
+      DATA (AE(I, 1,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,16.5D0  ,18.4D0  ,21.6D0  ,
+     +  23.2D0  ,24.8D0  ,26.2D0   /
+      DATA (AE(I, 1,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,16.7D0  ,19.0D0  ,22.3D0  ,
+     +  24.3D0  ,26.1D0  ,27.4D0   /
+      DATA (AE(I, 1,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,19.1D0  ,22.8D0  ,
+     +  24.7D0  ,26.6D0  ,28.2D0   /
+      DATA (AE(I, 1,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,19.2D0  ,23.0D0  ,
+     +  25.3D0  ,27.5D0  ,29.5D0   /
+      DATA (AE(I, 1,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,19.6D0  ,23.3D0  ,
+     +  25.6D0  ,27.8D0  ,29.6D0   /
+      DATA (AE(I, 1,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,23.6D0  ,
+     +  26.2D0  ,28.5D0  ,30.4D0   /
+      DATA (AE(I, 1,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,23.7D0  ,
+     +  26.3D0  ,28.8D0  ,31.0D0   /
+      DATA (AE(I, 1,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  26.5D0  ,29.2D0  ,31.5D0   /
+      DATA (AE(I, 2, 1),I=1,10)  / 
+     +  8.74D0  ,8.16D0  ,9.25D0  ,8.45D0  ,9.46D0  ,8.90D0  ,9.83D0  ,
+     +  9.38D0  ,8.96D0  ,8.15D0   /
+      DATA (AE(I, 2, 2),I=1,10)  / 
+     +  8.96D0  ,9.30D0  ,9.95D0  ,10.0D0  ,10.8D0  ,10.9D0  ,11.7D0  ,
+     +  11.8D0  ,11.9D0  ,11.8D0   /
+      DATA (AE(I, 2, 3),I=1,10)  / 
+     +  9.44D0  ,9.66D0  ,11.0D0  ,11.0D0  ,12.3D0  ,12.5D0  ,13.7D0  ,
+     +  13.9D0  ,14.0D0  ,13.8D0   /
+      DATA (AE(I, 2, 4),I=1,10)  / 
+     +  8.86D0  ,9.81D0  ,10.8D0  ,11.2D0  ,12.0D0  ,12.6D0  ,13.4D0  ,
+     +  14.0D0  ,14.5D0  ,15.1D0   /
+      DATA (AE(I, 2, 5),I=1,10)  / 
+     +  .000D+00,10.2D0  ,11.4D0  ,12.0D0  ,12.9D0  ,13.6D0  ,14.5D0  ,
+     +  15.1D0  ,15.7D0  ,16.3D0   /
+      DATA (AE(I, 2, 6),I=1,10)  / 
+     +  .000D+00,10.7D0  ,12.5D0  ,13.5D0  ,15.1D0  ,16.0D0  ,17.5D0  ,
+     +  18.3D0  ,19.2D0  ,19.9D0   /
+      DATA (AE(I, 2, 7),I=1,10)  / 
+     +  .000D+00,11.5D0  ,12.9D0  ,13.9D0  ,16.1D0  ,17.0D0  ,19.1D0  ,
+     +  19.8D0  ,20.6D0  ,21.0D0   /
+      DATA (AE(I, 2, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,12.4D0  ,13.8D0  ,15.9D0  ,17.2D0  ,19.1D0  ,
+     +  20.3D0  ,21.4D0  ,22.3D0   /
+      DATA (AE(I, 2, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,13.4D0  ,14.5D0  ,17.1D0  ,18.3D0  ,20.9D0  ,
+     +  21.9D0  ,23.0D0  ,23.7D0   /
+      DATA (AE(I, 2,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,14.9D0  ,17.5D0  ,19.1D0  ,21.6D0  ,
+     +  22.9D0  ,24.1D0  ,25.0D0   /
+      DATA (AE(I, 2,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,15.0D0  ,18.0D0  ,19.6D0  ,22.4D0  ,
+     +  23.8D0  ,25.2D0  ,26.2D0   /
+      DATA (AE(I, 2,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,16.2D0  ,17.3D0  ,19.4D0  ,22.2D0  ,
+     +  24.0D0  ,25.7D0  ,27.2D0   /
+      DATA (AE(I, 2,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,17.8D0  ,19.8D0  ,22.9D0  ,
+     +  24.6D0  ,26.2D0  ,27.7D0   /
+      DATA (AE(I, 2,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,19.1D0  ,20.4D0  ,23.7D0  ,
+     +  25.7D0  ,27.6D0  ,29.1D0   /
+      DATA (AE(I, 2,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,20.5D0  ,24.1D0  ,
+     +  26.1D0  ,28.1D0  ,29.9D0   /
+      DATA (AE(I, 2,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,20.9D0  ,23.9D0  ,
+     +  26.4D0  ,28.7D0  ,30.7D0   /
+      DATA (AE(I, 2,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,22.4D0  ,24.2D0  ,
+     +  26.7D0  ,29.0D0  ,30.9D0   /
+      DATA (AE(I, 2,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,24.8D0  ,
+     +  27.3D0  ,29.7D0  ,31.8D0   /
+      DATA (AE(I, 2,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,26.1D0  ,
+     +  27.3D0  ,29.9D0  ,32.3D0   /
+      DATA (AE(I, 2,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  27.4D0  ,30.1D0  ,32.6D0   /
+      DATA (AE(I, 3, 1),I=1,10)  / 
+     +  11.0D0  ,11.0D0  ,11.7D0  ,11.3D0  ,11.9D0  ,11.4D0  ,12.1D0  ,
+     +  11.7D0  ,11.5D0  ,11.0D0   /
+      DATA (AE(I, 3, 2),I=1,10)  / 
+     +  11.2D0  ,12.0D0  ,12.7D0  ,12.9D0  ,13.6D0  ,13.7D0  ,14.4D0  ,
+     +  14.6D0  ,14.7D0  ,14.6D0   /
+      DATA (AE(I, 3, 3),I=1,10)  / 
+     +  12.1D0  ,12.6D0  ,13.7D0  ,13.9D0  ,15.0D0  ,15.2D0  ,16.3D0  ,
+     +  16.5D0  ,16.7D0  ,16.7D0   /
+      DATA (AE(I, 3, 4),I=1,10)  / 
+     +  12.6D0  ,11.3D0  ,12.4D0  ,13.0D0  ,13.8D0  ,14.2D0  ,15.0D0  ,
+     +  15.6D0  ,16.1D0  ,16.6D0   /
+      DATA (AE(I, 3, 5),I=1,10)  / 
+     +  .000D+00,12.6D0  ,13.7D0  ,14.4D0  ,15.3D0  ,16.0D0  ,16.8D0  ,
+     +  17.5D0  ,18.1D0  ,18.6D0   /
+      DATA (AE(I, 3, 6),I=1,10)  / 
+     +  .000D+00,14.0D0  ,14.6D0  ,15.8D0  ,17.4D0  ,18.4D0  ,19.8D0  ,
+     +  20.6D0  ,21.5D0  ,22.2D0   /
+      DATA (AE(I, 3, 7),I=1,10)  / 
+     +  .000D+00,16.0D0  ,15.2D0  ,16.3D0  ,18.3D0  ,19.3D0  ,21.1D0  ,
+     +  22.0D0  ,22.8D0  ,23.5D0   /
+      DATA (AE(I, 3, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,15.6D0  ,15.1D0  ,17.2D0  ,18.6D0  ,20.6D0  ,
+     +  21.8D0  ,22.9D0  ,23.8D0   /
+      DATA (AE(I, 3, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,17.8D0  ,16.3D0  ,18.8D0  ,20.1D0  ,22.5D0  ,
+     +  23.6D0  ,24.7D0  ,25.6D0   /
+      DATA (AE(I, 3,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,17.5D0  ,19.0D0  ,20.7D0  ,23.1D0  ,
+     +  24.5D0  ,25.8D0  ,26.8D0   /
+      DATA (AE(I, 3,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,19.2D0  ,19.4D0  ,21.1D0  ,23.8D0  ,
+     +  25.4D0  ,26.8D0  ,28.0D0   /
+      DATA (AE(I, 3,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,20.7D0  ,19.6D0  ,19.7D0  ,22.4D0  ,
+     +  24.4D0  ,26.2D0  ,27.9D0   /
+      DATA (AE(I, 3,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,21.6D0  ,20.4D0  ,23.2D0  ,
+     +  25.1D0  ,26.9D0  ,28.5D0   /
+      DATA (AE(I, 3,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,23.5D0  ,22.0D0  ,23.8D0  ,
+     +  26.1D0  ,28.1D0  ,29.9D0   /
+      DATA (AE(I, 3,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,23.7D0  ,24.2D0  ,
+     +  26.3D0  ,28.5D0  ,30.4D0   /
+      DATA (AE(I, 3,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,25.4D0  ,24.8D0  ,
+     +  25.6D0  ,28.1D0  ,30.5D0   /
+      DATA (AE(I, 3,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,26.9D0  ,26.8D0  ,
+     +  26.1D0  ,28.4D0  ,30.8D0   /
+      DATA (AE(I, 3,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,28.8D0  ,
+     +  27.6D0  ,29.0D0  ,31.5D0   /
+      DATA (AE(I, 3,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,30.5D0  ,
+     +  29.2D0  ,28.9D0  ,31.5D0   /
+      DATA (AE(I, 3,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  31.0D0  ,30.0D0  ,31.7D0   /
+      DATA (AE(I, 4, 1),I=1,10)  / 
+     +  13.0D0  ,13.2D0  ,14.8D0  ,14.2D0  ,14.2D0  ,14.1D0  ,14.5D0  ,
+     +  14.4D0  ,14.3D0  ,14.0D0   /
+      DATA (AE(I, 4, 2),I=1,10)  / 
+     +  13.5D0  ,14.5D0  ,16.1D0  ,15.9D0  ,16.0D0  ,16.3D0  ,16.8D0  ,
+     +  17.0D0  ,17.1D0  ,17.2D0   /
+      DATA (AE(I, 4, 3),I=1,10)  / 
+     +  14.9D0  ,15.3D0  ,17.2D0  ,17.1D0  ,17.5D0  ,17.8D0  ,18.6D0  ,
+     +  18.9D0  ,19.1D0  ,19.3D0   /
+      DATA (AE(I, 4, 4),I=1,10)  / 
+     +  15.1D0  ,13.5D0  ,16.4D0  ,16.7D0  ,16.4D0  ,17.3D0  ,17.8D0  ,
+     +  18.5D0  ,19.0D0  ,19.6D0   /
+      DATA (AE(I, 4, 5),I=1,10)  / 
+     +  .000D+00,15.6D0  ,17.5D0  ,17.7D0  ,17.8D0  ,18.6D0  ,19.2D0  ,
+     +  19.9D0  ,20.3D0  ,21.1D0   /
+      DATA (AE(I, 4, 6),I=1,10)  / 
+     +  .000D+00,18.0D0  ,18.4D0  ,19.2D0  ,19.8D0  ,20.9D0  ,22.0D0  ,
+     +  23.1D0  ,23.6D0  ,24.7D0   /
+      DATA (AE(I, 4, 7),I=1,10)  / 
+     +  .000D+00,27.4D0  ,19.1D0  ,19.8D0  ,20.7D0  ,21.8D0  ,23.2D0  ,
+     +  24.4D0  ,24.9D0  ,25.9D0   /
+      DATA (AE(I, 4, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,18.9D0  ,18.9D0  ,19.3D0  ,21.1D0  ,22.5D0  ,
+     +  24.0D0  ,24.7D0  ,26.0D0   /
+      DATA (AE(I, 4, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,21.1D0  ,19.7D0  ,20.7D0  ,22.3D0  ,24.0D0  ,
+     +  25.6D0  ,26.3D0  ,27.7D0   /
+      DATA (AE(I, 4,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,21.0D0  ,21.1D0  ,22.9D0  ,24.6D0  ,
+     +  26.5D0  ,27.3D0  ,29.0D0   /
+      DATA (AE(I, 4,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,21.3D0  ,22.4D0  ,23.1D0  ,25.0D0  ,
+     +  27.1D0  ,27.9D0  ,29.8D0   /
+      DATA (AE(I, 4,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,36.6D0  ,21.5D0  ,22.2D0  ,23.1D0  ,
+     +  25.6D0  ,26.8D0  ,29.1D0   /
+      DATA (AE(I, 4,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,22.9D0  ,23.1D0  ,23.7D0  ,
+     +  26.2D0  ,27.3D0  ,29.6D0   /
+      DATA (AE(I, 4,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,30.5D0  ,23.6D0  ,25.0D0  ,
+     +  26.9D0  ,28.2D0  ,30.7D0   /
+      DATA (AE(I, 4,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,25.4D0  ,26.2D0  ,
+     +  27.2D0  ,28.3D0  ,31.0D0   /
+      DATA (AE(I, 4,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,24.5D0  ,25.9D0  ,
+     +  27.4D0  ,27.6D0  ,30.7D0   /
+      DATA (AE(I, 4,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,43.3D0  ,28.4D0  ,
+     +  27.5D0  ,27.9D0  ,30.9D0   /
+      DATA (AE(I, 4,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,27.2D0  ,
+     +  29.1D0  ,29.0D0  ,31.4D0   /
+      DATA (AE(I, 4,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,51.3D0  ,
+     +  30.6D0  ,29.5D0  ,31.4D0   /
+      DATA (AE(I, 4,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  28.8D0  ,30.6D0  ,32.4D0   /
+      DATA (AE(I, 5, 1),I=1,10)  / 
+     +  15.0D0  ,14.9D0  ,15.5D0  ,15.4D0  ,15.9D0  ,15.8D0  ,16.2D0  ,
+     +  16.2D0  ,16.1D0  ,15.9D0   /
+      DATA (AE(I, 5, 2),I=1,10)  / 
+     +  15.4D0  ,16.1D0  ,17.0D0  ,17.4D0  ,18.0D0  ,18.2D0  ,18.7D0  ,
+     +  18.9D0  ,19.0D0  ,19.1D0   /
+      DATA (AE(I, 5, 3),I=1,10)  / 
+     +  17.1D0  ,17.2D0  ,18.3D0  ,18.7D0  ,19.3D0  ,19.6D0  ,20.3D0  ,
+     +  20.6D0  ,20.8D0  ,20.9D0   /
+      DATA (AE(I, 5, 4),I=1,10)  / 
+     +  14.7D0  ,14.8D0  ,15.0D0  ,16.0D0  ,17.0D0  ,17.7D0  ,18.1D0  ,
+     +  19.0D0  ,19.4D0  ,20.0D0   /
+      DATA (AE(I, 5, 5),I=1,10)  / 
+     +  .000D+00,16.7D0  ,17.6D0  ,18.1D0  ,18.6D0  ,19.2D0  ,19.7D0  ,
+     +  20.4D0  ,20.8D0  ,21.2D0   /
+      DATA (AE(I, 5, 6),I=1,10)  / 
+     +  .000D+00,17.8D0  ,18.2D0  ,19.2D0  ,20.0D0  ,21.0D0  ,21.9D0  ,
+     +  23.0D0  ,23.6D0  ,24.3D0   /
+      DATA (AE(I, 5, 7),I=1,10)  / 
+     +  .000D+00,35.2D0  ,18.9D0  ,20.3D0  ,20.6D0  ,21.5D0  ,22.6D0  ,
+     +  23.7D0  ,24.2D0  ,24.7D0   /
+      DATA (AE(I, 5, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,16.4D0  ,18.9D0  ,18.8D0  ,19.6D0  ,20.7D0  ,
+     +  22.3D0  ,23.1D0  ,23.9D0   /
+      DATA (AE(I, 5, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,33.9D0  ,19.8D0  ,20.3D0  ,20.7D0  ,21.9D0  ,
+     +  23.4D0  ,24.1D0  ,24.8D0   /
+      DATA (AE(I, 5,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,18.0D0  ,20.0D0  ,21.4D0  ,22.0D0  ,
+     +  23.8D0  ,24.6D0  ,25.4D0   /
+      DATA (AE(I, 5,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,26.4D0  ,20.4D0  ,21.2D0  ,22.3D0  ,
+     +  23.8D0  ,24.7D0  ,25.5D0   /
+      DATA (AE(I, 5,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,41.7D0  ,18.2D0  ,19.8D0  ,21.1D0  ,
+     +  22.6D0  ,23.4D0  ,24.6D0   /
+      DATA (AE(I, 5,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,22.5D0  ,20.0D0  ,21.7D0  ,
+     +  22.8D0  ,23.7D0  ,24.7D0   /
+      DATA (AE(I, 5,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,54.1D0  ,19.9D0  ,21.9D0  ,
+     +  23.2D0  ,24.3D0  ,25.3D0   /
+      DATA (AE(I, 5,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,21.2D0  ,22.2D0  ,
+     +  23.6D0  ,24.9D0  ,25.5D0   /
+      DATA (AE(I, 5,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,44.9D0  ,21.9D0  ,
+     +  23.8D0  ,25.2D0  ,25.6D0   /
+      DATA (AE(I, 5,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,47.8D0  ,22.7D0  ,
+     +  23.8D0  ,24.9D0  ,26.3D0   /
+      DATA (AE(I, 5,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,35.5D0  ,
+     +  23.9D0  ,25.9D0  ,26.6D0   /
+      DATA (AE(I, 5,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,64.3D0  ,
+     +  24.1D0  ,25.7D0  ,27.1D0   /
+      DATA (AE(I, 5,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  34.0D0  ,25.7D0  ,27.7D0   /
+      DATA (AE(I, 6, 1),I=1,10)  / 
+     +  16.6D0  ,16.5D0  ,16.8D0  ,16.7D0  ,17.0D0  ,16.5D0  ,16.7D0  ,
+     +  18.3D0  ,18.9D0  ,19.0D0   /
+      DATA (AE(I, 6, 2),I=1,10)  / 
+     +  16.2D0  ,16.6D0  ,17.2D0  ,17.4D0  ,17.9D0  ,17.4D0  ,17.7D0  ,
+     +  20.7D0  ,22.0D0  ,22.6D0   /
+      DATA (AE(I, 6, 3),I=1,10)  / 
+     +  18.9D0  ,18.7D0  ,18.8D0  ,18.6D0  ,18.9D0  ,18.6D0  ,18.9D0  ,
+     +  21.0D0  ,22.3D0  ,22.9D0   /
+      DATA (AE(I, 6, 4),I=1,10)  / 
+     +  18.3D0  ,12.7D0  ,14.2D0  ,15.0D0  ,15.7D0  ,16.1D0  ,16.3D0  ,
+     +  16.5D0  ,17.9D0  ,19.0D0   /
+      DATA (AE(I, 6, 5),I=1,10)  / 
+     +  .000D+00,15.7D0  ,15.1D0  ,15.3D0  ,16.5D0  ,16.4D0  ,16.4D0  ,
+     +  17.0D0  ,18.3D0  ,19.4D0   /
+      DATA (AE(I, 6, 6),I=1,10)  / 
+     +  .000D+00,22.9D0  ,14.9D0  ,15.2D0  ,16.2D0  ,16.9D0  ,17.4D0  ,
+     +  18.2D0  ,19.5D0  ,21.1D0   /
+      DATA (AE(I, 6, 7),I=1,10)  / 
+     +  .000D+00,40.7D0  ,18.4D0  ,15.9D0  ,17.1D0  ,17.7D0  ,18.9D0  ,
+     +  19.5D0  ,20.3D0  ,21.1D0   /
+      DATA (AE(I, 6, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,23.3D0  ,16.2D0  ,16.3D0  ,17.3D0  ,18.7D0  ,
+     +  19.5D0  ,20.3D0  ,21.1D0   /
+      DATA (AE(I, 6, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,49.2D0  ,19.0D0  ,19.1D0  ,19.4D0  ,20.2D0  ,
+     +  20.8D0  ,21.6D0  ,22.0D0   /
+      DATA (AE(I, 6,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,27.2D0  ,21.2D0  ,20.8D0  ,21.4D0  ,
+     +  22.3D0  ,22.8D0  ,23.3D0   /
+      DATA (AE(I, 6,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,45.6D0  ,25.0D0  ,22.8D0  ,23.9D0  ,
+     +  23.6D0  ,24.3D0  ,24.4D0   /
+      DATA (AE(I, 6,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,45.8D0  ,29.7D0  ,25.1D0  ,25.3D0  ,
+     +  25.3D0  ,26.0D0  ,26.3D0   /
+      DATA (AE(I, 6,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,42.7D0  ,29.0D0  ,28.0D0  ,
+     +  27.0D0  ,27.2D0  ,27.6D0   /
+      DATA (AE(I, 6,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,62.0D0  ,32.0D0  ,30.0D0  ,
+     +  29.8D0  ,29.5D0  ,29.6D0   /
+      DATA (AE(I, 6,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,44.5D0  ,34.4D0  ,
+     +  32.7D0  ,31.5D0  ,31.8D0   /
+      DATA (AE(I, 6,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,75.6D0  ,37.1D0  ,
+     +  34.6D0  ,34.4D0  ,34.4D0   /
+      DATA (AE(I, 6,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,51.2D0  ,45.2D0  ,
+     +  39.0D0  ,37.5D0  ,36.4D0   /
+      DATA (AE(I, 6,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,74.9D0  ,
+     +  42.3D0  ,39.9D0  ,38.3D0   /
+      DATA (AE(I, 6,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,69.5D0  ,
+     +  50.7D0  ,42.3D0  ,41.4D0   /
+      DATA (AE(I, 6,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  66.3D0  ,48.0D0  ,43.4D0   /
+      DATA (AE(I, 7, 1),I=1,10)  / 
+     +  27.0D0  ,25.8D0  ,26.3D0  ,26.2D0  ,26.7D0  ,26.7D0  ,27.1D0  ,
+     +  27.1D0  ,27.2D0  ,19.0D0   /
+      DATA (AE(I, 7, 2),I=1,10)  / 
+     +  29.1D0  ,28.9D0  ,29.7D0  ,30.3D0  ,31.0D0  ,31.4D0  ,32.0D0  ,
+     +  32.3D0  ,32.7D0  ,22.6D0   /
+      DATA (AE(I, 7, 3),I=1,10)  / 
+     +  31.6D0  ,29.7D0  ,30.9D0  ,31.4D0  ,32.5D0  ,33.1D0  ,34.0D0  ,
+     +  34.6D0  ,35.1D0  ,22.9D0   /
+      DATA (AE(I, 7, 4),I=1,10)  / 
+     +  27.4D0  ,19.9D0  ,20.8D0  ,22.8D0  ,24.6D0  ,26.4D0  ,28.2D0  ,
+     +  29.6D0  ,30.8D0  ,19.0D0   /
+      DATA (AE(I, 7, 5),I=1,10)  / 
+     +  .000D+00,24.6D0  ,24.1D0  ,25.0D0  ,27.2D0  ,28.7D0  ,30.7D0  ,
+     +  31.8D0  ,32.9D0  ,19.4D0   /
+      DATA (AE(I, 7, 6),I=1,10)  / 
+     +  .000D+00,35.6D0  ,25.2D0  ,25.6D0  ,27.9D0  ,30.4D0  ,32.7D0  ,
+     +  34.6D0  ,36.3D0  ,21.1D0   /
+      DATA (AE(I, 7, 7),I=1,10)  / 
+     +  .000D+00,45.4D0  ,30.9D0  ,28.2D0  ,29.0D0  ,31.2D0  ,34.0D0  ,
+     +  35.8D0  ,37.4D0  ,21.1D0   /
+      DATA (AE(I, 7, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,38.2D0  ,29.6D0  ,29.4D0  ,30.3D0  ,33.2D0  ,
+     +  35.5D0  ,37.6D0  ,21.1D0   /
+      DATA (AE(I, 7, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,59.3D0  ,34.5D0  ,33.7D0  ,32.9D0  ,35.4D0  ,
+     +  37.6D0  ,39.6D0  ,22.0D0   /
+      DATA (AE(I, 7,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,44.5D0  ,37.8D0  ,37.5D0  ,37.2D0  ,
+     +  39.0D0  ,41.4D0  ,23.3D0   /
+      DATA (AE(I, 7,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,67.0D0  ,43.6D0  ,42.0D0  ,40.8D0  ,
+     +  41.4D0  ,43.0D0  ,24.4D0   /
+      DATA (AE(I, 7,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,49.9D0  ,50.9D0  ,44.6D0  ,43.9D0  ,
+     +  44.2D0  ,44.2D0  ,26.3D0   /
+      DATA (AE(I, 7,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,67.2D0  ,50.5D0  ,48.7D0  ,
+     +  48.1D0  ,47.2D0  ,27.6D0   /
+      DATA (AE(I, 7,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,68.1D0  ,55.2D0  ,52.3D0  ,
+     +  51.5D0  ,51.6D0  ,29.6D0   /
+      DATA (AE(I, 7,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,68.7D0  ,58.6D0  ,
+     +  56.5D0  ,55.7D0  ,31.8D0   /
+      DATA (AE(I, 7,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,89.3D0  ,62.9D0  ,
+     +  60.0D0  ,59.1D0  ,34.4D0   /
+      DATA (AE(I, 7,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,56.0D0  ,72.9D0  ,
+     +  66.3D0  ,64.2D0  ,36.4D0   /
+      DATA (AE(I, 7,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,105.D0  ,
+     +  71.3D0  ,68.3D0  ,38.3D0   /
+      DATA (AE(I, 7,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,73.4D0  ,
+     +  76.8D0  ,72.4D0  ,41.4D0   /
+      DATA (AE(I, 7,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  107.D0  ,79.9D0  ,43.4D0   /
+      DATA (AE(I, 8, 1),I=1,10)  / 
+     +  35.5D0  ,35.3D0  ,35.7D0  ,35.7D0  ,36.3D0  ,36.3D0  ,36.7D0  ,
+     +  36.7D0  ,36.7D0  ,19.0D0   /
+      DATA (AE(I, 8, 2),I=1,10)  / 
+     +  40.6D0  ,41.4D0  ,41.9D0  ,42.3D0  ,43.2D0  ,43.5D0  ,44.0D0  ,
+     +  44.3D0  ,44.5D0  ,22.6D0   /
+      DATA (AE(I, 8, 3),I=1,10)  / 
+     +  45.4D0  ,45.7D0  ,46.4D0  ,47.0D0  ,48.1D0  ,48.7D0  ,49.4D0  ,
+     +  49.8D0  ,50.2D0  ,22.9D0   /
+      DATA (AE(I, 8, 4),I=1,10)  / 
+     +  43.9D0  ,44.3D0  ,43.4D0  ,45.1D0  ,47.3D0  ,48.7D0  ,49.6D0  ,
+     +  50.5D0  ,51.3D0  ,19.0D0   /
+      DATA (AE(I, 8, 5),I=1,10)  / 
+     +  .000D+00,49.3D0  ,49.6D0  ,50.5D0  ,53.2D0  ,54.2D0  ,55.4D0  ,
+     +  56.1D0  ,56.8D0  ,19.4D0   /
+      DATA (AE(I, 8, 6),I=1,10)  / 
+     +  .000D+00,59.1D0  ,53.0D0  ,55.4D0  ,58.0D0  ,60.0D0  ,61.2D0  ,
+     +  62.5D0  ,63.6D0  ,21.1D0   /
+      DATA (AE(I, 8, 7),I=1,10)  / 
+     +  .000D+00,54.5D0  ,57.1D0  ,59.2D0  ,62.3D0  ,64.4D0  ,66.0D0  ,
+     +  67.3D0  ,68.5D0  ,21.1D0   /
+      DATA (AE(I, 8, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,65.9D0  ,62.1D0  ,65.1D0  ,67.6D0  ,69.4D0  ,
+     +  71.1D0  ,72.6D0  ,21.1D0   /
+      DATA (AE(I, 8, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,72.2D0  ,67.1D0  ,70.5D0  ,73.1D0  ,75.1D0  ,
+     +  76.8D0  ,78.4D0  ,22.0D0   /
+      DATA (AE(I, 8,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,80.1D0  ,75.0D0  ,78.0D0  ,80.0D0  ,
+     +  82.1D0  ,83.9D0  ,23.3D0   /
+      DATA (AE(I, 8,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,94.5D0  ,82.2D0  ,82.8D0  ,85.1D0  ,
+     +  87.3D0  ,89.2D0  ,24.4D0   /
+      DATA (AE(I, 8,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,56.8D0  ,92.5D0  ,87.2D0  ,89.4D0  ,
+     +  91.9D0  ,94.1D0  ,26.3D0   /
+      DATA (AE(I, 8,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,116.D0  ,96.2D0  ,94.4D0  ,
+     +  97.0D0  ,99.2D0  ,27.6D0   /
+      DATA (AE(I, 8,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,78.1D0  ,104.D0  ,102.D0  ,
+     +  102.D0  ,105.D0  ,29.6D0   /
+      DATA (AE(I, 8,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,128.D0  ,111.D0  ,
+     +  109.D0  ,110.D0  ,31.8D0   /
+      DATA (AE(I, 8,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,104.D0  ,118.D0  ,
+     +  117.D0  ,115.D0  ,34.4D0   /
+      DATA (AE(I, 8,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,64.4D0  ,138.D0  ,
+     +  124.D0  ,122.D0  ,36.4D0   /
+      DATA (AE(I, 8,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,133.D0  ,
+     +  133.D0  ,132.D0  ,38.3D0   /
+      DATA (AE(I, 8,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,83.6D0  ,
+     +  146.D0  ,139.D0  ,41.4D0   /
+      DATA (AE(I, 8,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  166.D0  ,147.D0  ,43.4D0   /
+      DATA (AE(I, 9, 1),I=1,10)  / 
+     +  43.3D0  ,43.2D0  ,43.6D0  ,43.8D0  ,44.1D0  ,44.3D0  ,44.7D0  ,
+     +  44.8D0  ,44.8D0  ,19.0D0   /
+      DATA (AE(I, 9, 2),I=1,10)  / 
+     +  50.9D0  ,51.4D0  ,52.0D0  ,52.6D0  ,53.1D0  ,53.6D0  ,54.2D0  ,
+     +  54.5D0  ,54.7D0  ,22.6D0   /
+      DATA (AE(I, 9, 3),I=1,10)  / 
+     +  58.0D0  ,58.4D0  ,59.3D0  ,60.1D0  ,60.7D0  ,61.5D0  ,62.3D0  ,
+     +  62.7D0  ,63.1D0  ,22.9D0   /
+      DATA (AE(I, 9, 4),I=1,10)  / 
+     +  62.0D0  ,63.9D0  ,63.7D0  ,65.7D0  ,65.5D0  ,67.5D0  ,68.2D0  ,
+     +  68.9D0  ,69.7D0  ,19.0D0   /
+      DATA (AE(I, 9, 5),I=1,10)  / 
+     +  .000D+00,72.2D0  ,72.5D0  ,74.2D0  ,74.2D0  ,76.1D0  ,77.0D0  ,
+     +  77.8D0  ,78.6D0  ,19.4D0   /
+      DATA (AE(I, 9, 6),I=1,10)  / 
+     +  .000D+00,80.4D0  ,80.5D0  ,83.1D0  ,83.0D0  ,85.5D0  ,86.8D0  ,
+     +  88.1D0  ,89.2D0  ,21.1D0   /
+      DATA (AE(I, 9, 7),I=1,10)  / 
+     +  .000D+00,63.4D0  ,88.5D0  ,91.3D0  ,91.1D0  ,94.0D0  ,95.8D0  ,
+     +  97.3D0  ,98.6D0  ,21.1D0   /
+      DATA (AE(I, 9, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,98.8D0  ,98.6D0  ,97.8D0  ,102.D0  ,104.D0  ,
+     +  106.D0  ,108.D0  ,21.1D0   /
+      DATA (AE(I, 9, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,84.1D0  ,107.D0  ,107.D0  ,111.D0  ,113.D0  ,
+     +  116.D0  ,117.D0  ,22.0D0   /
+      DATA (AE(I, 9,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,116.D0  ,115.D0  ,119.D0  ,122.D0  ,
+     +  125.D0  ,127.D0  ,23.3D0   /
+      DATA (AE(I, 9,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,111.D0  ,123.D0  ,127.D0  ,131.D0  ,
+     +  134.D0  ,137.D0  ,24.4D0   /
+      DATA (AE(I, 9,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,65.6D0  ,136.D0  ,135.D0  ,140.D0  ,
+     +  143.D0  ,146.D0  ,26.3D0   /
+      DATA (AE(I, 9,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,146.D0  ,144.D0  ,149.D0  ,
+     +  152.D0  ,155.D0  ,27.6D0   /
+      DATA (AE(I, 9,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,88.7D0  ,152.D0  ,158.D0  ,
+     +  162.D0  ,165.D0  ,29.6D0   /
+      DATA (AE(I, 9,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,181.D0  ,167.D0  ,
+     +  171.D0  ,174.D0  ,31.8D0   /
+      DATA (AE(I, 9,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,117.D0  ,174.D0  ,
+     +  180.D0  ,183.D0  ,34.4D0   /
+      DATA (AE(I, 9,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,72.0D0  ,201.D0  ,
+     +  189.D0  ,192.D0  ,36.4D0   /
+      DATA (AE(I, 9,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,151.D0  ,
+     +  198.D0  ,201.D0  ,38.3D0   /
+      DATA (AE(I, 9,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,95.2D0  ,
+     +  220.D0  ,210.D0  ,41.4D0   /
+      DATA (AE(I, 9,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  192.D0  ,217.D0  ,43.4D0   /
+      DATA (AE(I,10, 1),I=1,10)  / 
+     +  62.1D0  ,62.1D0  ,62.6D0  ,62.9D0  ,63.3D0  ,63.3D0  ,64.0D0  ,
+     +  64.0D0  ,64.0D0  ,19.0D0   /
+      DATA (AE(I,10, 2),I=1,10)  / 
+     +  75.1D0  ,75.4D0  ,76.3D0  ,76.8D0  ,77.6D0  ,77.9D0  ,78.8D0  ,
+     +  79.0D0  ,79.3D0  ,22.6D0   /
+      DATA (AE(I,10, 3),I=1,10)  / 
+     +  87.5D0  ,88.3D0  ,89.4D0  ,90.2D0  ,91.3D0  ,91.9D0  ,93.0D0  ,
+     +  93.5D0  ,93.9D0  ,22.9D0   /
+      DATA (AE(I,10, 4),I=1,10)  / 
+     +  104.D0  ,104.D0  ,105.D0  ,106.D0  ,107.D0  ,108.D0  ,109.D0  ,
+     +  110.D0  ,110.D0  ,19.0D0   /
+      DATA (AE(I,10, 5),I=1,10)  / 
+     +  .000D+00,122.D0  ,122.D0  ,123.D0  ,124.D0  ,125.D0  ,126.D0  ,
+     +  127.D0  ,128.D0  ,19.4D0   /
+      DATA (AE(I,10, 6),I=1,10)  / 
+     +  .000D+00,138.D0  ,139.D0  ,140.D0  ,142.D0  ,143.D0  ,144.D0  ,
+     +  146.D0  ,147.D0  ,21.1D0   /
+      DATA (AE(I,10, 7),I=1,10)  / 
+     +  .000D+00,85.3D0  ,158.D0  ,159.D0  ,161.D0  ,162.D0  ,164.D0  ,
+     +  166.D0  ,167.D0  ,21.1D0   /
+      DATA (AE(I,10, 8),I=1,10)  / 
+     +  .000D+00,.000D+00,176.D0  ,177.D0  ,179.D0  ,181.D0  ,183.D0  ,
+     +  184.D0  ,186.D0  ,21.1D0   /
+      DATA (AE(I,10, 9),I=1,10)  / 
+     +  .000D+00,.000D+00,114.D0  ,199.D0  ,201.D0  ,202.D0  ,205.D0  ,
+     +  206.D0  ,207.D0  ,22.0D0   /
+      DATA (AE(I,10,10),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,218.D0  ,219.D0  ,220.D0  ,224.D0  ,
+     +  225.D0  ,226.D0  ,23.3D0   /
+      DATA (AE(I,10,11),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,150.D0  ,238.D0  ,238.D0  ,243.D0  ,
+     +  244.D0  ,245.D0  ,24.4D0   /
+      DATA (AE(I,10,12),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,85.8D0  ,255.D0  ,255.D0  ,261.D0  ,
+     +  262.D0  ,263.D0  ,26.3D0   /
+      DATA (AE(I,10,13),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,195.D0  ,272.D0  ,279.D0  ,
+     +  279.D0  ,280.D0  ,27.6D0   /
+      DATA (AE(I,10,14),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,115.D0  ,290.D0  ,296.D0  ,
+     +  297.D0  ,298.D0  ,29.6D0   /
+      DATA (AE(I,10,15),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,263.D0  ,313.D0  ,
+     +  314.D0  ,315.D0  ,31.8D0   /
+      DATA (AE(I,10,16),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,150.D0  ,330.D0  ,
+     +  331.D0  ,332.D0  ,34.4D0   /
+      DATA (AE(I,10,17),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,90.0D0  ,319.D0  ,
+     +  349.D0  ,349.D0  ,36.4D0   /
+      DATA (AE(I,10,18),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,196.D0  ,
+     +  366.D0  ,367.D0  ,38.3D0   /
+      DATA (AE(I,10,19),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,122.D0  ,
+     +  387.D0  ,384.D0  ,41.4D0   /
+      DATA (AE(I,10,20),I=1,10)  / 
+     +  .000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,.000D+00,
+     +  247.D0  ,401.D0  ,43.4D0     /
+      DATA (ERES(I, 1),I=1,10)  / 10*0.D0/
+      DATA (ERES(I, 2),I=1,10)  / 10*0.D0/
+      DATA (ERES(I, 3),I=1,10)  / 10*0.D0/
+      DATA (ERES(I, 4),I=1,10)  / 10*0.D0/
+      DATA (ERES(I, 5),I=1,10)  / 10*0.D0/
+      DATA (ERES(I, 6),I=1,10)  / 
+     +    0.000D0, 0.000D0, 0.000D0, 0.000D0, 0.000D0, 0.000D0, 0.000D0,
+     +    2.780D0, 2.880D0, 2.890D0 /
+      DATA (ERES(I, 7),I=1,10)  / 
+     +    1.500D0, 2.460D0, 2.510D0, 2.610D0, 2.700D0, 2.920D0, 3.070D0,
+     +    3.200D0, 3.330D0, 2.890D0 /
+      DATA (ERES(I, 8),I=1,10)  / 
+     +    4.470D0, 4.350D0, 4.390D0, 4.550D0, 4.660D0, 4.890D0, 4.980D0,
+     +    5.100D0, 5.220D0, 2.890D0 /
+      DATA (ERES(I, 9),I=1,10)  / 
+     +    7.480D0, 7.380D0, 7.370D0, 7.480D0, 7.510D0, 7.630D0, 7.660D0,
+     +    7.750D0, 7.820D0, 2.890D0 /
+      DATA (ERES(I,10),I=1,10)  / 
+     +   15.270D0,15.190D0,15.200D0,15.370D0,15.380D0,15.430D0,15.540D0,
+     +   15.590D0,15.630D0, 2.890D0 /
+      END
+C->
+C=======================================================================
+
+      SUBROUTINE FRAGM (IAT,IAP, NW,B, NF, IAF)
+
+C-----------------------------------------------------------------------
+C...Nuclear Fragmentation, Abrasion-ablation model, 
+C...Based on Jon Engel's routines ABRABL 
+C...This most recent version adds for all prefragment
+C...masses > 10 the model calculation for the fragment
+C...mass distribution and the energy carried by the fragment
+C...of W. Friedmann
+C...The average values are used to implement the model
+C...in the montecarlo fashion / TSS, Dec '91
+C.
+C.  INPUT: IAP = mass of incident nucleus
+C.         IAT = mass of target   nucleus
+C.         NW = number of wounded nucleons in the beam nucleus
+C.         B  = impact parameter in the interaction
+C.     
+C.  OUTPUT : NF = number of fragments  of the spectator nucleus
+C.           IAF(1:NF) = mass number of each fragment
+C.           PF(3,60) in common block /FRAGMENTS/ contains
+C.           the three momentum components (MeV/c) of each
+C.           fragment in the projectile frame
+C..............................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON /FRAGMENTS/ PPP(3,60)
+      COMMON /FRAGMOD/A(10,10,20),AE(10,10,20),ERES(10,10),NFLAGG(10,10)
+      DIMENSION IAF(60)
+      DIMENSION AA(10), EAA(10) 
+      SAVE
+      EXTERNAL GASDEV
+      DATA AA/10.D0,15.D0,20.D0,25.D0,30.D0,35.D0,40.D0,45.D0,50.D0,
+     $        56.D0/
+      DATA EAA/1.D0,2.D0,4.D0,6.D0,8.D0,10.D0,12.D0,16.D0,20.D0,30.D0/
+
+      AP=IAP
+      AT=IAT
+      NPF = IAP - NW
+      IF (NPF .EQ. 0) THEN
+         NF = 0
+         RETURN
+      ENDIF
+
+      EB = ESTAR(AP,AT, B)
+      EBP = ESTARP (NPF, NW)
+C CONTRIBUTION TO E* FROM ENERGY DEPOSITED BY SECONDARIES
+      EB = EB + EBP
+C TOTAL E* IS THE SUM OF THE TWO COMPONENTS
+
+C.....Prefragment transverse momentum (MeV/nucleon)...
+            FK = FERMK(AP)
+C FERMI MOMENTUM OF THE PROJECTILE NUCLEUS
+            IF (NW .LT. IAP) THEN
+            SIG = FK*DSQRT(NW*NPF/(AP-1.D0))/3.162D0
+C GAUSSIAN SIGMA IN ALL THREE DIRECTION
+            ELSE
+            SIG = FK/3.162D0
+C THIS IS NOT CORRECT, TOO LARGE !!!!!!!!!!!!!!
+            ENDIF
+             PPFX = SIG*GASDEV(0)/NPF
+             PPFY = SIG*GASDEV(1)/NPF
+C THREE MOMENTUM COMPONENTS PER NUCLEON FOR THE PREFRAGMENT
+
+C.............Crude model for small prefragment mass .......
+            IF (NPF .LT. 10) THEN
+                 CALL EVAP(NPF, EB, EPS, NNUC, NALP)
+C   EPS IS THE KINETIC ENERGY CARRIED BY THE EVAPORATED NUCLEONS
+               ETOT = 938.D0 + EPS
+                 PP = SQRT((ETOT*ETOT - 8.79844D5)/3.D0)
+C   AVERAGE MOMENTUM OF EVAPORATED NUCLEONS IN EACH DIRECTION
+                 NUC = NPF - NNUC - 4*NALP
+                 NF = 0
+                 IF (NUC .GT. 0) THEN
+                    NF = NF + 1
+                    IAF(NF) = NUC
+                    PPP(1,NF) = NUC*PPFX
+                    PPP(2,NF) = NUC*PPFY
+                 ENDIF
+                 IF (NALP .NE. 0) THEN
+                 DO I=1,NALP
+                   NF = NF + 1
+                    IAF(NF) = 4
+                   CALL SINCO(S1,C1)
+                   CALL SINCO(S2,C2)
+                   PXE = 4.D0*PP*S1*S2
+                   PYE = 4.D0*PP*S1*C2
+                   PPP(1,NF) = 4.D0*PPFX + PXE
+                   PPP(2,NF) = 4.D0*PPFY + PYE
+                   PPP(1,1) = PPP(1,1) - PXE
+                   PPP(2,1) = PPP(2,1) - PYE
+                 ENDDO
+                 ENDIF
+                 IF (NNUC .NE. 0) THEN
+                 DO I=1,NNUC
+                    NF = NF + 1
+                    IAF(NF) = 1
+                    CALL SINCO(S1,C1)
+                    CALL SINCO(S2,C2)
+                    PXE = PP*S1*S2
+                    PYE = PP*S1*C2
+                    PPP(1,NF) = 4.D0*PPFX + PXE
+                    PPP(2,NF) = 4.D0*PPFY + PYE
+                    PPP(1,1) = PPP(1,1) - PXE
+                    PPP(2,1) = PPP(2,1) - PYE
+                 ENDDO
+                 ENDIF
+                 RETURN
+            ENDIF
+
+C.........More refined model calculation .............
+      JA = NPF/5 -1
+      IF (JA .LT. 10) THEN
+      IF ((NPF - AA(JA)) .GT. (AA(JA+1)-NPF)) JA = JA + 1
+      ENDIF
+      ARAT = DBLE(NPF)/AA(JA)
+      DO J=1,10
+      IF (EB .LT. EAA(J)) GO TO 29
+      ENDDO
+      JE = 10
+      GO TO 39
+   29      JE = J
+   39      IF (JE .GT. 1 .AND. JE .NE. 10) THEN
+      IF ((EB - EAA(J-1)) .LT. (EAA(J)-EB)) JE = J - 1
+      ENDIF
+      ERAT = EB/EAA(JE)
+        IF (EB .LT. 1.D0) THEN
+        ERAT = EB
+        ENDIF
+C INTERPOLATE BETWEEN EB=0. (NOTHING HAPPENS) AND EB = 1. MeV
+         IF (JA .EQ. 10 .AND. JE .GT. 6) THEN
+            WRITE(*,*)' JA=',JA,',   JE=',JE
+         ENDIF
+   43    ESUM = 0.D0
+      NSUM = 0
+      JF = 0
+      DO J=20,1,-1
+        FR =  A(JA, JE, J)*ARAT*ERAT
+        N1 = INT(1.D0 + FR)
+        FR1 = FR/DBLE(N1)
+        DO K=1, N1
+          IF (S_RNDM(0) .LT. FR1) THEN
+            JF = JF + 1
+            IAF(JF) = J
+            NSUM = NSUM + J
+            EKIN = ERAT*AE(JA,JE, J)
+            IF (EKIN .GT. 0.D0) THEN
+              ESUM = ESUM + EKIN
+              ETOT = 938.D0*IAF(JF) + EKIN
+              PP = DSQRT(2.D0*(ETOT*ETOT - IAF(JF)**2*8.79844D5)/3.D0)
+              CALL SINCO(S1,C1)
+              CALL SINCO(S2,C2)
+              PPP(1,JF) = PP*S1*S2 + IAF(JF)*PPFX
+              PPP(2,JF) = PP*S1*C2 + IAF(JF)*PPFY
+            ENDIF
+            IF (NSUM .GT. NPF) THEN
+C           WRITE(*,*)' WARNING, NSUM=', NSUM,',  NPF=',NPF
+C           WRITE(*,*)'  ARAT =', ARAT
+              GO TO 43
+            ELSE
+              IF (NSUM .EQ. NPF) THEN
+                GO TO 44
+              ENDIF
+            ENDIF
+          ENDIF
+        ENDDO
+      ENDDO
+      IF (NFLAGG(JA,JE) .EQ. 0) THEN
+C 'THE RESIDUE' IS A NUCLEAR FRAGMENT
+        JF = JF + 1
+        IAF(JF) = NPF - NSUM
+        F1 = NPF*EB - ESUM
+        IF (F1 .LT. 0.D0) F1 = 0.D0
+C GIVE THE REST OF EB TO THE FRAGMENT
+        EKIN = F1
+        IF (EKIN .GT. 0.D0) THEN
+          ETOT = 938.D0*IAF(JF) + EKIN
+          PP = DSQRT(2.D0*(ETOT*ETOT - IAF(JF)**2*8.79844D5)/3.D0)
+          CALL SINCO(S1,C1)
+          CALL SINCO(S2,C2)
+          PPP(1,JF) = PP*S1*S2 + IAF(JF)*PPFX
+          PPP(2,JF) = PP*S1*C2 + IAF(JF)*PPFY
+        ENDIF
+      ELSE
+C 'THE RESIDUE' CONSISTS OF SPECTATOR NUCLEONS
+        N1 = NPF - NSUM
+        DO K=1,N1
+          JF = JF + 1
+          IAF(JF) = 1
+          EKIN = ERAT*ERES(JA,JE)
+          IF (EKIN .GT. 0.D0) THEN
+            ETOT = 938.D0*IAF(JF) + EKIN
+            PP = DSQRT(2.D0*(ETOT*ETOT - IAF(JF)**2*8.79844D5)/3.D0)
+            CALL SINCO(S1,C1)
+            CALL SINCO(S2,C2)
+            PPP(1,JF) = PP*S1*S2 + PPFX
+            PPP(2,JF) = PP*S1*C2 + PPFY
+          ENDIF
+        ENDDO
+      ENDIF
+  44  NF = JF
+      RETURN
+      END
+C->
+C=======================================================================
+
+      FUNCTION ESTARP (NPF, NW)
+
+C-----------------------------------------------------------------------
+C CONTRIBUTION TO E* FROM ENERGY DEPOSITED BY SECONDARIES
+C VERY NAIVE VERSION INCORPORATING HUEFFNER'S IDEAS
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      APF = NPF
+      F1 = 15.3D0/APF**0.666666666D0
+C AVERAGE KINETIC ENERGY/NUCLEON IN PREFRAGMENT (MeV)
+C PER PATHLENGTH EQUAL TO THE PREFRAGMENT RADIUS
+      ESTARP = 0.D0
+      DO I=1,NW
+        IF (S_RNDM(0) .GT. 0.5D0) THEN
+          F2 = F1*RDIS(0)
+          ESTARP = ESTARP + F2
+        ENDIF
+      ENDDO
+C SAMPLE RANDOMLY PER WOUNDED NUCLEON, x NW
+      RETURN
+      END
+C=======================================================================
+      
+      FUNCTION RDIS(Idum)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      dimension probr(20)
+      SAVE
+      data probr/
+     *      0.10000D0, 0.15748D0, 0.21778D0, 0.28605D0, 0.36060D0,
+     *      0.43815D0, 0.51892D0, 0.60631D0, 0.70002D0, 0.79325D0,
+     *      0.88863D0, 0.98686D0, 1.10129D0, 1.21202D0, 1.32932D0,
+     *      1.44890D0, 1.57048D0, 1.70139D0, 1.83417D0, 2.00000D0/
+
+      rdis = idum
+      nr = INT(20.D0*S_RNDM(0) + 1.D0)
+      if (nr .eq. 1) then
+        f1 = 0.D0
+      else
+        f1 = probr(nr-1)
+      endif
+      dr = probr(nr) - f1
+      rdis = f1 + dr*S_RNDM(1)
+      return
+      end
+
+C=======================================================================
+
+      FUNCTION ESTAR(ap,at,b)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      SAVE
+
+c      real*4 ap,at,b,estar
+      sigma=4.5D0  !total n-n cross section in fm**2
+      rt=.82d0*at**.33333333D0 !target radius
+      rp=.82d0*ap**.33333333D0 !projectile radius
+      alpha=rt**2/rp**2
+      beta=b**2/rt**2
+      f=at*sigma/(PI*rt**2)
+      alf = log(f)
+      alalf = log(alpha)
+      gfac=0.d0
+      gfac1=0.d0
+      s1=0.D0
+      s2=0.D0
+      s3=0.D0
+      ii=1
+      do n=0,10 ! This limit may not need to be so high.
+         if(n.ge.2) then
+            gfac1=gfac
+            gfac=gfac+log(float(n)) 
+         endif
+         g0=n*alf -n*beta*alpha/(n+alpha)+alalf
+         g1=g0-log(alpha+n)-gfac
+         g2=(n+2)*log(f)-(n+2)*beta*alpha/(n+2+alpha) 
+     >      +log(n+2+alpha+beta*alpha**2)-3.d0*log(n+2.d0+alpha)-gfac
+         g3=g0-2.d0*log(n+alpha)-gfac1
+         ii=-ii
+         s1=s1+ii*exp(g1)
+         s2=s2+ii*exp(g2)
+         if(n.ge.1) s3=s3+ii*exp(g3)
+      enddo
+
+      pb=s1
+      e1b=197.D0**2/(2.D0*938.d0*rp**2*pb) *s2
+c      a=b*(s3/pb-1)
+c      a=-b*s3/pb
+c      e2b=-.5* 938. * (41./(ap**.333))**2 * a**2 /(197.**2)
+c      estar=e1b+e2b
+      estar = e1b
+      return
+      end
+C=======================================================================
+
+      SUBROUTINE EVAP(npf,eb,eps,nnuc,nalp)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      eps=7.5D0+sqrt(8.D0*eb)
+      n=min(npf*int(eb/eps),npf)
+      nalp=n/5
+      nnuc=n-4*nalp
+      return
+      end
+C->
+C=======================================================================
+
+      FUNCTION FERMK(A)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION AA(6), FK(6)
+      SAVE
+      DATA AA/4.D0, 6.D0, 12.D0, 24.D0, 40.D0, 57.D0/
+      DATA FK/130.D0,169.D0,221.D0,235.D0,251.D0,260.D0/
+
+      DO I=2,4
+      IF (A .LT. AA(I)) GO TO 25
+      ENDDO
+      I = 5
+   25      F11 = AA(I-1)
+      F12 = AA(I)
+      F13 = AA(I+1)
+      F21 = FK(I-1)
+      F22 = FK(I)
+      F23 = FK(I+1)
+      FERMK = QUAD_INT(A,F11,F12,F13, F21,F22,F23)
+      RETURN
+      END
+
+C*=======================================================================
+C. Multiple interaction structure
+C========================================================================
+
+      SUBROUTINE INT_NUC (IA, IB, SIG0, SIGEL) 
+
+C-----------------------------------------------------------------------
+C...Compute with a montecarlo code  the  "multiple interaction structure"
+C.  of a nucleus-nucleus interaction
+C.
+C.  INPUT : IA            = mass of target nucleus
+C.          IB            = mass of projectile nucleus
+C.          SIG0 (mbarn)  = inelastic pp cross section
+C.          SIGEL(mbarn)  = elastic pp cross section
+C.
+C.  OUTPUT : in common block /CNUCMS/
+C.           B = impact parameter (fm)
+C.           BMAX = maximum impact parameter for generation
+C.           NTRY = number of "trials" before one interaction
+C.           NA = number of wounded nucleons in A
+C.           NB =    "        "        "     in B
+C.           NI = number of nucleon-nucleon inelastic interactions 
+C.           NAEL = number of elastically scattered nucleons in  A 
+C.           NBEL =    "         "           "          "    in  B
+C.           JJA(J)  [J=1:IA]   = number of inelastic interactions 
+C.                                of J-th nucleon of nucleus A
+C.           JJB(J)  [J=1:IB]   = number of inelastic interactions 
+C.                                of J-th nucleon of nucleus B
+C.           JJAEL(J)  [J=1:IA]   = number of elastic interactions 
+C.                                of J-th nucleon of nucleus A
+C.           JJBEL(J)  [J=1:IB]   = number of elastic interactions 
+C.                                of J-th nucleon of nucleus B
+C.           JJINT(J,K)  [J=1:NB, K=1:NA]  (0 = no interaction) 
+C.                                         (1 = interaction )
+C.                                         between nucleon J of A and K of B
+C-----------------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (IAMAX=56)
+      COMMON /CNUCMS/ B, BMAX, NTRY, NA, NB, NI, NAEL, NBEL
+     +         ,JJA(IAMAX), JJB(IAMAX), JJINT(IAMAX,IAMAX)
+     +         ,JJAEL(IAMAX), JJBEL(IAMAX)
+      DIMENSION XA(IAMAX), YA(IAMAX), XB(IAMAX), YB(IAMAX)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      SIGT = SIG0 + SIGEL
+      R2  = 0.1D0 * SIG0/PI
+      R2T = 0.1D0 * SIGT/PI
+      BMAX = 15.D0                             ! fm
+      NTRY = 0
+      CALL NUC_CONF (IA, XA, YA)
+      CALL NUC_CONF (IB, XB, YB)
+      NI = 0
+      NIEL = 0
+      DO JA=1,IA
+         JJA(JA) = 0
+         JJAEL(JA) = 0
+      ENDDO
+      DO JB=1,IB
+         JJB(JB) = 0
+         JJBEL(JB) = 0
+         DO JA=1,IA
+            JJINT(JB,JA) = 0
+         ENDDO
+      ENDDO
+1000  B = BMAX*SQRT(S_RNDM(0))
+      PHI = TWOPI*S_RNDM(1)
+      BX = B*COS(PHI)
+      BY = B*SIN(PHI)
+      NTRY = NTRY+1
+      DO JA=1,IA
+         DO JB=1,IB
+            S = (XA(JA)-XB(JB)-BX)**2 + (YA(JA)-YB(JB)-BY)**2
+            IF (S .LT. R2)  THEN
+               NI = NI + 1
+               JJA(JA) = JJA(JA)+1
+               JJB(JB) = JJB(JB)+1
+               JJINT(JB,JA) = 1
+            ELSE IF (S .LT. R2T)  THEN
+               NIEL = NIEL + 1
+               JJAEL(JA) = JJAEL(JA)+1
+               JJBEL(JB) = JJBEL(JB)+1
+            ENDIF
+         ENDDO
+      ENDDO
+      IF (NI + NIEL .EQ. 0)  GOTO 1000
+      NA = 0
+      NB = 0
+      NAEL = 0
+      NBEL = 0
+      DO JA=1,IA
+         IF (JJA(JA) .GT. 0)  THEN
+            NA = NA + 1
+         ELSE
+            IF (JJAEL(JA) .GT. 0)  NAEL = NAEL+1
+         ENDIF
+      ENDDO
+      DO JB=1,IB
+         IF (JJB(JB) .GT. 0)  THEN
+            NB = NB + 1
+         ELSE
+            IF (JJBEL(JB) .GT. 0)  NBEL = NBEL+1
+         ENDIF
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+       SUBROUTINE NUC_CONF (IA, XX, YY)
+
+C-----------------------------------------------------------------------
+C...This routine generates the configuration  of a nucleus 
+C.  need an initialization call to NUC_GEOM_INI
+C.
+C.  INPUT  : IA = mass number of the nucleus
+C.  OUTPUT : XX(1:IA), YY(1:IA) (fm) = position in impact parameter
+C.                                     space of the IA nucleons
+C...................................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (IAMAX=56)
+      DIMENSION XX(IAMAX), YY(IAMAX)
+      PARAMETER (NB=401)
+      COMMON /CPROFA/ ZMIN, DZ, BBZ(NB,IAMAX)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      DO J=1,IA
+         Z = S_RNDM(J)
+         JZ = INT((Z-ZMIN)/DZ)+1
+         JZ = MIN(JZ,400)
+         T = (Z-ZMIN)/DZ - DBLE(JZ-1)
+         B = BBZ(JZ,IA)*(1.D0-T) + BBZ(JZ+1,IA)*T
+         PHI = TWOPI*S_RNDM(J+1)
+         XX(J) = B*COS(PHI)
+         YY(J) = B*SIN(PHI)
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE NUC_GEOM_INI
+
+C-----------------------------------------------------------------------
+C...Initialize all nucleus profiles
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (NB=401)
+      PARAMETER (IAMAX=56)
+      COMMON /CPROF/ DB, BMAX, BB(NB), TB(NB), A
+      COMMON /CPROFA/ ZMIN, DZ, BBZ(NB,IAMAX)
+      DIMENSION FFB(NB), GGB(NB)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      CALL SHELL_INI
+      CALL WOOD_SAXON_INI
+      DO IA= 2,IAMAX
+           JA = IA
+         CALL NUC_PROFIL(JA)
+         DO K=1,NB
+           FFB(K) = BB(K)*TB(K) * TWOPI
+         ENDDO            
+         GGB(1) = 0.D0
+         GGB(NB) = 1.D0
+         DO K=2,NB-1
+           GGB(K) = GGB(K-1) + FFB(K-1)*DB
+         ENDDO            
+         CALL INVERT_ARRAY(GGB,0.D0,DB,NB, BBZ(1,IA), ZMIN, DZ)
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE NUC_PROFIL (JA)
+
+C-----------------------------------------------------------------------
+C...Compute the profile function T(b)
+C.  normalised as INT[d2b T(b) = 1]
+C.  INPUT : JA = integer mass number of nucleus
+C...............................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      PARAMETER (NB=401)
+      EXTERNAL DENSA
+      DOUBLE PRECISION DENSA
+      COMMON /CC01/  B
+      COMMON /CCDA/ JJA
+      COMMON /CPROF/ DB, BMAX, BB(NB), TB(NB), A
+      SAVE
+
+      BMAX = 7.5D0
+      DB = BMAX/DBLE(NB-1)
+      JJA = JA
+      A = JA
+      DO JB=1,NB
+        B = DB*DBLE(JB-1)
+        BB(JB) = B
+        IF (JA .LE. 18)  THEN
+            TB(JB) = PROFNUC (B, JA)
+         ELSE
+            TB(JB) = 2.D0*GAUSS (DENSA,0.D0,BMAX)
+         ENDIF
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE NUC1_PROFIL (AA)
+
+C-----------------------------------------------------------------------
+C...Compute the profile function T(b)
+C.  normalised as INT[d2b T(b) = 1]
+C.  INPUT : AA = mass number of nucleus
+C...............................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (NB=401)
+      EXTERNAL DENSA
+      DOUBLE PRECISION DENSA
+      COMMON /CC01/  B
+      COMMON /CPROF/ DB, BMAX, BB(NB), TB(NB), A
+      SAVE
+
+      A = AA
+      IA1 = INT(AA)
+      IA2 = IA1 + 1
+      U = AA - DBLE(IA1)
+      BMAX = 7.5D0
+      DB = BMAX/DBLE(NB-1)
+      DO JB=1,NB
+         B = DB*DBLE(JB-1)
+         BB(JB) = B
+         IF (A .LE. 18.D0)  THEN
+             T1 = PROFNUC (B, IA1)
+             T2 = PROFNUC (B, IA2)
+          ELSE
+             JJA = IA1
+             T1 = 2.D0*GAUSS (DENSA,0.D0,BMAX)
+             JJA = IA2
+             T2 = 2.D0*GAUSS (DENSA,0.D0,BMAX)
+          ENDIF
+          TB(JB) = (1.D0-U)*T1  + U*T2
+      ENDDO
+      RETURN
+      END
+
+C*======================================================================
+C.   Code about nuclear densities
+C=======================================================================
+
+      FUNCTION DENS_NUC (R, JA)
+
+C-----------------------------------------------------------------------
+C....Nuclear density (normalised to 1)
+C.   for a nucleus of mass number JA
+C.   INPUT R = radial coordinate  (fm)
+C.         JA = integer mass number
+C.  OUTPUT (fm**-3)
+C--------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CWOOD/ RR0(19:56), AA0(19:56), CC0(19:56)
+      SAVE
+
+      IF (JA .GT. 18)  THEN
+         DENS_NUC = WOOD_SAXON(R,JA)
+      ELSE IF (JA .NE. 4)  THEN
+         DENS_NUC = HELIUM(R)
+      ELSE
+         DENS_NUC = SHELL(R,JA)
+      ENDIF
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION WOOD_SAXON (R, JA) 
+
+C-----------------------------------------------------------------------
+C....Wood-Saxon nuclear density (normalised to 1)
+C.   for a nucleus of mass number A.
+C.   INPUT R =  (fm)
+C.         JA = mass number
+C.   OUTPUT (fm**-3)
+C------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CWOOD/ RR0(19:56), AA0(19:56), CC0(19:56)
+      SAVE
+
+      WOOD_SAXON = CC0(JA)/(1.D0+EXP((R-RR0(JA))/AA0(JA)))
+      RETURN
+      END      
+C=======================================================================
+
+      FUNCTION HELIUM (R)
+
+C-----------------------------------------------------------------------
+C... Helium density from Barrett and Jackson
+C.   INPUT R = r coordinate (fm)
+C.   OUTPUT (fm**-3)
+C........................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+      DATA R0 /0.964D0/, CA /0.322D0/   ! fm
+      DATA W /0.517D0/, CC /5.993224D-02/
+
+      HELIUM = CC*(1.D0+W*(R/R0)**2)/(1.D0 + EXP((R-R0)/CA))
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION SHELL (R,JA)
+
+C-----------------------------------------------------------------------
+C...Density in the shell model
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CSHELL/ RR0(18), RR02(18)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      R0 = RR0(JA)
+      C1 = MIN(1.D0,4.D0/DBLE(JA))
+      CS = 1.D0/(R0**3 * PI**1.5D0)
+      CP = 2.D0*CS/3.D0
+      FS = EXP(-(R/R0)**2)
+      FP = (R/R0)**2 * FS
+      SHELL = C1*CS*FS + (1.D0-C1)*CP*FP
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION PROFNUC (B, JA)
+
+C-----------------------------------------------------------------------
+C...This function return
+C.  the profile T(b) for a nucleus of mass number A
+C.  INPUT B = impact parameter (GeV**-1)
+C.        JA = integer mass number
+C.  OUTPUT  (fm**-2)
+C.
+C.  The  density of the nucleus is the `shell model density'
+C.  the parameter r0 must beinitialized in the common block
+C.............................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CSHELL/ RR0(18), RR02(18)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      B2 = B*B
+      ARG = B2/RR02(JA)
+      TS = EXP(-ARG)
+      TP = TS*(2.D0*B2+RR02(JA))/(3.D0*RR02(JA))
+      CS = MIN(1.D0,4.D0/DBLE(JA))
+      PROFNUC = (CS*TS + (1.D0-CS)*TP)/(PI*RR02(JA))
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SHELL_INI
+
+C-----------------------------------------------------------------------
+C...Initialize the parameter  of the shell model
+C.  for the nuclei with    6 < A < 18
+C..............................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      COMMON /CSHELL/ RR0(18), RR02(18)
+      DIMENSION RR(18)
+      SAVE
+C...Data on Sqrt[<r**2>]  in fermi
+      DATA RR /0.81D0, 2.095D0,  1.88D0, 1.674D0,  -1.D0,
+     +         2.56D0, 2.41D0,    -1.D0, 2.519D0, 2.45D0,
+     +         2.37D0, 2.460D0, 2.440D0,  2.54D0, 2.58D0, 
+     +         2.718D0,2.662D0, 2.789D0/
+
+      DO JA=1,18
+         A = DBLE(JA)
+         RMED = RR(JA)
+         IF (RMED .LE. 0.D0)   RMED = 0.5D0*(RR(JA-1) + RR(JA+1))
+         C = MAX(1.5D0,(5.D0/2.D0 - 4.D0/A) )
+         R0 = RMED/SQRT(C)
+         RR0 (JA) = R0
+         RR02(JA) = R0*R0
+      ENDDO
+      RETURN
+      END
+C->
+C=======================================================================
+
+      SUBROUTINE WOOD_SAXON_INI
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CWOOD/ RR0(19:56), AA0(19:56), CC0(19:56)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+C...Wood-Saxon parameters from  table 6.2   of Barrett and Jackson
+      RR0 (19) = 2.59D0
+      AA0 (19) = 0.564D0
+      RR0 (20) = 2.74D0
+      AA0 (20) = 0.569D0
+      RR0 (22) = 2.782D0
+      AA0 (22) = 0.549D0
+      RR0 (24) = 2.99D0
+      AA0 (24) = 0.548D0
+      RR0 (27) = 2.84D0
+      AA0 (27) = 0.569D0
+      RR0 (28) = 3.14D0
+      AA0 (28) = 0.537D0
+      RR0 (29) = 3.77D0
+      AA0 (29) = 0.52D0
+      RR0 (48) = 3.912D0
+      AA0 (48) = 0.5234D0
+      RR0 (56) = 3.98D0
+      AA0 (56) = 0.569D0
+      DO J=19, 56
+         IF (RR0(J) .LE. 0.D0)  THEN
+            RR0(J) = 1.05D0*DBLE(J)**0.333333333333D0
+            AA0(J) = 0.545D0
+         ENDIF
+         CC0(J)=3.D0/(4.D0*PI*RR0(J)**3)/(1.D0+((AA0(J)*PI)/RR0(J))**2)
+      ENDDO
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION DENSA (Z)
+
+C-----------------------------------------------------------------------
+C....Woods Saxon nuclear density (normalised to 1)
+C.   for a nucleus of mass number A.
+C.   INPUT z = z coordinate (fm)
+C.         JA = integer mass number
+C.         B (in common /CC01/)  impact parameter  (fm)
+C.  OUTPUT (fm**-3)
+C--------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CC01/  B
+      COMMON /CCDA/ JA
+      COMMON /CWOOD/ RR0(19:56), AA0(19:56), CC0(19:56)
+      SAVE
+
+      R = SQRT (Z*Z + B*B)
+      DENSA = CC0(JA)/(1.D0+EXP((R-RR0(JA))/AA0(JA)))
+      RETURN
+      END
+
+C*=====================================================================
+C. Cross sections
+C======================================================================
+
+      SUBROUTINE SIGMA_AIR (IB,SIG0,SIGEL,KINT,
+     +                            SIGMA,DSIGMA,SIGQE,DSIGQE)
+
+C-----------------------------------------------------------------------
+C...Compute with a montecarlo method the "production"
+C.  and "quasi-elastic" cross section for  
+C.  a nucleus-air  interaction 
+C.
+C.  INPUT : IB            = mass of projectile nucleus
+C.          SIG0 (mbarn)  = inelastic pp cross section
+C.          KINT            = number  of interactions to generate
+C.  OUTPUT : SIGMA (mbarn) = "production" cross section
+C.           DSIGMA   "    = error
+C.           SIGQE    "    = "quasi-elastic" cross section
+C.           DSIGQE   "    = error
+C.           additional output is in the common block  /CPROBAB/
+C..........................................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (IAMAX=56)
+      PARAMETER (IAMAX2=3136)          ! IAMAX*IAMAX
+      COMMON  /CPROBAB/ PROBA(IAMAX), DPROBA(IAMAX), 
+     +   PROBB(IAMAX), DPROBB(IAMAX), PROBI(IAMAX2), DPROBI(IAMAX2),
+     +   P1AEL(0:IAMAX),DP1AEL(0:IAMAX),P1BEL(0:IAMAX), DP1BEL(0:IAMAX),
+     +   P2AEL(0:IAMAX),DP2AEL(0:IAMAX),P2BEL(0:IAMAX), DP2BEL(0:IAMAX)
+      COMMON /CNUCMS/ B, BMAX, NTRY, NA, NB, NI, NAEL, NBEL
+     +         ,JJA(IAMAX), JJB(IAMAX), JJINT(IAMAX,IAMAX)
+     +         ,JJAEL(IAMAX), JJBEL(IAMAX)
+      DIMENSION  MMA(0:IAMAX), MMB(0:IAMAX), MMI(0:IAMAX2)
+      DIMENSION  M1AEL(0:IAMAX), M1BEL(0:IAMAX)
+      DIMENSION  M2AEL(0:IAMAX), M2BEL(0:IAMAX)
+      DOUBLE PRECISION FOX
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+      DATA FOX /0.21522D0/  !atomic percentage of 'non-nitrogen' in air
+
+      R2 = 0.1D0 * SIG0/PI
+      BMAX = 15.D0                           ! fm
+      SIGMA0 = PI*BMAX*BMAX*10.              ! mbarn
+      IA = 16
+      DO J=1,IA
+         MMA(J) = 0
+         M1AEL(J) = 0
+         M2AEL(J) = 0
+      ENDDO
+      DO J=1,IB
+         MMB(J) = 0
+         M1BEL(J) = 0
+         M2BEL(J) = 0
+      ENDDO
+      DO J=1,IA*IB
+         MMI(J) = 0
+      ENDDO
+      NN = 0
+      M = 0
+      DO KK=1,KINT
+c  select target IA from air composition
+         R = S_RNDM(KK)
+         IA = 14
+         IF (R .LT. FOX)  IA = 16
+
+         CALL INT_NUC (IA, IB, SIG0, SIGEL) 
+         NN = NN + NTRY
+         MMI(NI) = MMI(NI) + 1
+         MMA(NA) = MMA(NA)+1
+         MMB(NB) = MMB(NB)+1
+         IF (NI .GT. 0)  THEN
+            M = M+1
+            M1AEL(NAEL) = M1AEL(NAEL)+1
+            M1BEL(NBEL) = M1BEL(NBEL)+1
+         ELSE
+            M2AEL(NAEL) = M2AEL(NAEL)+1
+            M2BEL(NBEL) = M2BEL(NBEL)+1
+         ENDIF
+      ENDDO
+      MQE = KINT - M
+      SIGMA  = SIGMA0 * DBLE(M)/DBLE(NN)
+      DSIGMA = SIGMA0 * SQRT(DBLE(M))/DBLE(NN)
+      SIGQE  = SIGMA0 * DBLE(MQE)/DBLE(NN)
+      DSIGQE = SIGMA0 * SQRT(DBLE(MQE))/DBLE(NN)
+      DO J=1,IA
+         PROBA(J) = DBLE(MMA(J))/DBLE(M)
+         DPROBA(J) = SQRT(DBLE(MMA(J)))/DBLE(M)
+      ENDDO
+      DO J=1,IB
+         PROBB(J) = DBLE(MMB(J))/DBLE(M)
+         DPROBB(J) = SQRT(DBLE(MMB(J)))/DBLE(M)
+      ENDDO
+      DO J=1,IA*IB
+         PROBI(J) = DBLE(MMI(J))/DBLE(M)
+         DPROBI(J) = SQRT(DBLE(MMI(J)))/DBLE(M)
+      ENDDO
+      DO J=0,IA
+         P1AEL(J) = DBLE(M1AEL(J))/DBLE(M)
+         DP1AEL(J) = SQRT(DBLE(M1AEL(J)))/DBLE(M)
+         P2AEL(J) = DBLE(M2AEL(J))/DBLE(MQE)
+         DP2AEL(J) = SQRT(DBLE(M2AEL(J)))/DBLE(MQE)
+      ENDDO
+      DO J=0,IB
+         P1BEL(J) = DBLE(M1BEL(J))/DBLE(M)
+         DP1BEL(J) = SQRT(DBLE(M1BEL(J)))/DBLE(M)
+         P2BEL(J) = DBLE(M2BEL(J))/DBLE(MQE)
+         DP2BEL(J) = SQRT(DBLE(M2BEL(J)))/DBLE(MQE)
+      ENDDO
+      RETURN
+      END
+C->
+C=======================================================================
+
+      SUBROUTINE SIGMA_MC (IA,IB,SIG0,SIGEL,KINT,
+     +                            SIGMA,DSIGMA,SIGQE,DSIGQE)
+
+C-----------------------------------------------------------------------
+C...Compute with a montecarlo method the "production"
+C.  and "quasi-elastic" cross section for  
+C.  a nucleus-nucleus interaction
+C.
+C.  INPUT : IA            = mass of target nucleus
+C.          IB            = mass of projectile nucleus
+C.          SIG0 (mbarn)  = inelastic pp cross section
+C.          KINT            = number  of interactions to generate
+C.  OUTPUT : SIGMA (mbarn) = "production" cross section
+C.           DSIGMA   "    = error
+C.           SIGQE    "    = "quasi-elastic" cross section
+C.           DSIGQE   "    = error
+C.           additional output is in the common block  /CPROBAB/
+C.           Prob(n_A), Prob(n_B), Prob(n_int)
+C..........................................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (IAMAX=56)
+      PARAMETER (IAMAX2=3136)          ! IAMAX*IAMAX
+      COMMON  /CPROBAB/ PROBA(IAMAX), DPROBA(IAMAX), 
+     +   PROBB(IAMAX), DPROBB(IAMAX), PROBI(IAMAX2), DPROBI(IAMAX2),
+     +   P1AEL(0:IAMAX),DP1AEL(0:IAMAX),P1BEL(0:IAMAX), DP1BEL(0:IAMAX),
+     +   P2AEL(0:IAMAX),DP2AEL(0:IAMAX),P2BEL(0:IAMAX), DP2BEL(0:IAMAX)
+      COMMON /CNUCMS/ B, BMAX, NTRY, NA, NB, NI, NAEL, NBEL
+     +         ,JJA(IAMAX), JJB(IAMAX), JJINT(IAMAX,IAMAX)
+     +         ,JJAEL(IAMAX), JJBEL(IAMAX)
+      DIMENSION  MMA(0:IAMAX), MMB(0:IAMAX), MMI(0:IAMAX2)
+      DIMENSION  M1AEL(0:IAMAX), M1BEL(0:IAMAX)
+      DIMENSION  M2AEL(0:IAMAX), M2BEL(0:IAMAX)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      R2 = 0.1D0 * SIG0/PI
+      BMAX = 15.D0                           ! fm
+      SIGMA0 = PI*BMAX*BMAX*10.D0              ! mbarn
+      DO J=1,IA
+         MMA(J) = 0
+         M1AEL(J) = 0
+         M2AEL(J) = 0
+      ENDDO
+      DO J=1,IB
+         MMB(J) = 0
+         M1BEL(J) = 0
+         M2BEL(J) = 0
+      ENDDO
+      DO J=1,IA*IB
+         MMI(J) = 0
+      ENDDO
+      NN = 0
+      M = 0
+      DO KK=1,KINT
+         CALL INT_NUC (IA, IB, SIG0, SIGEL) 
+         NN = NN + NTRY
+         MMI(NI) = MMI(NI) + 1
+         MMA(NA) = MMA(NA)+1
+         MMB(NB) = MMB(NB)+1
+         IF (NI .GT. 0)  THEN
+            M = M+1
+            M1AEL(NAEL) = M1AEL(NAEL)+1
+            M1BEL(NBEL) = M1BEL(NBEL)+1
+         ELSE
+            M2AEL(NAEL) = M2AEL(NAEL)+1
+            M2BEL(NBEL) = M2BEL(NBEL)+1
+         ENDIF
+      ENDDO
+      MQE = KINT - M
+      SIGMA  = SIGMA0 * DBLE(M)/DBLE(NN)
+      DSIGMA = SIGMA0 * SQRT(DBLE(M))/DBLE(NN)
+      SIGQE  = SIGMA0 * DBLE(MQE)/DBLE(NN)
+      DSIGQE = SIGMA0 * SQRT(DBLE(MQE))/DBLE(NN)
+      DO J=1,IA
+         PROBA(J) = DBLE(MMA(J))/DBLE(M)
+         DPROBA(J) = SQRT(DBLE(MMA(J)))/DBLE(M)
+      ENDDO
+      DO J=1,IB
+         PROBB(J) = DBLE(MMB(J))/DBLE(M)
+         DPROBB(J) = SQRT(DBLE(MMB(J)))/DBLE(M)
+      ENDDO
+      DO J=1,IA*IB
+         PROBI(J) = DBLE(MMI(J))/DBLE(M)
+         DPROBI(J) = SQRT(DBLE(MMI(J)))/DBLE(M)
+      ENDDO
+      DO J=0,IA
+         P1AEL(J) = DBLE(M1AEL(J))/DBLE(M)
+         DP1AEL(J) = SQRT(DBLE(M1AEL(J)))/DBLE(M)
+         P2AEL(J) = DBLE(M2AEL(J))/DBLE(MQE)
+         DP2AEL(J) = SQRT(DBLE(M2AEL(J)))/DBLE(MQE)
+      ENDDO
+      DO J=0,IB
+         P1BEL(J) = DBLE(M1BEL(J))/DBLE(M)
+         DP1BEL(J) = SQRT(DBLE(M1BEL(J)))/DBLE(M)
+         P2BEL(J) = DBLE(M2BEL(J))/DBLE(MQE)
+         DP2BEL(J) = SQRT(DBLE(M2BEL(J)))/DBLE(MQE)
+      ENDDO
+      RETURN
+      END
+
+C*=============================================================
+C.  Cross sections
+C*=============================================================
+
+C Glauber h-air cross section calculation moved to inelScreen src file..
+
+C-----------------------------------------------------------------------
+C.  Fit of Block and Cahn to pp and pbar-p cross sections
+C-----------------------------------------------------------------------
+C=======================================================================
+
+      SUBROUTINE BLOCK(SQS,SIG1,SIG2,SLOP1,SLOP2,
+     +                 RHO1,RHO2,SIGEL1,SIGEL2)
+
+C-----------------------------------------------------------------------
+C...p-p and pbar-p cross sections
+C.  Parametrization of  Block and Cahn
+C
+C.  INPUT  : SQS   (GeV)  = c.m. energy
+C.  
+C.  OUPUT : SIG1 (mbarn)    = pp  total  cross section 
+C.          SLOP1 (GeV**2)  = slope of elastic scattering
+C.          RHO1            = Real/Imaginary part of the amplitude
+C.                            for forward elastic  scattering (pp)
+C.          SIGEL1 (mbarn)  = pp  elastic scattering  cross section
+C.          [1 -> 2   : pp -> pbar p]
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      S = SQS*SQS
+      CALL FPLUS  (S, FR, FI)
+      CALL FMINUS (S, GR, GI)
+      SIG1 = FI-GI
+      SIG2 = FI+GI
+      RHO1 = (FR-GR)/(FI-GI)
+      RHO2 = (FR+GR)/(FI+GI)
+      CALL SSLOPE (S, BP, BM)
+      SLOP1 = BP - GI/FI*(BM-BP)
+      SLOP2 = BP + GI/FI*(BM-BP)
+      SIGEL1 = SIG1**2*(1.D0+RHO1**2)/(16.D0*PI*SLOP1)/CMBARN
+      SIGEL2 = SIG2**2*(1.D0+RHO2**2)/(16.D0*PI*SLOP2)/CMBARN
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE FPLUS (S, FR, FI)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /BLOCKC/ AA, BETA, S0, CC, AMU, DD, ALPHA, A0
+      COMPLEX*16 Z1, Z2, Z3
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      F1 = LOG(S/S0)
+      Z1 = DCMPLX(F1,-PI/2.D0)
+      Z1 = Z1*Z1
+      Z2 = 1.D0 + A0*Z1
+      Z3 = Z1/Z2
+      F2 = CC*S**(AMU-1.D0)
+      F3 = 0.5D0*PI*(1.-AMU)
+      FI = AA + F2*COS(F3) + BETA*DREAL(Z3)
+      FR = -BETA*DIMAG(Z3)+F2*SIN(F3)
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE FMINUS (S, FR, FI)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /BLOCKC/ AA, BETA, S0, CC, AMU, DD, ALPHA, A0
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      F1 = S**(ALPHA-1.D0)
+      F2 = 0.5D0*PI*(1.D0-ALPHA)
+      FR = -DD*F1*COS(F2)
+      FI = -DD*F1*SIN(F2)
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE SSLOPE (S, BP, BM)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /BLOCKD/ CP, DP, EP, CM, DM
+      SAVE
+
+      AL = LOG(S)
+      BP = CP + DP*AL + EP*AL*AL
+      BM = CM + DM*AL
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE BLOCK_INI
+
+C-----------------------------------------------------------------------
+C...Parameters of fit IFIT=1 of Block and Cahn
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /BLOCKC/ AA, BETA, S0, CC, AMU, DD, ALPHA, A0
+      COMMON /BLOCKD/ CP, DP, EP, CM, DM
+      SAVE
+
+      AA = 41.74D0
+      BETA = 0.66D0
+      S0 = 338.5D0
+      CC = 0.D0
+      AMU = 0.D0
+      DD = -39.37D0
+      ALPHA = 0.48D0
+      A0 = 0.D0
+      CP = 10.90D0
+      DP = -0.08D0
+      EP = 0.043D0
+      CM = 23.27D0
+      DM = 0.93D0
+      RETURN
+      END
+
+C*=============================================================
+C.  Nucleus-nucleus cross sections
+C=======================================================================
+
+      SUBROUTINE SIGNUC_INI (IA,E0)
+
+C-----------------------------------------------------------------------
+C...This subroutine receives in INPUT E0 (TeV)
+C.  energy per nucleon and computes the cross sections
+C.  and interactions lengths for  all nuclei
+C.  with A  between 2 and IA
+C.  The output is contained in common block /CLENNN/
+C.
+C.  Attention: the tabulated cross sections are obtained with
+C.  new p-p cross sections as used in SIBYLL 2x,
+C.  in addition field dimensions changed (RE 04/2000)
+C.
+C........................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CLENNN/ SSIGNUC(60), ALNUC(60)
+      DIMENSION SIGMA(6,56), SIGQE(6,56)
+      DIMENSION AA(6)
+      SAVE
+      DATA NE /6/, AMIN /1.D0/, DA /1.D0/
+      DATA AA /1.D0,2.D0,3.D0,4.D0,5.D0,6.D0/
+      DATA AVOG /6.0221367D-04/
+      DATA ATARGET /14.514D0/            ! effective masss of air
+C...Data on `inelastic-production' nucleus-air cross section
+      DATA (SIGMA(J, 2),J=1,6) /
+     &3.842D+02,4.287D+02,4.940D+02,5.887D+02,6.922D+02,7.767D+02/
+      DATA (SIGMA(J, 3),J=1,6) /
+     &4.601D+02,5.149D+02,5.595D+02,6.663D+02,7.641D+02,8.446D+02/
+      DATA (SIGMA(J, 4),J=1,6) /
+     &4.881D+02,5.373D+02,6.005D+02,6.895D+02,7.716D+02,8.967D+02/
+      DATA (SIGMA(J, 5),J=1,6) /
+     &5.874D+02,6.176D+02,7.181D+02,7.993D+02,9.089D+02,1.031D+03/
+      DATA (SIGMA(J, 6),J=1,6) /
+     &7.054D+02,7.399D+02,8.388D+02,9.463D+02,1.080D+03,1.197D+03/
+      DATA (SIGMA(J, 7),J=1,6) /
+     &7.192D+02,7.611D+02,8.449D+02,9.539D+02,1.061D+03,1.176D+03/
+      DATA (SIGMA(J, 8),J=1,6) /
+     &7.550D+02,7.975D+02,9.153D+02,9.944D+02,1.126D+03,1.236D+03/
+      DATA (SIGMA(J, 9),J=1,6) /
+     &7.929D+02,8.392D+02,9.265D+02,1.059D+03,1.167D+03,1.262D+03/
+      DATA (SIGMA(J, 10),J=1,6) /
+     &8.157D+02,8.644D+02,9.512D+02,1.058D+03,1.182D+03,1.298D+03/
+      DATA (SIGMA(J, 11),J=1,6) /
+     &8.039D+02,8.587D+02,9.534D+02,1.055D+03,1.182D+03,1.298D+03/
+      DATA (SIGMA(J, 12),J=1,6) /
+     &8.515D+02,8.957D+02,9.869D+02,1.122D+03,1.253D+03,1.366D+03/
+      DATA (SIGMA(J, 13),J=1,6) /
+     &8.769D+02,9.100D+02,1.018D+03,1.119D+03,1.252D+03,1.341D+03/
+      DATA (SIGMA(J, 14),J=1,6) /
+     &9.058D+02,9.532D+02,1.057D+03,1.171D+03,1.302D+03,1.391D+03/
+      DATA (SIGMA(J, 15),J=1,6) /
+     &9.555D+02,9.799D+02,1.098D+03,1.201D+03,1.342D+03,1.444D+03/
+      DATA (SIGMA(J, 16),J=1,6) /
+     &1.009D+03,1.058D+03,1.149D+03,1.290D+03,1.414D+03,1.520D+03/
+      DATA (SIGMA(J, 17),J=1,6) /
+     &9.907D+02,1.045D+03,1.166D+03,1.290D+03,1.384D+03,1.516D+03/
+      DATA (SIGMA(J, 18),J=1,6) /
+     &1.036D+03,1.121D+03,1.198D+03,1.328D+03,1.470D+03,1.592D+03/
+      DATA (SIGMA(J, 19),J=1,6) /
+     &1.083D+03,1.162D+03,1.250D+03,1.371D+03,1.516D+03,1.661D+03/
+      DATA (SIGMA(J, 20),J=1,6) /
+     &1.146D+03,1.215D+03,1.295D+03,1.443D+03,1.544D+03,1.744D+03/
+      DATA (SIGMA(J, 21),J=1,6) /
+     &1.158D+03,1.234D+03,1.292D+03,1.467D+03,1.618D+03,1.750D+03/
+      DATA (SIGMA(J, 22),J=1,6) /
+     &1.153D+03,1.205D+03,1.329D+03,1.451D+03,1.596D+03,1.734D+03/
+      DATA (SIGMA(J, 23),J=1,6) /
+     &1.210D+03,1.274D+03,1.356D+03,1.493D+03,1.655D+03,1.803D+03/
+      DATA (SIGMA(J, 24),J=1,6) /
+     &1.212D+03,1.273D+03,1.398D+03,1.489D+03,1.641D+03,1.800D+03/
+      DATA (SIGMA(J, 25),J=1,6) /
+     &1.236D+03,1.315D+03,1.423D+03,1.561D+03,1.669D+03,1.855D+03/
+      DATA (SIGMA(J, 26),J=1,6) /
+     &1.279D+03,1.345D+03,1.431D+03,1.595D+03,1.734D+03,1.889D+03/
+      DATA (SIGMA(J, 27),J=1,6) /
+     &1.228D+03,1.304D+03,1.438D+03,1.546D+03,1.714D+03,1.836D+03/
+      DATA (SIGMA(J, 28),J=1,6) /
+     &1.289D+03,1.370D+03,1.451D+03,1.597D+03,1.754D+03,1.913D+03/
+      DATA (SIGMA(J, 29),J=1,6) /
+     &1.411D+03,1.469D+03,1.613D+03,1.777D+03,1.910D+03,2.075D+03/
+      DATA (SIGMA(J, 30),J=1,6) /
+     &1.347D+03,1.401D+03,1.498D+03,1.642D+03,1.816D+03,1.975D+03/
+      DATA (SIGMA(J, 31),J=1,6) /
+     &1.359D+03,1.448D+03,1.551D+03,1.694D+03,1.858D+03,2.007D+03/
+      DATA (SIGMA(J, 32),J=1,6) /
+     &1.358D+03,1.460D+03,1.559D+03,1.698D+03,1.842D+03,1.974D+03/
+      DATA (SIGMA(J, 33),J=1,6) /
+     &1.418D+03,1.448D+03,1.578D+03,1.727D+03,1.872D+03,2.047D+03/
+      DATA (SIGMA(J, 34),J=1,6) /
+     &1.433D+03,1.466D+03,1.605D+03,1.738D+03,1.892D+03,2.019D+03/
+      DATA (SIGMA(J, 35),J=1,6) /
+     &1.430D+03,1.511D+03,1.602D+03,1.752D+03,1.935D+03,2.060D+03/
+      DATA (SIGMA(J, 36),J=1,6) /
+     &1.462D+03,1.499D+03,1.653D+03,1.805D+03,1.920D+03,2.057D+03/
+      DATA (SIGMA(J, 37),J=1,6) /
+     &1.470D+03,1.520D+03,1.656D+03,1.818D+03,1.946D+03,2.131D+03/
+      DATA (SIGMA(J, 38),J=1,6) /
+     &1.470D+03,1.542D+03,1.691D+03,1.800D+03,1.968D+03,2.133D+03/
+      DATA (SIGMA(J, 39),J=1,6) /
+     &1.495D+03,1.588D+03,1.676D+03,1.834D+03,1.969D+03,2.163D+03/
+      DATA (SIGMA(J, 40),J=1,6) /
+     &1.525D+03,1.551D+03,1.722D+03,1.833D+03,2.020D+03,2.192D+03/
+      DATA (SIGMA(J, 41),J=1,6) /
+     &1.526D+03,1.615D+03,1.709D+03,1.899D+03,2.040D+03,2.181D+03/
+      DATA (SIGMA(J, 42),J=1,6) /
+     &1.510D+03,1.567D+03,1.716D+03,1.892D+03,2.056D+03,2.197D+03/
+      DATA (SIGMA(J, 43),J=1,6) /
+     &1.557D+03,1.658D+03,1.776D+03,1.898D+03,2.092D+03,2.200D+03/
+      DATA (SIGMA(J, 44),J=1,6) /
+     &1.556D+03,1.645D+03,1.752D+03,1.920D+03,2.091D+03,2.243D+03/
+      DATA (SIGMA(J, 45),J=1,6) /
+     &1.583D+03,1.663D+03,1.798D+03,1.940D+03,2.051D+03,2.263D+03/
+      DATA (SIGMA(J, 46),J=1,6) /
+     &1.599D+03,1.642D+03,1.799D+03,1.941D+03,2.107D+03,2.268D+03/
+      DATA (SIGMA(J, 47),J=1,6) /
+     &1.611D+03,1.692D+03,1.811D+03,1.956D+03,2.107D+03,2.264D+03/
+      DATA (SIGMA(J, 48),J=1,6) /
+     &1.625D+03,1.706D+03,1.819D+03,1.986D+03,2.139D+03,2.354D+03/
+      DATA (SIGMA(J, 49),J=1,6) /
+     &1.666D+03,1.737D+03,1.854D+03,1.971D+03,2.160D+03,2.318D+03/
+      DATA (SIGMA(J, 50),J=1,6) /
+     &1.648D+03,1.747D+03,1.856D+03,2.023D+03,2.181D+03,2.352D+03/
+      DATA (SIGMA(J, 51),J=1,6) /
+     &1.653D+03,1.763D+03,1.868D+03,2.015D+03,2.203D+03,2.386D+03/
+      DATA (SIGMA(J, 52),J=1,6) /
+     &1.690D+03,1.720D+03,1.902D+03,2.027D+03,2.189D+03,2.357D+03/
+      DATA (SIGMA(J, 53),J=1,6) /
+     &1.690D+03,1.750D+03,1.921D+03,2.059D+03,2.208D+03,2.417D+03/
+      DATA (SIGMA(J, 54),J=1,6) /
+     &1.705D+03,1.781D+03,1.911D+03,2.073D+03,2.242D+03,2.411D+03/
+      DATA (SIGMA(J, 55),J=1,6) /
+     &1.714D+03,1.806D+03,1.896D+03,2.100D+03,2.253D+03,2.411D+03/
+      DATA (SIGMA(J, 56),J=1,6) /
+     &1.774D+03,1.813D+03,1.954D+03,2.098D+03,2.280D+03,2.482D+03/
+ 
+      DATA (SIGQE(J, 2),J=1,6) /
+     &4.141D+01,3.708D+01,5.428D+01,8.696D+01,1.403D+02,1.885D+02/
+      DATA (SIGQE(J, 3),J=1,6) /
+     &4.357D+01,3.894D+01,5.177D+01,9.675D+01,1.447D+02,2.029D+02/
+      DATA (SIGQE(J, 4),J=1,6) /
+     &4.123D+01,3.933D+01,6.070D+01,9.482D+01,1.474D+02,2.023D+02/
+      DATA (SIGQE(J, 5),J=1,6) /
+     &4.681D+01,4.287D+01,6.381D+01,1.050D+02,1.519D+02,2.198D+02/
+      DATA (SIGQE(J, 6),J=1,6) /
+     &5.407D+01,5.195D+01,6.723D+01,1.108D+02,1.750D+02,2.368D+02/
+      DATA (SIGQE(J, 7),J=1,6) /
+     &4.975D+01,4.936D+01,6.880D+01,1.162D+02,1.689D+02,2.329D+02/
+      DATA (SIGQE(J, 8),J=1,6) /
+     &5.361D+01,5.027D+01,6.858D+01,1.177D+02,1.759D+02,2.412D+02/
+      DATA (SIGQE(J, 9),J=1,6) /
+     &4.980D+01,5.063D+01,7.210D+01,1.196D+02,1.806D+02,2.299D+02/
+      DATA (SIGQE(J, 10),J=1,6) /
+     &5.170D+01,5.070D+01,7.105D+01,1.182D+02,1.679D+02,2.411D+02/
+      DATA (SIGQE(J, 11),J=1,6) /
+     &4.950D+01,4.950D+01,7.286D+01,1.137D+02,1.769D+02,2.477D+02/
+      DATA (SIGQE(J, 12),J=1,6) /
+     &5.262D+01,5.133D+01,7.110D+01,1.204D+02,1.789D+02,2.501D+02/
+      DATA (SIGQE(J, 13),J=1,6) /
+     &5.320D+01,5.378D+01,6.847D+01,1.200D+02,1.805D+02,2.442D+02/
+      DATA (SIGQE(J, 14),J=1,6) /
+     &5.638D+01,5.271D+01,6.985D+01,1.209D+02,1.867D+02,2.610D+02/
+      DATA (SIGQE(J, 15),J=1,6) /
+     &5.294D+01,5.353D+01,7.435D+01,1.211D+02,1.899D+02,2.612D+02/
+      DATA (SIGQE(J, 16),J=1,6) /
+     &5.668D+01,5.254D+01,7.557D+01,1.269D+02,1.917D+02,2.707D+02/
+      DATA (SIGQE(J, 17),J=1,6) /
+     &5.456D+01,5.721D+01,7.481D+01,1.208D+02,1.859D+02,2.658D+02/
+      DATA (SIGQE(J, 18),J=1,6) /
+     &5.901D+01,5.382D+01,7.591D+01,1.246D+02,1.872D+02,2.874D+02/
+      DATA (SIGQE(J, 19),J=1,6) /
+     &6.328D+01,6.116D+01,8.451D+01,1.318D+02,2.088D+02,2.749D+02/
+      DATA (SIGQE(J, 20),J=1,6) /
+     &5.779D+01,5.924D+01,8.382D+01,1.370D+02,2.062D+02,2.837D+02/
+      DATA (SIGQE(J, 21),J=1,6) /
+     &7.155D+01,5.732D+01,8.231D+01,1.363D+02,2.047D+02,2.820D+02/
+      DATA (SIGQE(J, 22),J=1,6) /
+     &6.699D+01,5.651D+01,8.511D+01,1.477D+02,2.031D+02,2.921D+02/
+      DATA (SIGQE(J, 23),J=1,6) /
+     &6.179D+01,6.269D+01,9.395D+01,1.437D+02,2.195D+02,2.964D+02/
+      DATA (SIGQE(J, 24),J=1,6) /
+     &6.784D+01,6.028D+01,8.622D+01,1.279D+02,2.214D+02,2.867D+02/
+      DATA (SIGQE(J, 25),J=1,6) /
+     &6.589D+01,5.795D+01,8.890D+01,1.385D+02,2.055D+02,2.988D+02/
+      DATA (SIGQE(J, 26),J=1,6) /
+     &6.364D+01,6.325D+01,8.942D+01,1.421D+02,2.128D+02,3.083D+02/
+      DATA (SIGQE(J, 27),J=1,6) /
+     &6.449D+01,6.664D+01,8.986D+01,1.453D+02,2.140D+02,2.932D+02/
+      DATA (SIGQE(J, 28),J=1,6) /
+     &7.284D+01,6.139D+01,8.867D+01,1.425D+02,2.179D+02,2.978D+02/
+      DATA (SIGQE(J, 29),J=1,6) /
+     &7.221D+01,7.085D+01,9.079D+01,1.482D+02,2.277D+02,2.913D+02/
+      DATA (SIGQE(J, 30),J=1,6) /
+     &6.928D+01,6.294D+01,8.935D+01,1.463D+02,2.265D+02,2.834D+02/
+      DATA (SIGQE(J, 31),J=1,6) /
+     &6.611D+01,6.586D+01,9.133D+01,1.461D+02,2.201D+02,2.959D+02/
+      DATA (SIGQE(J, 32),J=1,6) /
+     &6.401D+01,6.177D+01,8.971D+01,1.480D+02,2.155D+02,3.152D+02/
+      DATA (SIGQE(J, 33),J=1,6) /
+     &7.057D+01,6.918D+01,8.410D+01,1.465D+02,2.288D+02,3.088D+02/
+      DATA (SIGQE(J, 34),J=1,6) /
+     &6.453D+01,7.020D+01,9.272D+01,1.517D+02,2.189D+02,2.999D+02/
+      DATA (SIGQE(J, 35),J=1,6) /
+     &6.741D+01,6.295D+01,9.323D+01,1.536D+02,2.190D+02,2.930D+02/
+      DATA (SIGQE(J, 36),J=1,6) /
+     &6.807D+01,7.046D+01,1.025D+02,1.565D+02,2.315D+02,3.090D+02/
+      DATA (SIGQE(J, 37),J=1,6) /
+     &8.082D+01,6.565D+01,9.160D+01,1.572D+02,2.229D+02,3.125D+02/
+      DATA (SIGQE(J, 38),J=1,6) /
+     &6.494D+01,6.964D+01,9.089D+01,1.653D+02,2.336D+02,3.120D+02/
+      DATA (SIGQE(J, 39),J=1,6) /
+     &6.833D+01,6.860D+01,8.933D+01,1.601D+02,2.261D+02,3.167D+02/
+      DATA (SIGQE(J, 40),J=1,6) /
+     &7.021D+01,6.866D+01,8.437D+01,1.588D+02,2.249D+02,2.941D+02/
+      DATA (SIGQE(J, 41),J=1,6) /
+     &7.122D+01,6.205D+01,9.545D+01,1.582D+02,2.335D+02,3.395D+02/
+      DATA (SIGQE(J, 42),J=1,6) /
+     &7.265D+01,6.936D+01,9.486D+01,1.505D+02,2.379D+02,3.248D+02/
+      DATA (SIGQE(J, 43),J=1,6) /
+     &7.048D+01,7.539D+01,9.192D+01,1.566D+02,2.532D+02,3.182D+02/
+      DATA (SIGQE(J, 44),J=1,6) /
+     &6.650D+01,7.139D+01,9.862D+01,1.602D+02,2.289D+02,3.077D+02/
+      DATA (SIGQE(J, 45),J=1,6) /
+     &7.511D+01,6.893D+01,9.245D+01,1.641D+02,2.519D+02,3.381D+02/
+      DATA (SIGQE(J, 46),J=1,6) /
+     &6.437D+01,6.894D+01,8.697D+01,1.544D+02,2.391D+02,3.213D+02/
+      DATA (SIGQE(J, 47),J=1,6) /
+     &7.980D+01,6.958D+01,1.022D+02,1.609D+02,2.408D+02,3.246D+02/
+      DATA (SIGQE(J, 48),J=1,6) /
+     &7.265D+01,7.313D+01,8.989D+01,1.578D+02,2.387D+02,3.235D+02/
+      DATA (SIGQE(J, 49),J=1,6) /
+     &6.959D+01,6.337D+01,9.084D+01,1.656D+02,2.331D+02,3.226D+02/
+      DATA (SIGQE(J, 50),J=1,6) /
+     &7.371D+01,6.807D+01,9.726D+01,1.535D+02,2.445D+02,3.189D+02/
+      DATA (SIGQE(J, 51),J=1,6) /
+     &7.882D+01,6.680D+01,9.377D+01,1.629D+02,2.448D+02,3.297D+02/
+      DATA (SIGQE(J, 52),J=1,6) /
+     &7.223D+01,6.794D+01,9.925D+01,1.738D+02,2.446D+02,3.162D+02/
+      DATA (SIGQE(J, 53),J=1,6) /
+     &7.703D+01,6.971D+01,9.601D+01,1.595D+02,2.484D+02,3.265D+02/
+      DATA (SIGQE(J, 54),J=1,6) /
+     &7.549D+01,7.459D+01,8.984D+01,1.645D+02,2.348D+02,3.201D+02/
+      DATA (SIGQE(J, 55),J=1,6) /
+     &7.891D+01,6.840D+01,1.017D+02,1.698D+02,2.501D+02,3.429D+02/
+      DATA (SIGQE(J, 56),J=1,6) /
+     &7.545D+01,6.673D+01,1.057D+02,1.684D+02,2.424D+02,3.181D+02/
+
+      ASQS = 0.5D0*LOG10(1.876D+03*E0)
+      JE = MIN(INT((ASQS-AMIN)/DA)+1,NE-2)
+      DO JA=2,IA
+         ABEAM = DBLE(JA)
+         S1 = QUAD_INT(ASQS, AA(JE),AA(JE+1),AA(JE+2),
+     +                   SIGMA(JE,JA),SIGMA(JE+1,JA),SIGMA(JE+2,JA))
+         S2 = QUAD_INT(ASQS, AA(JE),AA(JE+1),AA(JE+2),
+     +                   SIGQE(JE,JA),SIGQE(JE+1,JA),SIGQE(JE+2,JA))
+         SSIGNUC(JA) = S1 + S2
+         ALNUC(JA) = ATARGET/(AVOG*SSIGNUC(JA))
+      ENDDO
+      ALNUC(1) = FPNI(E0, 13)
+      SSIGNUC(1) = ATARGET/(AVOG*ALNUC(1))
+
+      RETURN
+      END
+
+
+C*=======================================================================
+C.  General utilities
+C=======================================================================
+
+      FUNCTION QUAD_INT (R,X0,X1,X2,V0,V1,V2)
+
+C-----------------------------------------------------------------------
+C...Quadratic interpolation
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      SAVE
+
+      R0=R-X0
+      R1=R-X1
+      R2=R-X2
+      S0=X0-X1
+      S1=X0-X2
+      S2=X1-X2
+      QUAD_INT = V0*R1*R2/(S0*S1)-V1*R0*R2/(S0*S2)+V2*R0*R1/(S1*S2)
+      RETURN
+      END
+C=======================================================================
+
+      FUNCTION GAUSS (FUN, A,B)
+
+C-----------------------------------------------------------------------
+C...Returns the  8 points Gauss-Legendre integral
+C.  of function FUN from A to B
+C...........................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION X(8), W(8)
+      SAVE
+      DATA X/.0950125098D0, .2816035507D0, .4580167776D0, .6178762444D0,
+     1       .7554044083D0, .8656312023D0, .9445750230D0, .9894009349D0/
+      DATA W/.1894506104D0, .1826034150D0, .1691565193D0, .1495959888D0,
+     1       .1246289712D0, .0951585116D0, .0622535239D0, .0271524594D0/
+
+      XM = 0.5D0*(B+A)
+      XR = 0.5D0*(B-A)
+      SS = 0.D0
+      DO J=1,8
+        DX = XR*X(J)
+        SS = SS + W(J) * (FUN(XM+DX) + FUN(XM-DX))
+      ENDDO
+      GAUSS = XR*SS
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE INVERT_ARRAY (yy, xmin, dx, n, xnew, ymin, dy)
+
+C-----------------------------------------------------------------------
+C..    This subroutine receives one   array
+C      of n y values in input yy(1:n)
+C      that correspond to  equispaced values of x_j = xmin + dx*(j-1)
+C
+C      and "reverse" the array returning an array of  x values
+C      xnew (1:n) that  corresponds to equispaced values of y
+C      The relation is assumed monotonous but can be 
+C      increasing or decreasing
+C..............................................................
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      dimension  yy(n), xnew (n)
+      SAVE
+
+      ymin = yy(1)
+      ymax = yy(n)
+      dy = (ymax - ymin)/float(n-1)
+      xnew (1) = xmin
+      xnew (n) = xmin + dx*float(n-1)
+      k0 = 1
+      do j=2,n-1
+         y = ymin + float(j-1)*dy 
+         do k=k0,n
+            if((yy(k) .gt. y) .eqv. (yy(n) .gt. yy(1))) goto 100
+         enddo
+100      y2 = yy(k)
+         y1 = yy(k-1)
+         k0 = k-1
+         x1 = xmin + dx*float(k-2)
+         x2 = x1+dx
+         xnew (j)  = x1 + dx* (y-y1)/(y2-y1)
+      enddo
+      return
+      end
+C->
+C=======================================================================
+
+      SUBROUTINE SINCO(S,C)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+      F = TWOPI*S_RNDM(0)
+      C = COS (F)
+      S = SIN (F)
+      RETURN
+      END
+
+C***********************************************************************
+C.  Cross sections for cascade calculations (FPNI)
+C=======================================================================
+      
+      SUBROUTINE SIGMA_PP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO) 
+
+C-----------------------------------------------------------------------
+C...p-p cross sections
+C.
+C.  this routine serves the purpose to calculate cascades with different 
+C.  cross sections
+C.
+C. INPUT: E0 = Laboratory Energy  (TeV)
+C. 
+C. OUTPUT: SIGT = total cross section
+C.         SIGEL = elastic cross section
+C.         SIGINEL = inelastic cross section
+C.         SLOPE = slope of elastic scattering (GeV**-2)
+C.         RHO = Imaginary/Real part of forward elastic amplitude
+C.   
+C.  (old cross section tables end at 10^6 GeV)
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION SSIG0(51)
+      DIMENSION SIGDIF(3)
+      COMMON /CSPA/ ICSPA2(3)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+C...p-p inelastic cross sections (mbarn)
+      DATA (SSIG0(J),J=1,51) /
+     +      32.05D0,  32.06D0,  32.08D0,  32.13D0,  32.22D0,  32.36D0,
+     +      32.56D0,  32.85D0,  33.24D0,  33.75D0,  34.37D0,  35.14D0,
+     +      36.05D0,  37.12D0,  38.37D0,  39.78D0,  41.36D0,  43.13D0,
+     +      45.07D0,  47.18D0,  49.47D0,  51.91D0,  54.54D0,  57.28D0,
+     +      60.15D0,  63.15D0,  66.28D0,  69.48D0,  72.80D0,  76.22D0,
+     +      79.71D0,  83.27D0,  86.87D0,  90.55D0,  94.26D0,  98.05D0,
+     +     101.89D0, 105.75D0, 109.71D0, 113.65D0, 117.60D0, 121.55D0,
+     +     125.53D0, 129.56D0, 133.60D0, 137.70D0, 141.77D0, 145.84D0,
+     +     149.92D0, 154.02D0, 158.15D0/
+
+      ICSPA = ICSPA2(1)
+
+      SQS = SQRT(2000.D0*0.938D0*E0)
+
+*  pre-LHC SIBYLL2.1 model
+      
+      IF(ICSPA.EQ.-2) THEN
+
+         CALL SIB_SIGMA_EXT(3,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO)      
+
+*  old standard NUCLIB/SIBYLL model
+
+      ELSE IF(ICSPA.EQ.-1) THEN
+
+        AL = LOG10(SQS)
+        if(AL.le.1.D0) then
+          SIGINEL = SSIG0(1)
+        else
+          J1 = INT((AL - 1.D0)*10.D0) + 1
+          J1 = min(J1,50)
+          T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+          SIGINEL = SSIG0(J1)*(1.D0-T) + SSIG0(J1+1)*T
+        endif
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+        SIGT  = SIGINEL/(1.D0-R)
+        SIGEL = SIGINEL*R/(1.D0-R)
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO1**2) /CMBARN
+
+*  cross section as calculated in SIBYLL
+
+      ELSE IF(ICSPA.EQ.0) THEN
+
+        CALL SIB_SIGMA_HP(1,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+*  Donnachie-Landshoff  (sig-tot)
+
+      ELSE IF(ICSPA.EQ.1) THEN
+
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,
+     +             SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 21.7D0*S**DELDL+56.08D0*S**EPSDL
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO**2) /CMBARN
+
+*  Donnachie-Landshoff (sig-tot and sig-el)
+
+      ELSE IF(ICSPA.EQ.2) THEN
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 21.7D0*S**DELDL+56.08D0*S**EPSDL
+        IMODEL = 1
+        IF(IMODEL.EQ.1) THEN
+          ALPHAP = 0.25D0
+          SLOPE = 8.5D0+2.D0*ALPHAP*LOG(S)
+        ELSE IF(IMODEL.EQ.2) THEN
+          ALPHAP = 0.3D0
+          SLOPE = 8.D0+2.D0*ALPHAP*LOG(S)
+        ENDIF
+        SIGEL = SIGT**2/(16.D0*PI*SLOPE*CMBARN)
+        SIGINEL = SIGT-SIGEL
+        RHO = 0.D0
+
+*  geometrical scaling with Donnachie-Landshoff sig-tot
+
+      ELSE IF(ICSPA.EQ.3) THEN
+
+        R = 0.17D0
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 21.7D0*S**DELDL+56.08D0*S**EPSDL
+
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(16.D0*PI*SIGEL)/CMBARN
+        RHO = 0.D0
+
+c ICSPA=4 reserved for CONEX_EXTENSION
+c      ELSE IF(ICSPA.EQ.4) THEN
+
+*  cross section from 2014 Review of Particle Physics
+        
+      ELSE IF(ICSPA.EQ.5) THEN
+         
+c     elastic slope not included in fit
+c     taking slope parameterization from sigma_pp Donnie.-Landshoff
+         ALPHAP = 0.25D0
+         SLOPE = 8.5D0+4.D0*ALPHAP*LOG(SQS)
+         
+         CALL SIG_RPP2014(1,1,SQS,SLOPE,SIGT,SIGEL,SIGINEL,RHO)
+
+      ENDIF
+
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIGMA_PIP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO) 
+
+C-----------------------------------------------------------------------
+C...pi-p cross sections
+C.
+C.  this routine serves the purpose to calculate cascades with different 
+C.  cross sections
+C.
+C. INPUT: E0 = Laboratory Energy  (TeV)
+C. 
+C. OUTPUT: SIGT = total cross section
+C.         SIGEL = elastic cross section
+C.         SIGINEL = inelastic cross section
+C.         SLOPE = slope of elastic scattering (GeV**-2)
+C.         RHO = Imaginary/Real part of forward elastic amplitude
+C.
+C.  (old cross section tables end at 10^6 GeV)
+C-----------------------------------------------------------------------
+Cf2py double precision,intent(in) :: e0
+Cf2py double precision,intent(out) :: sigt, sigel, siginel, slope, rho
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION SSIG0(51)
+      DIMENSION SIGDIF(3)
+      COMMON /CSPA/ ICSPA2(3)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+C...pi-p inelastic cross sections (mbarn)
+      DATA (SSIG0(J),J=1,51) /
+     +      20.76D0,  20.78D0,  20.81D0,  20.88D0,  20.98D0,  21.13D0,
+     +      21.33D0,  21.61D0,  21.96D0,  22.39D0,  22.92D0,  23.56D0,
+     +      24.31D0,  25.18D0,  26.18D0,  27.32D0,  28.60D0,  30.04D0,
+     +      31.64D0,  33.40D0,  35.34D0,  37.43D0,  39.72D0,  42.16D0,
+     +      44.77D0,  47.56D0,  50.53D0,  53.66D0,  56.99D0,  60.50D0,
+     +      64.17D0,  68.03D0,  72.05D0,  76.27D0,  80.67D0,  85.27D0,
+     +      90.08D0,  95.04D0, 100.27D0, 105.65D0, 111.21D0, 116.94D0,
+     +     122.87D0, 129.03D0, 135.37D0, 141.93D0, 148.62D0, 155.49D0,
+     +     162.48D0, 169.60D0, 176.94D0/
+
+      ICSPA = ICSPA2(2)
+
+      SQS = SQRT(2000.D0*0.938D0*E0)
+      
+*  pre-LHC SIBYLL2.1 model
+      
+      IF(ICSPA.EQ.-2) THEN
+
+         CALL SIB_SIGMA_EXT(2,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO)
+      
+*  old standard NUCLIB/SIBYLL model
+
+      ELSE IF(ICSPA.EQ.-1) THEN
+
+        AL = LOG10(SQS)
+        if(AL.le.1.D0) then
+          SIGINEL = SSIG0(1)
+        else
+          J1 = INT((AL - 1.D0)*10.D0) + 1
+          J1 = min(J1,50)
+          T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+          SIGINEL = SSIG0(J1)*(1.D0-T) + SSIG0(J1+1)*T
+        endif
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+        SIGT  = SIGINEL/(1.D0-R)
+        SIGEL = SIGINEL*R/(1.D0-R)
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO1**2) /CMBARN
+
+*  cross section as calculated in SIBYLL
+
+      ELSE IF(ICSPA.EQ.0) THEN
+
+        CALL SIB_SIGMA_HP(2,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+*  Donnachie-Landshoff  (sig-tot)
+
+      ELSE IF(ICSPA.EQ.1) THEN
+
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,
+     +             SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 13.63D0*S**DELDL+(36.02D0+27.56D0)/2.D0*S**EPSDL
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO**2) /CMBARN
+
+*  Donnachie-Landshoff (sig-tot and sig-el)
+
+      ELSE IF(ICSPA.EQ.2) THEN
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 13.63D0*S**DELDL+(36.02D0+27.56D0)/2.D0*S**EPSDL
+        IMODEL = 1
+        IF(IMODEL.EQ.1) THEN
+          ALPHAP = 0.25D0
+          SLOPE = 8.5D0+2.D0*ALPHAP*LOG(S)
+        ELSE IF(IMODEL.EQ.2) THEN
+          ALPHAP = 0.3D0
+          SLOPE = 8.D0+2.D0*ALPHAP*LOG(S)
+        ENDIF
+        SIGEL = SIGT**2/(16.D0*PI*SLOPE*CMBARN)
+        SIGINEL = SIGT-SIGEL
+        RHO = 0.
+
+*  geometrical scaling with Donnachie-Landshoff sig-tot
+
+      ELSE IF(ICSPA.EQ.3) THEN
+
+        R = 0.17D0
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 13.63D0*S**DELDL+(36.02D0+27.56D0)/2.D0*S**EPSDL
+
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(16.D0*PI*SIGEL)/CMBARN
+        RHO = 0.D0
+
+c ICSPA=4 reserved for CONEX_EXTENSION
+c      ELSE IF(ICSPA.EQ.4) THEN
+
+*  cross section from 2014 Review of Particle Physics
+        
+      ELSE IF(ICSPA.EQ.5) THEN
+         
+c     elastic slope not included in fit
+c     taking slope parameterization from sigma_pp Donnie.-Landshoff
+         ALPHAP = 0.25D0
+         SLOPE = 8.5D0+4.D0*ALPHAP*LOG(SQS)
+         
+         CALL SIG_RPP2014(2,1,SQS,SLOPE,SIGT,SIGEL,SIGINEL,RHO)
+         
+      ENDIF
+
+
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIGMA_KP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO) 
+
+C-----------------------------------------------------------------------
+C...K-p cross sections
+C.
+C.  this routine serves the purpose to calculate cascades with different 
+C.  cross sections
+C.
+C.  if old cross sections are selected then sigma_pi = sigma_K
+C.
+C. INPUT: E0 = Laboratory Energy  (TeV)
+C. 
+C. OUTPUT: SIGT = total cross section
+C.         SIGEL = elastic cross section
+C.         SIGINEL = inelastic cross section
+C.         SLOPE = slope of elastic scattering (GeV**-2)
+C.         RHO = Imaginary/Real part of forward elastic amplitude
+C.
+C.  (old cross section tables end at 10^6 GeV)
+C-----------------------------------------------------------------------
+Cf2py double precision,intent(in) :: e0
+Cf2py double precision,intent(out) :: sigt, sigel, siginel, slope, rho
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      DIMENSION SSIG0(51)
+      DIMENSION SIGDIF(3)
+      COMMON /CSPA/ ICSPA2(3)
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+      SAVE
+
+C...pi-p inelastic cross sections (mbarn)
+      DATA (SSIG0(J),J=1,51) /
+     +      20.76D0,  20.78D0,  20.81D0,  20.88D0,  20.98D0,  21.13D0,
+     +      21.33D0,  21.61D0,  21.96D0,  22.39D0,  22.92D0,  23.56D0,
+     +      24.31D0,  25.18D0,  26.18D0,  27.32D0,  28.60D0,  30.04D0,
+     +      31.64D0,  33.40D0,  35.34D0,  37.43D0,  39.72D0,  42.16D0,
+     +      44.77D0,  47.56D0,  50.53D0,  53.66D0,  56.99D0,  60.50D0,
+     +      64.17D0,  68.03D0,  72.05D0,  76.27D0,  80.67D0,  85.27D0,
+     +      90.08D0,  95.04D0, 100.27D0, 105.65D0, 111.21D0, 116.94D0,
+     +     122.87D0, 129.03D0, 135.37D0, 141.93D0, 148.62D0, 155.49D0,
+     +     162.48D0, 169.60D0, 176.94D0/
+
+      ICSPA = ICSPA2(3)
+      
+      SQS = SQRT(2000.D0*0.938D0*E0)      
+
+*  pre-LHC SIBYLL2.1 model
+      
+      IF(ICSPA.EQ.-2) THEN
+
+         CALL SIB_SIGMA_EXT(3,SQS,SIGT,SIGEL,SIGINEL,SLOPE,RHO)
+      
+*  old standard NUCLIB/SIBYLL model
+
+      ELSE IF(ICSPA.EQ.-1) THEN
+
+        AL = LOG10(SQS)
+        if(AL.le.1.D0) then
+          SIGINEL = SSIG0(1)
+        else
+          J1 = INT((AL - 1.D0)*10.D0) + 1
+          J1 = min(J1,50)
+          T = (AL-1.D0)*10.D0 - DBLE(J1-1)
+          SIGINEL = SSIG0(J1)*(1.D0-T) + SSIG0(J1+1)*T
+        endif
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+        SIGT  = SIGINEL/(1.D0-R)
+        SIGEL = SIGINEL*R/(1.D0-R)
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO1**2) /CMBARN
+
+*  cross section as calculated in SIBYLL
+
+      ELSE IF(ICSPA.EQ.0) THEN
+
+        CALL SIB_SIGMA_HP(3,SQS,SIGT,SIGEL,SIGINEL,SIGDIF,SLOPE,RHO)
+
+*  Donnachie-Landshoff  (sig-tot)
+
+      ELSE IF(ICSPA.EQ.1) THEN
+
+        CALL BLOCK(SQS,SIGT1,SIGT2,SLOP1,SLOP2,RHO1,RHO2,
+     +             SIGEL1,SIGEL2)
+        R = SIGEL1/SIGT1
+        RHO = RHO1
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 11.82D0*S**DELDL+(26.36D0+ 8.15D0)/2.D0*S**EPSDL
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(SIGEL * 16.D0*PI) * (1.D0+RHO**2) /CMBARN
+
+*  Donnachie-Landshoff (sig-tot and sig-el)
+
+      ELSE IF(ICSPA.EQ.2) THEN
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 11.82D0*S**DELDL+(26.36D0+ 8.15D0)/2.D0*S**EPSDL
+        IMODEL = 1
+        IF(IMODEL.EQ.1) THEN
+          ALPHAP = 0.25D0
+          SLOPE = 8.5D0+2.D0*ALPHAP*LOG(S)
+        ELSE IF(IMODEL.EQ.2) THEN
+          ALPHAP = 0.3D0
+          SLOPE = 8.D0+2.D0*ALPHAP*LOG(S)
+        ENDIF
+        SIGEL = SIGT**2/(16.D0*PI*SLOPE*CMBARN)
+        SIGINEL = SIGT-SIGEL
+        RHO = 0.D0
+
+*  geometrical scaling with Donnachie-Landshoff sig-tot
+
+      ELSE IF(ICSPA.EQ.3) THEN
+
+        R = 0.17D0
+
+        DELDL = 0.0808D0
+        EPSDL = -0.4525D0
+        S = SQS*SQS
+        SIGT = 11.82D0*S**DELDL+(26.36D0+ 8.15D0)/2.D0*S**EPSDL
+
+        SIGEL = R*SIGT
+        SIGINEL = SIGT-SIGEL
+        SLOPE = SIGT**2/(16.D0*PI*SIGEL)/CMBARN
+        RHO = 0.D0
+        
+c ICSPA=4 reserved for CONEX_EXTENSION
+c      ELSE IF(ICSPA.EQ.4) THEN
+
+
+*  cross section from 2014 Review of Particle Physics
+        
+      ELSE IF(ICSPA.EQ.5) THEN
+         
+c     elastic slope not included in fit
+c     taking slope parameterization from sigma_pp Donnie.-Landshoff
+         ALPHAP = 0.25D0
+         SLOPE = 8.5D0+4.D0*ALPHAP*LOG(SQS)
+         
+         CALL SIG_RPP2014(3,1,SQS,SLOPE,SIGT,SIGEL,SIGINEL,RHO)
+
+      ENDIF
+
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIGMA_INI 
+
+C-----------------------------------------------------------------------
+C.  Initialize the cross section and interaction lengths in air
+C.  cross section model can be chosen, per particle, by setting ICSPA2()
+C.  default is Sibyll cross section (0,0,0)      
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+      COMMON /CSAIR/ ASQSMIN, ASQSMAX, DASQS,
+     &     SSIG0(61,3),SSIGA(61,3),ALINT(61,3),NSQS
+      
+      COMMON /CSPA/ ICSPA2(3)
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      SAVE
+      DATA ICSPA2 /0,0,0/
+      DATA AVOG /6.0221367D-04/
+      DATA ATARGET /14.514D0/            ! effective masss of air
+
+      IF(NDEBUG.gt.0)
+     &     write(lun,*) ' SIGMA_INI: using cross section model no.',
+     &     (ICSPA2(i),i=1,3)
+
+      CALL BLOCK_INI
+
+C...Loop on c.m. energy 
+      NSQS = 61
+      SQSMIN = 10.D0
+      SQSMAX = 1.d+07
+      ASQSMIN = LOG10(SQSMIN)
+      ASQSMAX = LOG10(SQSMAX)
+      DASQS = (ASQSMAX-ASQSMIN)/DBLE(NSQS-1)
+      DO J=1,NSQS
+         ASQS = ASQSMIN + DASQS*DBLE(J-1)
+         SQS = 10.D0**ASQS
+         E0 = SQS*SQS/(2.D0*0.938D0) * 1.D-03       ! TeV
+C...p-air
+         CALL SIGMA_PP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO)
+C     using parametrization by Goulianos for diff. cross section
+c     (depends on elastic cross section)
+c     used to determine coupling to intermediate resonances in Glauber calc (ALAM)
+c     assumed to be universal, i.e. same coupling used for proton, pion and kaons
+         CALL SIB_HADCS1(1,SQS,SIGT1,SIGEL1,SIGINEL1,SLOPE1,RHO1)
+         SIGEFF = 0.68D0*(1.D0+36.D0/SQS**2)
+     &        *LOG(0.6D0+0.02D0/1.5D0*SQS**2)
+         SIGEFF = MAX(0.D0,SIGEFF)
+         ALAM = sqrt(SIGEFF/SIGEL1)
+         SSIGSD = 2.D0 * SIGEFF        
+         CALL SIG_H_AIR (SIGT, SLOPE, RHO, ALAM,
+     &        SSIGT, SSIGEL, SSIGQE, SIGSD, SIGQSD )
+         SSIGA(J,1) = SSIGT-SSIGQE ! had-air production cross section
+         SSIG0(J,1) = SIGINEL   ! had-nucleon inel. cross section
+         ALINT(J,1) = 1.D0/(AVOG*SSIGA(J,1)/ATARGET) ! interaction length in air
+C...pi-air
+         CALL SIGMA_PIP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO) 
+         CALL  SIG_H_AIR (SIGT, SLOPE, RHO, ALAM,
+     &        SSIGT, SSIGEL, SSIGQE, SIGSD, SIGQSD )
+         SSIGA(J,2) = SSIGT-SSIGQE
+         SSIG0(J,2) = SIGINEL
+         ALINT(J,2) = 1.D0/(AVOG*SSIGA(J,2)/ATARGET)
+C...K-air
+         CALL SIGMA_KP (E0, SIGT, SIGEL, SIGINEL, SLOPE, RHO) 
+         CALL  SIG_H_AIR (SIGT, SLOPE, RHO, ALAM,
+     &        SSIGT, SSIGEL, SSIGQE, SIGSD, SIGQSD )
+         SSIGA(J,3) = SSIGT-SSIGQE
+         SSIG0(J,3) = SIGINEL
+         ALINT(J,3) = 1.D0/(AVOG*SSIGA(J,3)/ATARGET)
+      ENDDO
+
+      if (ndebug .gt. 0 ) THEN
+        WRITE(LUN,'(1X,A)') 
+     &  ' SIGMA_INI: NUCLIB interaction lengths [g/cm**2]'
+        WRITE(LUN,'(1X,A)') 
+     &  '     sqs,       p-air,      pi-air,     K-air'
+      DO J=1,NSQS
+         SQS = 10.D0**(ASQSMIN + DASQS*DBLE(J-1))
+         WRITE(LUN,'(1X,1P,4E12.3)') 
+     &        SQS,ALINT(J,1),ALINT(J,2),ALINT(J,3)
+        ENDDO
+      endif
+
+      RETURN
+      END
+
+C=======================================================================
+
+      FUNCTION FPNI (E,Linp)
+
+C-----------------------------------------------------------------------
+C...This function  returns the interaction length 
+C.  of an hadronic particle travelling in air
+C.
+C.  INPUT:   E (TeV)   particle energy
+C.           Linp      particle code
+C.  OUTPUT:  FPNI      (g cm-2)
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+            
+      COMMON /CSAIR/ ASQSMIN, ASQSMAX, DASQS,
+     &     SSIG0(61,3),SSIGA(61,3),ALINT(61,3),NSQS
+
+      DIMENSION KK(6:14)
+      SAVE
+      DATA KK /3*2, 4*3, 2*1/
+
+      SQS = SQRT(2000.D0*E*0.937D0)                        ! GeV
+      AL = LOG10 (SQS)
+      L = abs(Linp)
+      IF (AL .LE. ASQSMIN)  THEN
+         FPNI = ALINT(1,KK(L))
+      ELSE
+         T = (AL-ASQSMIN)/DASQS
+         J = INT(T)
+         J = MIN(J,NSQS-2)
+         T = T-DBLE(J)
+         FPNI = ((1.D0-T)*ALINT(J+1,KK(L)) + T*ALINT(J+2,KK(L)))
+      ENDIF
+      RETURN
+      END
+
+C=======================================================================
+      
+      FUNCTION FSIGHAIR (E,Linp)
+
+C-----------------------------------------------------------------------
+C...This function returns the production cross section
+C.  of an hadronic particle with air calculated in NUCLIB (SIGMA_INI)     
+C.
+C.  INPUT:   E (TeV)   particle energy
+C.           Linp      particle code
+C.  OUTPUT:  SIG_PROD  (mb)
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+            
+      COMMON /CSAIR/ ASQSMIN, ASQSMAX, DASQS,
+     &     SSIG0(61,3),SSIGA(61,3),ALINT(61,3),NSQS
+
+      DIMENSION KK(6:14)
+      SAVE
+      DATA KK /3*2, 4*3, 2*1/
+
+      SQS = SQRT(2000.D0*E*0.937D0)                        ! GeV
+      AL = LOG10 (SQS)
+      L = abs(Linp)
+      IF (AL .LE. ASQSMIN)  THEN
+         FSIGHAIR = SSIGA(1,KK(L))
+      ELSE
+         T = (AL-ASQSMIN)/DASQS
+         J = INT(T)
+         J = MIN(J,NSQS-2)
+         T = T-DBLE(J)
+         FSIGHAIR = ((1.D0-T)*SSIGA(J+1,KK(L)) + T*SSIGA(J+2,KK(L)))
+      ENDIF     
+      RETURN
+      END
+
+C=======================================================================
+
+      SUBROUTINE INT_LEN_INI
+
+C-----------------------------------------------------------------------
+C...Initialize the interaction lengths from NUCLIB
+C-----------------------------------------------------------------------
+      SAVE
+      
+      CALL NUC_GEOM_INI                 ! nucleus profiles
+      CALL SIGMA_INI                    ! initialize cross sections
+
+      RETURN
+      END
+C=======================================================================
+
+      SUBROUTINE TRANSFONSHELL(ECM,XM1in,XM2in,XMAX,IMOD,P1,P2,LBAD)
+
+C-----------------------------------------------------------------------
+C     samples 2 --> 2 scattering that puts a particle on its mass shell
+C
+C     particle1 is along +z, always receives mass
+C     particle2 is along -z, mass only sampled if both aquire mass
+C
+C     DEPENDS: slope-parameter in s_difmass
+C
+C     INPUT: ECM : center-of-mass energy of scattering particles
+C            M1in  : mass of first particle
+C            M2in  : mass of second particle
+C            XMAX  : maximal mass that can be obtained
+C            IMOD  : remnant or diffraction mode
+C     
+C     OUTPUT: P1,P2 : final state 4vectors in two-particle c.m.   \FR'14
+C-----------------------------------------------------------------------
+      IMPLICIT NONE
+      
+c     external types
+      DOUBLE PRECISION ECM,XM1in,XM2in,XMAX,P1,P2
+      DIMENSION P1(5),P2(5)
+      INTEGER IMOD,LBAD
+
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NIPAR_max,NPAR_max
+      PARAMETER (NPAR_max=200,NIPAR_max=100)
+      DOUBLE PRECISION PAR
+      INTEGER IPAR
+      COMMON /S_CFLAFR/ PAR(NPAR_max), IPAR(NIPAR_max)
+      INTEGER ITRY, NREJ
+      COMMON /S_CNT/ ITRY(20), NREJ(20)
+      DOUBLE PRECISION AM,AM2
+      COMMON /S_MASS1/ AM(99), AM2(99)
+
+c     internal types
+      DOUBLE PRECISION XMB2,XMT2,AXMX,S,X1,X2,ALX,SLOP0,SLOPE,DB,
+     &     T,PTS,PZB2,PZT2,PT,PHI,XMB,XMT,S_RNDM,PTSWTCH
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+      DOUBLE PRECISION SLOP0_0,ASLOP,BSLOP
+      INTEGER II
+      SAVE
+      DATA SLOP0_0 /6.5D0/        ! b (slope_ for Mx**2 > 5 GeV**2
+      DATA ASLOP /31.10362D0/     ! fit to the slope parameter.
+      DATA BSLOP /-15.29012D0/
+
+      IF(NDEBUG.gt.3)
+     &     WRITE(LUN,*) ' TRANSFONSHELL: called with (Ecm,M1,M2,XMAX):',
+     &     ECM,XM1in,XM2in,XMAX
+      
+      XMB2 = XM1in**2
+      XMT2 = XM2in**2     
+
+      AXMX = LOG(XMAX)
+      
+      ITRY(6) = 0
+      LBAD = 1
+
+C     remnant pt parameters
+c     distribution is: exp(-slope*t)
+c     slope = aslop + bslop * log(Mx**2)
+c     (by default same as in diff.
+c      scale with paramterers 90 and 91)
+
+c     diff. pt paramters
+      ASLOP = PAR(133)
+      BSLOP = PAR(134)
+      SLOP0_0 = PAR(135)
+      
+      S = ECM*ECM
+      X1 = 1.D0-(XMT2-XMB2)/S
+      X2 = 2.D0-X1
+      IF(X2.LT.EPS5) RETURN
+
+ 60   ITRY(6) = ITRY(6) + 1
+      IF(ITRY(6).GT.NREJ(6)) RETURN
+c     sample transverse momentum
+      ALX = LOG(MAX(XMT2,XMB2))
+c     set slope of pt distribution
+      IF(IMOD.eq.0)THEN
+c     diffraction dissociation
+         SLOP0 = SLOP0_0*PAR(93)
+         SLOPE = MAX(SLOP0,ASLOP+BSLOP*ALX)
+         PTSWTCH = 1.D0
+
+      ELSEIF(IMOD.eq.1)THEN
+c     remnant excitation
+         IF(IPAR(57).eq.0)THEN
+            ALX = ALX-LOG(AM2(13))
+            SLOP0 = PAR(92)
+            DB = (SLOP0-PAR(90))/AXMX
+            SLOPE = MAX(SLOP0,PAR(90)+DB*PAR(91)*ALX)
+         ELSE
+            ALX = ALX-LOG(AM2(13))
+            SLOP0 = PAR(92)
+            SLOPE = MAX(SLOP0,PAR(90)+PAR(91)*ALX)
+         ENDIF
+         PTSWTCH = 1.D0
+
+      ELSEIF(IMOD.eq.3)THEN
+c     no pt
+         PTSWTCH = 0.D0
+         SLOPE = 1.D0
+      ENDIF
+      IF(ndebug.gt.3)
+     &     WRITE(LUN,*) ' TRANSFONSHELL: (SLOP0,SLOPE,log(M**2)):',
+     &     SLOP0,SLOPE,ALX
+      T = -DLOG(MAX(EPS10,S_RNDM(0)))/SLOPE
+      PTS = T*X1*PTSWTCH
+      PZB2 = S*0.5D0*0.5D0*X1*X1-XMB2-PTS
+      PZT2 = S*0.5D0*0.5D0*X2*X2-XMT2-PTS
+      IF(NDEBUG.gt.3) 
+     &     WRITE(LUN,*) ' TRANSFONSHELL: (PTS,PZB2,PZT2):',PTS,PZB2,PZT2
+c      IF (ABS(PZB2)-PZT2.GT.EPS10) GOTO 60
+      IF (PZB2.lt.0.D0.or.PZT2.LT.0.D0) GOTO 60
+      PT = DSQRT(PTS)
+      PHI = TWOPI*S_RNDM(1)
+      XMB = sqrt(XMB2)
+      XMT = sqrt(XMT2)
+      P2(4) = 0.5D0*ECM*X2
+      P2(3) = -DSQRT(PZT2)
+      P2(1) = PT*dCOS(PHI)
+      P2(2) = PT*dSIN(PHI)
+      P2(5) = XMT
+
+      P1(4) = 0.5D0*ECM*X1
+      P1(3) = DSQRT(PZB2)
+      do ii = 1,2
+         P1(ii) = -P2(ii)
+      enddo
+      P1(5) = XMB
+      IF(NDEBUG.gt.3) THEN
+          WRITE(LUN,*) ' TRANSFONSHELL: (P1):',(p1(ii),ii=1,5)
+          WRITE(LUN,*) ' TRANSFONSHELL: (P2):',(p2(ii),ii=1,5)
+       ENDIF
+      LBAD = 0
+      END
+C=======================================================================
+
+      SUBROUTINE SAMPLE_SEA (ALPHA,ASUP,XMASS,XMAX,X1,X2,PT)
+
+C-----------------------------------------------------------------------
+C.    Routine that samples the kinematical variables of a sea quark pair.
+C.  INPUT:  STR_mass_min : minimal string mass ** 2 = x1 * x2 * s
+C.          ASUP : large x suppression exponent
+C.  OUTPUT:  X1, X2, PT (GeV)                                   /FR'14
+C-----------------------------------------------------------------------
+Cf2py double precision, intent(in) :: ALPHA,ASUP,XMASS,XMAX
+Cf2py double precision, intent(out) :: X1,X2,PT
+      IMPLICIT NONE
+
+c     include COMMONs
+      INTEGER NCALL, NDEBUG, LUN
+      COMMON /S_DEBUG/ NCALL, NDEBUG, LUN
+      INTEGER NW_max
+      PARAMETER (NW_max = 20)
+C--------------------------------------------------------------------
+C     SIBYLL common blocks containing event information       \FR'14
+C--------------------------------------------------------------------
+
+C     EVENT INFO COMMON
+C     contains overall interaction properties, like
+C     SQS : center-of-mass energy
+C     S   :         "       "     squared
+C     PTmin : low pt cut of QCD cross section, 
+C             i.e. minimal pt of hard minijets
+C     Xmin : low-x bound for PDFs, 
+C            i.e. minimal momentum fraction of hard partons
+C     Zmin : logarithm of that
+C     KB : PID of beam hadron
+C     KT() : PID of target
+C     IAT : mass number of target
+      DOUBLE PRECISION SQS,S,PTmin,XMIN,ZMIN
+      INTEGER KB,IAT,KT
+      COMMON /S_RUN/ SQS, S, PTmin, XMIN, ZMIN, KB, KT(NW_max), IAT
+
+C--------------------------------------------------------------------
+C     SIBYLL utility common blocks containing constants       \FR'14
+C--------------------------------------------------------------------
+      DOUBLE PRECISION EPS3,EPS5,EPS8,EPS10
+      COMMON /SIB_EPS/ EPS3,EPS5,EPS8,EPS10
+
+      DOUBLE PRECISION PI,TWOPI,CMBARN
+      COMMON /SIB_CST/ PI,TWOPI,CMBARN
+
+      DOUBLE PRECISION FACN
+      DIMENSION FACN(3:10)
+      COMMON /SIB_FAC/ FACN
+
+c     external type declarations
+      DOUBLE PRECISION ALPHA,ASUP,XMASS,XMAX,X1,X2,PT
+
+c     internal types
+      DOUBLE PRECISION XMINA,XM2DIS,XR,SLOPE,S_RNDM,XRNDM
+      SAVE
+      
+      IF(ndebug.gt.3)
+     &    write(lun,*) ' SAMPLE_SEA: alpha,asup,qmass,xmax',
+     &    ALPHA,ASUP,XMASS,XMAX
+
+c     min. momentum fraction for massive quarks
+c     i.e. sample from 1/(x+x_min)
+      XMINA = 2.D0*XMASS/SQS
+      IF(ndebug.gt.3)
+     &     write(lun,*) ' SAMPLE_SEA: xmina:',XMINA
+c     exponent of large x suppression: (1-x)**b, b=0 or b>1
+      IF(ABS(ASUP).lt.EPS3)THEN
+c     b = 0 , no suppression, sample bare 1/(x+xmin)       
+         X1 = XM2DIS(XMINA,XMAX,ALPHA) ! ~(1/x)**alpha
+         X2 = XM2DIS(XMINA,XMAX,ALPHA) ! ~(1/x)**alpha
+         
+      ELSEIF(ASUP.ge.EPS3)THEN
+c     b >= 1 , sample bare (1-x)**b/(x+xmin)
+         SLOPE = MAX(ASUP,EPS3)
+c     quark
+ 100     X1 = XM2DIS(XMINA,XMAX,ALPHA) ! ~(1/x)**alpha
+         XR = LOG(1.D0-X1)-LOG(1.D0-XMINA)
+         XRNDM = S_RNDM(1)
+         IF(ndebug.gt.4)
+     &        write(lun,*) '  X1,XR,SLOPE*XR:',X1,XR,SLOPE*XR
+         if(SLOPE*XR.le.LOG(max(XRNDM,eps10))) goto 100
+
+c     anti-quark
+ 200     X2 = XM2DIS(XMINA,XMAX,ALPHA) ! ~(1/x)**alpha
+         XR = log(1.D0-X2)-log(1.D0-XMINA)
+         XRNDM = S_RNDM(2)
+         IF(ndebug.gt.4)
+     &        write(lun,*) '  X2,XR,SLOPE*XR,XRNDM:',
+     &    X2,XR,SLOPE*XR,XRNDM
+         if(SLOPE*XR.le.log(max(XRNDM,eps10))) goto 200     
+      ELSE
+         WRITE(LUN,*) ' SAMPLE_SEA: suppression exponent out of range.'
+         WRITE(LUN,*) ' SAMPLE_SEA: ASUP:',ASUP
+         STOP
+      ENDIF
+
+c     sample pt
+c     not yet implemented... to avoid problem with virtual partons
+      pt = 0.D0
+      IF(ndebug.gt.3)
+     &     write(lun,*) ' SAMPLE_SEA: X1,X2,PT:',X1,X2,PT
+
+      END
+C**********************************************
+C
+C     contains the src for pion and proton pdf
+C     parametrizations according to GRV
+C     ( see function head for refs. )
+C
+C     1 pion pdf
+C     2 proton pdf GRV98LO
+C
+C**********************************************
+
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*                                                                 *
+*         G R V - P I O N - P A R A M E T R I Z A T I O N S       *
+*                                                                 *
+*                 FOR A DETAILED EXPLANATION SEE :                *
+*              M. GLUECK, E.REYA, A.VOGT: DO-TH 91/16             *
+*                                                                 *
+*   THE PARAMETRIZATIONS ARE FITTED TO THE PARTON DISTRIBUTIONS   *
+*   FOR Q ** 2 BETWEEN MU ** 2 (=  0.25 / 0.30  GEV ** 2  IN LO   *
+*   / HO) AND  1.E8 GEV ** 2  AND FOR X BETWEEN  1.E-5  AND  1.   *
+*   REGIONS, WHERE THE DISTRIBUTION UNDER CONSIDERATION IS NEG-   *
+*   LIGIBLE, I.E. BELOW ABOUT 1.E-4, WERE EXCLUDED FROM THE FIT.  *
+*                                                                 *
+*              HEAVY QUARK THRESHOLDS  Q(H) = M(H) :              *
+*         M(C)  =  1.5,  M(B)  =  4.5,  M(T)  =  100  GEV         *
+*                                                                 *
+*      CORRESPONDING LAMBDA(F) VALUES FOR F ACTIVE FLAVOURS :     *
+*      LO :   LAMBDA(3)  =  0.232,   LAMBDA(4)  =  0.200,         *
+*             LAMBDA(5)  =  0.153,   LAMBDA(6)  =  0.082  GEV     *
+*      HO :   LAMBDA(3)  =  0.248,   LAMBDA(4)  =  0.200,         *
+*             LAMBDA(5)  =  0.131,   LAMBDA(6)  =  0.053  GEV     *
+*                                                                 *
+*   HO DISTRIBUTION REFER TO THE MS-BAR SCHEME OF BARDEEN ET AL.  *
+*                                                                 *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+C=======================================================================
+
+       SUBROUTINE DORPLO (X, Q2, VAP, GLP, QBP, CBP, BBP)
+
+C-----------------------------------------------------------------------
+       IMPLICIT DOUBLE PRECISION (A - Z)
+       SAVE
+
+       MU2  = 0.25D0
+       LAM2 = 0.232D0 * 0.232D0
+       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+       DS = SQRT (S)
+       S2 = S * S
+C...X * VALENCE :
+       NV  =  0.519D0 + 0.180D0 * S - 0.011D0 * S2
+       AKV =  0.499D0 - 0.027D0 * S
+       AGV =  0.381D0 - 0.419D0 * S
+       DV  =  0.367D0 + 0.563D0 * S
+       VAP =  DORFVP (X, NV, AKV, AGV, DV)
+C...X * GLUON :
+       ALG =  0.599D0
+       BEG =  1.263D0
+       AKG =  0.482D0 + 0.341D0 * DS
+       BKG =   0.0D0
+       AGG =  0.678D0 + 0.877D0 * S  - 0.175D0 * S2
+       BGG =  0.338D0 - 1.597D0 * S
+       CG  =   0.0D0  - 0.233D0 * S  + 0.406D0 * S2
+       DG  =  0.390D0 + 1.053D0 * S
+       EG  =  0.618D0 + 2.070D0 * S
+       ESG =  3.676D0
+       GLP =DORFGP(X, S, ALG, BEG, AKG, BKG, AGG, BGG, CG, DG, EG, ESG)
+C...X * QBAR (SU(3)-SYMMETRIC SEA) :
+       SL  =   0.0D0
+       ALS =   0.55D0
+       BES =   0.56D0
+       AKS =  2.538D0 - 0.763D0 * S
+       AGS = -0.748D0
+       BS  =  0.313D0 + 0.935D0 * S
+       DS  =  3.359D0
+       EST =  4.433D0 + 1.301D0 * S
+       ESS =   9.30D0 - 0.887D0 * S
+       QBP =  DORFQP (X, S, SL, ALS, BES, AKS, AGS, BS, DS, EST, ESS)
+C...X * CBAR = X * C :
+       SC  =  0.888D0
+       ALC =   1.02D0
+       BEC =   0.39D0
+       AKC =   0.0D0
+       AGC =   0.0D0
+       BC  =  1.008D0
+       DC  =  1.208D0 + 0.771D0 * S
+       EC  =   4.40D0 + 1.493D0 * S
+       ESC =  2.032D0 + 1.901D0 * S
+       CBP =  DORFQP (X, S, SC, ALC, BEC, AKC, AGC, BC, DC, EC, ESC)
+C...X * BBAR = X * B :
+       SBO =  1.351D0
+       ALB =   1.03D0
+       BEB =   0.39D0
+       AKB =   0.0D0
+       AGB =   0.0D0
+       BBO =   0.0D0
+       DB  =  0.697D0 + 0.855D0 * S
+       EB  =   4.51D0 + 1.490D0 * S
+       ESB =  3.056D0 + 1.694D0 * S
+       BBP =  DORFQP (X, S, SBO, ALB, BEB, AKB, AGB, BBO, DB, EB, ESB)
+       RETURN
+       END
+C
+C=======================================================================
+
+       SUBROUTINE DORPHO (X, Q2, VAP, GLP, QBP, CBP, BBP)
+
+C-----------------------------------------------------------------------
+       IMPLICIT DOUBLE PRECISION (A - Z)
+       SAVE
+
+       MU2  = 0.3D0
+       LAM2 = 0.248D0 * 0.248D0
+       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+       DS = SQRT (S)
+       S2 = S * S
+C...X * VALENCE :
+       NV  =  0.456D0 + 0.150D0 * DS + 0.112D0 * S - 0.019D0 * S2
+       AKV =  0.505D0 - 0.033D0 * S
+       AGV =  0.748D0 - 0.669D0 * DS - 0.133D0 * S
+       DV  =  0.365D0 + 0.197D0 * DS + 0.394D0 * S
+       VAP =  DORFVP (X, NV, AKV, AGV, DV)
+C...X * GLUON :
+       ALG =  1.096D0
+       BEG =  1.371D0
+       AKG =  0.437D0 - 0.689D0 * DS
+       BKG = -0.631D0
+       AGG =  1.324D0 - 0.441D0 * DS - 0.130D0 * S
+       BGG = -0.955D0 + 0.259D0 * S
+       CG  =  1.075D0 - 0.302D0 * S
+       DG  =  1.158D0 + 1.229D0 * S
+       EG  =   0.0D0  + 2.510D0 * S
+       ESG =  2.604D0 + 0.165D0 * S
+       GLP =DORFGP(X, S, ALG, BEG, AKG, BKG, AGG, BGG, CG, DG, EG, ESG)
+C...X * QBAR (SU(3)-SYMMETRIC SEA) :
+       SL  =   0.0D0
+       ALS =   0.85D0
+       BES =   0.96D0
+       AKS = -0.350D0 + 0.806D0 * S
+       AGS = -1.663D0
+       BS  =  3.148D0
+       DS  =  2.273D0 + 1.438D0 * S
+       EST =  3.214D0 + 1.545D0 * S
+       ESS =  1.341D0 + 1.938D0 * S
+       QBP =  DORFQP (X, S, SL, ALS, BES, AKS, AGS, BS, DS, EST, ESS)
+C...X * CBAR = X * C :
+       SC  =  0.820D0
+       ALC =   0.98D0
+       BEC =   0.0D0
+       AKC =   0.0D0  - 0.457D0 * S
+       AGC =   0.0D0
+       BC  =  -1.00D0 +  1.40 D0* S
+       DC  =  1.318D0 + 0.584D0 * S
+       EC  =   4.45D0 + 1.235D0 * S
+       ESC =  1.496D0 + 1.010D0 * S
+       CBP =  DORFQP (X, S, SC, ALC, BEC, AKC, AGC, BC, DC, EC, ESC)
+C...X * BBAR = X * B :
+       SBO =  1.297D0
+       ALB =   0.99D0
+       BEB =   0.0D0
+       AKB =   0.0D0  - 0.172D0 * S
+       AGB =   0.0D0
+       BBO =   0.0D0
+       DB  =  1.447D0 + 0.485D0 * S
+       EB  =   4.79D0 + 1.164D0 * S
+       ESB =  1.724D0 + 2.121D0 * S
+       BBP =  DORFQP (X, S, SBO, ALB, BEB, AKB, AGB, BBO, DB, EB, ESB)
+       RETURN
+       END
+C
+C=======================================================================
+
+       FUNCTION DORFVP (X, N, AK, AG, D)
+
+C-----------------------------------------------------------------------
+       IMPLICIT DOUBLE PRECISION (A - Z)
+       SAVE
+
+       DX = SQRT (X)
+       DORFVP = N * X**AK * (1.D0+ AG*DX) * (1.D0- X)**D
+       RETURN
+       END
+C
+C=======================================================================
+
+       FUNCTION DORFGP (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+
+C-----------------------------------------------------------------------
+       IMPLICIT DOUBLE PRECISION (A - Z)
+       SAVE
+
+       DX = SQRT (X)
+       LX = LOG (1.D0/X)
+       DORFGP = (X**AK * (AG + BG*DX + C*X) * LX**BK + S**AL
+     1       * EXP (-E + SQRT (ES * S**BE * LX))) * (1.D0- X)**D
+       RETURN
+       END
+C
+C=======================================================================
+
+       FUNCTION DORFQP (X, S, ST, AL, BE, AK, AG, B, D, E, ES)
+
+C-----------------------------------------------------------------------
+       IMPLICIT DOUBLE PRECISION (A - Z)
+       SAVE
+
+       DX = SQRT (X)
+       LX = LOG (1./X)
+       IF (S .LE. ST) THEN
+          DORFQP = 0.0D0
+       ELSE
+          DORFQP = (S-ST)**AL / LX**AK * (1.D0+AG*DX+B*X) * (1.D0- X)**D
+     1           * EXP(-E + SQRT(ES * S**BE * LX))
+       END IF
+       RETURN
+       END
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIB_DOR92FS(X,S,ST,AL,BE,AK,AG,B,D,E,ES)
+
+C-----------------------------------------------------------------------
+      IMPLICIT DOUBLE PRECISION (A - Z)
+      SAVE
+
+       DX = SQRT (X)
+       LX = LOG (1.D0/X)
+       IF (S .LE. ST) THEN
+         SIB_DOR92FS = 0.D0
+       ELSE
+         SIB_DOR92FS = (S-ST)**AL/LX**AK*(1.D0+AG*DX+B*X)*(1.D0-X)**D
+     1          * EXP (-E + SQRT (ES * S**BE * LX))
+       END IF
+
+      END
+
+C=======================================================================
+
+      DOUBLE PRECISION FUNCTION SIB_DBFINT(NARG,ARG,NA,ENT,TABLE)
+
+C-----------------------------------------------------------------------
+C
+C     routine based on CERN library E104
+C
+C     multi-dimensional interpolation routine, needed for PHOJET
+C     internal cross section tables and several PDF sets (GRV98 and AGL)
+C
+C     changed to avoid recursive function calls (R.Engel, 09/98)
+C
+C***********************************************************************
+      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      INTEGER NA(NARG), INDE(32)
+      DOUBLE PRECISION ARG(NARG),ENT(NARG),TABLE(*),WEIGHT(32)
+      SAVE
+
+
+      DBFINT     =  0.D0
+      SIB_DBFINT =  0.D0
+      IF(NARG .LT. 1  .OR.  NARG .GT. 5)  RETURN
+
+           LMAX      =  0
+           ISTEP     =  1
+           KNOTS     =  1
+           INDE(1)   =  1
+           WEIGHT(1) =  1.D0
+           DO 100    N  =  1, NARG
+              X     =  ARG(N)
+              NDIM  =  NA(N)
+              LOCA  =  LMAX
+              LMIN  =  LMAX + 1
+              LMAX  =  LMAX + NDIM
+              IF(NDIM .GT. 2)  GOTO 10
+              IF(NDIM .EQ. 1)  GOTO 100
+              H  =  X - ENT(LMIN)
+              IF(ABS(H) .LT. 0.D-8)  GOTO 90
+              ISHIFT  =  ISTEP
+              IF(ABS(X-ENT(LMIN+1)) .LT. 0.D-8)  GOTO 21
+              ISHIFT  =  0
+              ETA     =  H / (ENT(LMIN+1) - ENT(LMIN))
+              GOTO 30
+   10         LOCB  =  LMAX + 1
+   11         LOCC  =  (LOCA+LOCB) / 2
+              IF(X-ENT(LOCC))  12, 20, 13
+   12         LOCB  =  LOCC
+              GOTO 14
+   13         LOCA  =  LOCC
+   14         IF(LOCB-LOCA .GT. 1)  GOTO 11
+              LOCA    =  MIN ( MAX (LOCA,LMIN), LMAX-1 )
+              ISHIFT  =  (LOCA - LMIN) * ISTEP
+              ETA     =  (X - ENT(LOCA)) / (ENT(LOCA+1) - ENT(LOCA))
+              GOTO 30
+   20         ISHIFT  =  (LOCC - LMIN) * ISTEP
+   21         DO 22  K  =  1, KNOTS
+                 INDE(K)  =  INDE(K) + ISHIFT
+   22         CONTINUE
+              GOTO 90
+   30         DO 31  K  =  1, KNOTS
+                 INDE(K)         =  INDE(K) + ISHIFT
+                 INDE(K+KNOTS)   =  INDE(K) + ISTEP
+                 WEIGHT(K+KNOTS) =  WEIGHT(K) * ETA
+                 WEIGHT(K)       =  WEIGHT(K) - WEIGHT(K+KNOTS)
+   31         CONTINUE
+              KNOTS  =  2*KNOTS
+   90         ISTEP  =  ISTEP * NDIM
+  100      CONTINUE
+           DO 200    K  =  1, KNOTS
+              I  =  INDE(K)
+              DBFINT =  DBFINT + WEIGHT(K) * TABLE(I)
+  200      CONTINUE
+
+      SIB_DBFINT = DBFINT
+
+      END
+
+C=======================================================================
+
+      SUBROUTINE SIB_DOR98LO (Xinp, Q2inp, UV, DV, US, DS, SS, GL)
+
+C-----------------------------------------------------------------------
+C***********************************************************************
+C
+C   GRV98 parton densities, leading order set
+C
+C                  For a detailed explanation see
+C                   M. Glueck, E. Reya, A. Vogt :
+C        hep-ph/9806404  =  DO-TH 98/07  =  WUE-ITP-98-019
+C                  (To appear in Eur. Phys. J. C)
+C
+C   interpolation routine based on the original GRV98PA routine,
+C   adapted to define interpolation table as DATA statements
+C
+C                                                   (R.Engel, 09/98)
+C
+C
+C   INPUT:   X  =  Bjorken-x        (between  1.E-9 and 1.)
+C            Q2 =  scale in GeV**2  (between  0.8 and 1.E6)
+C
+C   OUTPUT:  UV = u - u(bar),  DV = d - d(bar),  US = u(bar),
+C            DS = d(bar),  SS = s = s(bar),  GL = gluon.
+C            Always x times the distribution is returned.
+C
+C******************************************************i****************
+      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
+      IMPLICIT INTEGER(I-N)
+
+      PARAMETER (NX=68, NQ=27, NARG=2)
+      DIMENSION XUVF(NX,NQ), XDVF(NX,NQ), XDEF(NX,NQ), XUDF(NX,NQ),
+     1          XSF(NX,NQ), XGF(NX,NQ),
+     2          XT(NARG), NA(NARG), ARRF(NX+NQ)
+
+      DIMENSION XUVF_L(NX*NQ), XDVF_L(NX*NQ), XDEF_L(NX*NQ),
+     &  XUDF_L(NX*NQ), XSF_L(NX*NQ), XGF_L(NX*NQ)
+
+      EQUIVALENCE (XUVF(1,1),XUVF_L(1))
+      EQUIVALENCE (XDVF(1,1),XDVF_L(1))
+      EQUIVALENCE (XDEF(1,1),XDEF_L(1))
+      EQUIVALENCE (XUDF(1,1),XUDF_L(1))
+      EQUIVALENCE (XSF(1,1),XSF_L(1))
+      EQUIVALENCE (XGF(1,1),XGF_L(1))
+      SAVE
+
+      DATA (ARRF(K),K=    1,   95) /
+     &  -2.0723D+01,-2.0135D+01,-1.9560D+01,-1.8983D+01,-1.8421D+01,
+     &  -1.7833D+01,-1.7258D+01,-1.6680D+01,-1.6118D+01,-1.5530D+01,
+     &  -1.4955D+01,-1.4378D+01,-1.3816D+01,-1.3479D+01,-1.3122D+01,
+     &  -1.2717D+01,-1.2311D+01,-1.1913D+01,-1.1513D+01,-1.1176D+01,
+     &  -1.0820D+01,-1.0414D+01,-1.0009D+01,-9.6108D+00,-9.2103D+00,
+     &  -8.8739D+00,-8.5172D+00,-8.1117D+00,-7.7063D+00,-7.3082D+00,
+     &  -6.9078D+00,-6.5713D+00,-6.2146D+00,-5.8091D+00,-5.4037D+00,
+     &  -5.0056D+00,-4.6052D+00,-4.2687D+00,-3.9120D+00,-3.5066D+00,
+     &  -3.1011D+00,-2.8134D+00,-2.5257D+00,-2.3026D+00,-2.0794D+00,
+     &  -1.8971D+00,-1.7430D+00,-1.6094D+00,-1.4917D+00,-1.3863D+00,
+     &  -1.2910D+00,-1.2040D+00,-1.1239D+00,-1.0498D+00,-9.8083D-01,
+     &  -9.1629D-01,-7.9851D-01,-6.9315D-01,-5.9784D-01,-5.1083D-01,
+     &  -4.3078D-01,-3.5667D-01,-2.8768D-01,-2.2314D-01,-1.6252D-01,
+     &  -1.0536D-01,-5.1293D-02, 0.0000D+00,-2.2314D-01, 0.0000D+00,
+     &   2.6236D-01, 5.8779D-01, 9.9325D-01, 1.3863D+00, 1.8563D+00,
+     &   2.3026D+00, 2.7726D+00, 3.2189D+00, 3.6889D+00, 4.1589D+00,
+     &   4.6052D+00, 5.1930D+00, 5.7683D+00, 6.3456D+00, 6.9078D+00,
+     &   7.4955D+00, 8.0709D+00, 8.6482D+00, 9.2103D+00, 9.9988D+00,
+     &   1.0736D+01, 1.1513D+01, 1.2301D+01, 1.3039D+01, 1.3816D+01/
+      DATA (XUVF_L(K),K=    1,  114) /
+     &2.3186D+00,2.2915D+00,2.2645D+00,2.2385D+00,2.2140D+00,2.1876D+00,
+     &2.1623D+00,2.1366D+00,2.1121D+00,2.0862D+00,2.0612D+00,2.0358D+00,
+     &2.0110D+00,1.9963D+00,1.9806D+00,1.9624D+00,1.9446D+00,1.9263D+00,
+     &1.9072D+00,1.8904D+00,1.8724D+00,1.8515D+00,1.8294D+00,1.8085D+00,
+     &1.7865D+00,1.7680D+00,1.7483D+00,1.7249D+00,1.6993D+00,1.6715D+00,
+     &1.6385D+00,1.6141D+00,1.5884D+00,1.5597D+00,1.5337D+00,1.5121D+00,
+     &1.4985D+00,1.4980D+00,1.5116D+00,1.5555D+00,1.6432D+00,1.7434D+00,
+     &1.8861D+00,2.0327D+00,2.2174D+00,2.4015D+00,2.5849D+00,2.7671D+00,
+     &2.9488D+00,3.1308D+00,3.3142D+00,3.4998D+00,3.6885D+00,3.8826D+00,
+     &4.0815D+00,4.2069D+00,4.5481D+00,4.8830D+00,5.2116D+00,5.5351D+00,
+     &5.8553D+00,6.1665D+00,6.4745D+00,6.7767D+00,7.0735D+00,7.3628D+00,
+     &7.6283D+00,0.0000D+00,2.3948D+00,2.3665D+00,2.3388D+00,2.3126D+00,
+     &2.2860D+00,2.2592D+00,2.2327D+00,2.2065D+00,2.1810D+00,2.1541D+00,
+     &2.1284D+00,2.1020D+00,2.0760D+00,2.0605D+00,2.0443D+00,2.0259D+00,
+     &2.0068D+00,1.9873D+00,1.9676D+00,1.9500D+00,1.9312D+00,1.9081D+00,
+     &1.8860D+00,1.8635D+00,1.8406D+00,1.8221D+00,1.8007D+00,1.7764D+00,
+     &1.7489D+00,1.7195D+00,1.6855D+00,1.6600D+00,1.6332D+00,1.6031D+00,
+     &1.5760D+00,1.5532D+00,1.5397D+00,1.5376D+00,1.5507D+00,1.5929D+00,
+     &1.6784D+00,1.7759D+00,1.9129D+00,2.0531D+00,2.2292D+00,2.4032D+00/
+      DATA (XUVF_L(K),K=  115,  228) /
+     &2.5752D+00,2.7449D+00,2.9135D+00,3.0810D+00,3.2491D+00,3.4183D+00,
+     &3.5898D+00,3.7650D+00,3.9437D+00,4.0443D+00,4.3402D+00,4.6262D+00,
+     &4.9009D+00,5.1640D+00,5.4156D+00,5.6530D+00,5.8759D+00,6.0779D+00,
+     &6.2540D+00,6.3836D+00,6.4062D+00,0.0000D+00,2.4808D+00,2.4513D+00,
+     &2.4236D+00,2.3948D+00,2.3680D+00,2.3397D+00,2.3127D+00,2.2853D+00,
+     &2.2585D+00,2.2307D+00,2.2026D+00,2.1762D+00,2.1490D+00,2.1332D+00,
+     &2.1164D+00,2.0964D+00,2.0766D+00,2.0565D+00,2.0353D+00,2.0171D+00,
+     &1.9969D+00,1.9738D+00,1.9501D+00,1.9258D+00,1.9026D+00,1.8821D+00,
+     &1.8594D+00,1.8330D+00,1.8046D+00,1.7734D+00,1.7378D+00,1.7112D+00,
+     &1.6829D+00,1.6514D+00,1.6228D+00,1.5994D+00,1.5840D+00,1.5808D+00,
+     &1.5927D+00,1.6334D+00,1.7157D+00,1.8093D+00,1.9406D+00,2.0735D+00,
+     &2.2394D+00,2.4019D+00,2.5615D+00,2.7178D+00,2.8718D+00,3.0246D+00,
+     &3.1766D+00,3.3284D+00,3.4820D+00,3.6370D+00,3.7952D+00,3.8716D+00,
+     &4.1225D+00,4.3580D+00,4.5798D+00,4.7847D+00,4.9730D+00,5.1395D+00,
+     &5.2832D+00,5.3945D+00,5.4634D+00,5.4612D+00,5.2940D+00,0.0000D+00,
+     &2.5823D+00,2.5527D+00,2.5226D+00,2.4928D+00,2.4650D+00,2.4358D+00,
+     &2.4071D+00,2.3783D+00,2.3505D+00,2.3212D+00,2.2928D+00,2.2636D+00,
+     &2.2360D+00,2.2185D+00,2.2005D+00,2.1801D+00,2.1591D+00,2.1376D+00,
+     &2.1153D+00,2.0960D+00,2.0747D+00,2.0505D+00,2.0247D+00,1.9991D+00/
+      DATA (XUVF_L(K),K=  229,  342) /
+     &1.9746D+00,1.9523D+00,1.9287D+00,1.9000D+00,1.8693D+00,1.8361D+00,
+     &1.7994D+00,1.7711D+00,1.7409D+00,1.7076D+00,1.6772D+00,1.6517D+00,
+     &1.6345D+00,1.6302D+00,1.6408D+00,1.6789D+00,1.7574D+00,1.8457D+00,
+     &1.9692D+00,2.0939D+00,2.2474D+00,2.3969D+00,2.5419D+00,2.6837D+00,
+     &2.8216D+00,2.9573D+00,3.0915D+00,3.2246D+00,3.3583D+00,3.4917D+00,
+     &3.6273D+00,3.6791D+00,3.8823D+00,4.0673D+00,4.2350D+00,4.3813D+00,
+     &4.5072D+00,4.6083D+00,4.6757D+00,4.7055D+00,4.6825D+00,4.5674D+00,
+     &4.2566D+00,0.0000D+00,2.7025D+00,2.6705D+00,2.6393D+00,2.6093D+00,
+     &2.5790D+00,2.5484D+00,2.5184D+00,2.4880D+00,2.4590D+00,2.4277D+00,
+     &2.3971D+00,2.3669D+00,2.3380D+00,2.3200D+00,2.3002D+00,2.2782D+00,
+     &2.2557D+00,2.2331D+00,2.2092D+00,2.1887D+00,2.1660D+00,2.1400D+00,
+     &2.1126D+00,2.0859D+00,2.0586D+00,2.0351D+00,2.0094D+00,1.9786D+00,
+     &1.9453D+00,1.9096D+00,1.8707D+00,1.8406D+00,1.8084D+00,1.7728D+00,
+     &1.7392D+00,1.7128D+00,1.6933D+00,1.6875D+00,1.6949D+00,1.7295D+00,
+     &1.8023D+00,1.8845D+00,1.9991D+00,2.1134D+00,2.2525D+00,2.3868D+00,
+     &2.5160D+00,2.6405D+00,2.7609D+00,2.8781D+00,2.9929D+00,3.1059D+00,
+     &3.2180D+00,3.3292D+00,3.4407D+00,3.4675D+00,3.6225D+00,3.7573D+00,
+     &3.8710D+00,3.9617D+00,4.0270D+00,4.0642D+00,4.0675D+00,4.0263D+00,
+     &3.9240D+00,3.7262D+00,3.3217D+00,0.0000D+00,2.8135D+00,2.7813D+00/
+      DATA (XUVF_L(K),K=  343,  456) /
+     &2.7489D+00,2.7166D+00,2.6850D+00,2.6527D+00,2.6212D+00,2.5898D+00,
+     &2.5592D+00,2.5267D+00,2.4943D+00,2.4636D+00,2.4320D+00,2.4129D+00,
+     &2.3929D+00,2.3695D+00,2.3453D+00,2.3211D+00,2.2959D+00,2.2740D+00,
+     &2.2496D+00,2.2221D+00,2.1931D+00,2.1653D+00,2.1356D+00,2.1112D+00,
+     &2.0830D+00,2.0503D+00,2.0147D+00,1.9766D+00,1.9361D+00,1.9037D+00,
+     &1.8696D+00,1.8318D+00,1.7966D+00,1.7677D+00,1.7459D+00,1.7378D+00,
+     &1.7430D+00,1.7738D+00,1.8407D+00,1.9169D+00,2.0223D+00,2.1273D+00,
+     &2.2537D+00,2.3742D+00,2.4892D+00,2.5990D+00,2.7043D+00,2.8056D+00,
+     &2.9038D+00,3.0000D+00,3.0936D+00,3.1864D+00,3.2782D+00,3.2867D+00,
+     &3.4021D+00,3.4971D+00,3.5691D+00,3.6188D+00,3.6422D+00,3.6335D+00,
+     &3.5908D+00,3.5036D+00,3.3552D+00,3.1085D+00,2.6634D+00,0.0000D+00,
+     &2.9406D+00,2.9062D+00,2.8726D+00,2.8385D+00,2.8060D+00,2.7720D+00,
+     &2.7392D+00,2.7058D+00,2.6734D+00,2.6399D+00,2.6057D+00,2.5722D+00,
+     &2.5390D+00,2.5194D+00,2.4975D+00,2.4728D+00,2.4471D+00,2.4216D+00,
+     &2.3945D+00,2.3712D+00,2.3458D+00,2.3152D+00,2.2856D+00,2.2545D+00,
+     &2.2237D+00,2.1966D+00,2.1672D+00,2.1312D+00,2.0926D+00,2.0521D+00,
+     &2.0093D+00,1.9748D+00,1.9384D+00,1.8975D+00,1.8601D+00,1.8275D+00,
+     &1.8036D+00,1.7924D+00,1.7948D+00,1.8206D+00,1.8808D+00,1.9499D+00,
+     &2.0450D+00,2.1390D+00,2.2512D+00,2.3570D+00,2.4564D+00,2.5501D+00/
+      DATA (XUVF_L(K),K=  457,  570) /
+     &2.6391D+00,2.7240D+00,2.8053D+00,2.8834D+00,2.9590D+00,3.0326D+00,
+     &3.1042D+00,3.0942D+00,3.1727D+00,3.2289D+00,3.2628D+00,3.2739D+00,
+     &3.2574D+00,3.2103D+00,3.1297D+00,3.0047D+00,2.8211D+00,2.5467D+00,
+     &2.0897D+00,0.0000D+00,3.0557D+00,3.0193D+00,2.9840D+00,2.9497D+00,
+     &2.9150D+00,2.8801D+00,2.8454D+00,2.8109D+00,2.7771D+00,2.7412D+00,
+     &2.7065D+00,2.6716D+00,2.6360D+00,2.6149D+00,2.5923D+00,2.5663D+00,
+     &2.5395D+00,2.5120D+00,2.4834D+00,2.4589D+00,2.4330D+00,2.4011D+00,
+     &2.3676D+00,2.3363D+00,2.3027D+00,2.2736D+00,2.2422D+00,2.2040D+00,
+     &2.1629D+00,2.1194D+00,2.0750D+00,2.0384D+00,1.9996D+00,1.9565D+00,
+     &1.9160D+00,1.8811D+00,1.8541D+00,1.8409D+00,1.8399D+00,1.8611D+00,
+     &1.9143D+00,1.9764D+00,2.0622D+00,2.1459D+00,2.2457D+00,2.3385D+00,
+     &2.4249D+00,2.5051D+00,2.5806D+00,2.6515D+00,2.7182D+00,2.7823D+00,
+     &2.8427D+00,2.9008D+00,2.9564D+00,2.9332D+00,2.9828D+00,3.0094D+00,
+     &3.0142D+00,2.9955D+00,2.9537D+00,2.8796D+00,2.7735D+00,2.6260D+00,
+     &2.4242D+00,2.1388D+00,1.6900D+00,0.0000D+00,3.1718D+00,3.1348D+00,
+     &3.0971D+00,3.0610D+00,3.0260D+00,2.9896D+00,2.9533D+00,2.9173D+00,
+     &2.8818D+00,2.8449D+00,2.8072D+00,2.7709D+00,2.7340D+00,2.7121D+00,
+     &2.6877D+00,2.6605D+00,2.6319D+00,2.6032D+00,2.5732D+00,2.5471D+00,
+     &2.5180D+00,2.4851D+00,2.4511D+00,2.4170D+00,2.3817D+00,2.3505D+00/
+      DATA (XUVF_L(K),K=  571,  684) /
+     &2.3172D+00,2.2762D+00,2.2328D+00,2.1868D+00,2.1400D+00,2.1012D+00,
+     &2.0601D+00,2.0136D+00,1.9704D+00,1.9335D+00,1.9035D+00,1.8868D+00,
+     &1.8827D+00,1.8990D+00,1.9452D+00,2.0005D+00,2.0763D+00,2.1507D+00,
+     &2.2377D+00,2.3179D+00,2.3917D+00,2.4592D+00,2.5218D+00,2.5799D+00,
+     &2.6336D+00,2.6843D+00,2.7314D+00,2.7753D+00,2.8166D+00,2.7824D+00,
+     &2.8054D+00,2.8081D+00,2.7893D+00,2.7474D+00,2.6818D+00,2.5888D+00,
+     &2.4646D+00,2.3032D+00,2.0902D+00,1.8025D+00,1.3740D+00,0.0000D+00,
+     &3.2793D+00,3.2385D+00,3.2014D+00,3.1643D+00,3.1270D+00,3.0888D+00,
+     &3.0517D+00,3.0141D+00,2.9773D+00,2.9392D+00,2.9009D+00,2.8610D+00,
+     &2.8230D+00,2.8000D+00,2.7754D+00,2.7459D+00,2.7163D+00,2.6858D+00,
+     &2.6545D+00,2.6270D+00,2.5962D+00,2.5617D+00,2.5271D+00,2.4903D+00,
+     &2.4527D+00,2.4207D+00,2.3851D+00,2.3421D+00,2.2960D+00,2.2476D+00,
+     &2.1987D+00,2.1578D+00,2.1146D+00,2.0670D+00,2.0202D+00,1.9796D+00,
+     &1.9468D+00,1.9282D+00,1.9203D+00,1.9319D+00,1.9712D+00,2.0197D+00,
+     &2.0872D+00,2.1524D+00,2.2288D+00,2.2981D+00,2.3606D+00,2.4177D+00,
+     &2.4692D+00,2.5159D+00,2.5591D+00,2.5981D+00,2.6339D+00,2.6669D+00,
+     &2.6962D+00,2.6528D+00,2.6566D+00,2.6395D+00,2.6028D+00,2.5437D+00,
+     &2.4622D+00,2.3555D+00,2.2200D+00,2.0488D+00,1.8335D+00,1.5506D+00,
+     &1.1442D+00,0.0000D+00,3.3868D+00,3.3470D+00,3.3075D+00,3.2689D+00/
+      DATA (XUVF_L(K),K=  685,  798) /
+     &3.2300D+00,3.1909D+00,3.1517D+00,3.1129D+00,3.0747D+00,3.0335D+00,
+     &2.9946D+00,2.9537D+00,2.9140D+00,2.8896D+00,2.8638D+00,2.8337D+00,
+     &2.8021D+00,2.7705D+00,2.7373D+00,2.7075D+00,2.6767D+00,2.6403D+00,
+     &2.6031D+00,2.5649D+00,2.5258D+00,2.4917D+00,2.4537D+00,2.4080D+00,
+     &2.3597D+00,2.3091D+00,2.2580D+00,2.2150D+00,2.1692D+00,2.1186D+00,
+     &2.0701D+00,2.0257D+00,1.9901D+00,1.9679D+00,1.9571D+00,1.9629D+00,
+     &1.9955D+00,2.0378D+00,2.0963D+00,2.1529D+00,2.2178D+00,2.2766D+00,
+     &2.3287D+00,2.3749D+00,2.4162D+00,2.4529D+00,2.4850D+00,2.5140D+00,
+     &2.5392D+00,2.5617D+00,2.5798D+00,2.5298D+00,2.5151D+00,2.4811D+00,
+     &2.4282D+00,2.3561D+00,2.2611D+00,2.1439D+00,2.0005D+00,1.8252D+00,
+     &1.6091D+00,1.3345D+00,9.5375D-01,0.0000D+00,3.4912D+00,3.4507D+00,
+     &3.4100D+00,3.3696D+00,3.3310D+00,3.2893D+00,3.2496D+00,3.2088D+00,
+     &3.1686D+00,3.1278D+00,3.0865D+00,3.0438D+00,3.0020D+00,2.9766D+00,
+     &2.9494D+00,2.9180D+00,2.8850D+00,2.8520D+00,2.8174D+00,2.7877D+00,
+     &2.7550D+00,2.7169D+00,2.6762D+00,2.6369D+00,2.5958D+00,2.5594D+00,
+     &2.5195D+00,2.4721D+00,2.4211D+00,2.3680D+00,2.3145D+00,2.2695D+00,
+     &2.2214D+00,2.1684D+00,2.1154D+00,2.0706D+00,2.0303D+00,2.0058D+00,
+     &1.9909D+00,1.9920D+00,2.0177D+00,2.0531D+00,2.1031D+00,2.1511D+00,
+     &2.2060D+00,2.2548D+00,2.2972D+00,2.3339D+00,2.3655D+00,2.3927D+00/
+      DATA (XUVF_L(K),K=  799,  912) /
+     &2.4159D+00,2.4357D+00,2.4520D+00,2.4644D+00,2.4735D+00,2.4171D+00,
+     &2.3878D+00,2.3397D+00,2.2743D+00,2.1907D+00,2.0861D+00,1.9611D+00,
+     &1.8128D+00,1.6351D+00,1.4227D+00,1.1584D+00,8.0371D-01,0.0000D+00,
+     &3.5892D+00,3.5473D+00,3.5055D+00,3.4637D+00,3.4230D+00,3.3809D+00,
+     &3.3396D+00,3.2976D+00,3.2571D+00,3.2126D+00,3.1696D+00,3.1272D+00,
+     &3.0840D+00,3.0569D+00,3.0286D+00,2.9959D+00,2.9619D+00,2.9273D+00,
+     &2.8910D+00,2.8598D+00,2.8266D+00,2.7863D+00,2.7448D+00,2.7029D+00,
+     &2.6598D+00,2.6219D+00,2.5804D+00,2.5305D+00,2.4773D+00,2.4214D+00,
+     &2.3662D+00,2.3191D+00,2.2698D+00,2.2126D+00,2.1577D+00,2.1092D+00,
+     &2.0674D+00,2.0393D+00,2.0210D+00,2.0173D+00,2.0367D+00,2.0654D+00,
+     &2.1076D+00,2.1485D+00,2.1942D+00,2.2338D+00,2.2678D+00,2.2959D+00,
+     &2.3193D+00,2.3386D+00,2.3539D+00,2.3660D+00,2.3738D+00,2.3789D+00,
+     &2.3799D+00,2.3197D+00,2.2776D+00,2.2186D+00,2.1426D+00,2.0495D+00,
+     &1.9397D+00,1.8097D+00,1.6583D+00,1.4814D+00,1.2736D+00,1.0200D+00,
+     &6.8880D-01,0.0000D+00,3.7157D+00,3.6699D+00,3.6275D+00,3.5842D+00,
+     &3.5420D+00,3.4972D+00,3.4542D+00,3.4107D+00,3.3678D+00,3.3234D+00,
+     &3.2774D+00,3.2332D+00,3.1870D+00,3.1600D+00,3.1297D+00,3.0952D+00,
+     &3.0595D+00,3.0231D+00,2.9850D+00,2.9534D+00,2.9160D+00,2.8740D+00,
+     &2.8312D+00,2.7872D+00,2.7408D+00,2.7014D+00,2.6568D+00,2.6045D+00/
+      DATA (XUVF_L(K),K=  913, 1026) /
+     &2.5481D+00,2.4895D+00,2.4315D+00,2.3817D+00,2.3283D+00,2.2697D+00,
+     &2.2106D+00,2.1591D+00,2.1128D+00,2.0807D+00,2.0578D+00,2.0477D+00,
+     &2.0583D+00,2.0796D+00,2.1122D+00,2.1433D+00,2.1777D+00,2.2069D+00,
+     &2.2299D+00,2.2483D+00,2.2618D+00,2.2718D+00,2.2778D+00,2.2803D+00,
+     &2.2797D+00,2.2749D+00,2.2668D+00,2.2019D+00,2.1468D+00,2.0761D+00,
+     &1.9902D+00,1.8883D+00,1.7711D+00,1.6370D+00,1.4847D+00,1.3103D+00,
+     &1.1091D+00,8.7047D-01,5.6856D-01,0.0000D+00,3.8327D+00,3.7877D+00,
+     &3.7424D+00,3.6981D+00,3.6540D+00,3.6083D+00,3.5637D+00,3.5184D+00,
+     &3.4753D+00,3.4271D+00,3.3800D+00,3.3325D+00,3.2860D+00,3.2564D+00,
+     &3.2258D+00,3.1893D+00,3.1519D+00,3.1135D+00,3.0738D+00,3.0389D+00,
+     &3.0010D+00,2.9580D+00,2.9118D+00,2.8654D+00,2.8178D+00,2.7758D+00,
+     &2.7289D+00,2.6738D+00,2.6146D+00,2.5530D+00,2.4924D+00,2.4399D+00,
+     &2.3845D+00,2.3213D+00,2.2605D+00,2.2040D+00,2.1540D+00,2.1186D+00,
+     &2.0908D+00,2.0749D+00,2.0772D+00,2.0914D+00,2.1145D+00,2.1368D+00,
+     &2.1613D+00,2.1804D+00,2.1941D+00,2.2037D+00,2.2088D+00,2.2101D+00,
+     &2.2083D+00,2.2031D+00,2.1942D+00,2.1826D+00,2.1665D+00,2.0987D+00,
+     &2.0321D+00,1.9516D+00,1.8571D+00,1.7497D+00,1.6281D+00,1.4923D+00,
+     &1.3406D+00,1.1697D+00,9.7635D-01,7.5209D-01,4.7638D-01,0.0000D+00,
+     &3.9497D+00,3.9009D+00,3.8555D+00,3.8080D+00,3.7630D+00,3.7163D+00/
+      DATA (XUVF_L(K),K= 1027, 1140) /
+     &3.6699D+00,3.6231D+00,3.5765D+00,3.5285D+00,3.4807D+00,3.4305D+00,
+     &3.3810D+00,3.3511D+00,3.3185D+00,3.2805D+00,3.2414D+00,3.2016D+00,
+     &3.1598D+00,3.1244D+00,3.0837D+00,3.0383D+00,2.9908D+00,2.9424D+00,
+     &2.8919D+00,2.8477D+00,2.7990D+00,2.7403D+00,2.6784D+00,2.6142D+00,
+     &2.5507D+00,2.4960D+00,2.4362D+00,2.3710D+00,2.3058D+00,2.2463D+00,
+     &2.1931D+00,2.1539D+00,2.1216D+00,2.0996D+00,2.0940D+00,2.1012D+00,
+     &2.1154D+00,2.1294D+00,2.1444D+00,2.1543D+00,2.1597D+00,2.1610D+00,
+     &2.1585D+00,2.1523D+00,2.1432D+00,2.1307D+00,2.1155D+00,2.0964D+00,
+     &2.0742D+00,2.0035D+00,1.9273D+00,1.8396D+00,1.7387D+00,1.6273D+00,
+     &1.5032D+00,1.3665D+00,1.2164D+00,1.0501D+00,8.6515D-01,6.5470D-01,
+     &4.0284D-01,0.0000D+00,4.0572D+00,4.0093D+00,3.9616D+00,3.9140D+00,
+     &3.8670D+00,3.8185D+00,3.7706D+00,3.7224D+00,3.6746D+00,3.6251D+00,
+     &3.5744D+00,3.5233D+00,3.4720D+00,3.4406D+00,3.4062D+00,3.3671D+00,
+     &3.3263D+00,3.2847D+00,3.2414D+00,3.2046D+00,3.1620D+00,3.1150D+00,
+     &3.0653D+00,3.0145D+00,2.9619D+00,2.9153D+00,2.8641D+00,2.8032D+00,
+     &2.7388D+00,2.6715D+00,2.6056D+00,2.5481D+00,2.4880D+00,2.4171D+00,
+     &2.3496D+00,2.2862D+00,2.2282D+00,2.1865D+00,2.1502D+00,2.1217D+00,
+     &2.1086D+00,2.1086D+00,2.1149D+00,2.1216D+00,2.1275D+00,2.1295D+00,
+     &2.1273D+00,2.1212D+00,2.1119D+00,2.0992D+00,2.0837D+00,2.0653D+00/
+      DATA (XUVF_L(K),K= 1141, 1254) /
+     &2.0442D+00,2.0194D+00,1.9912D+00,1.9193D+00,1.8359D+00,1.7412D+00,
+     &1.6366D+00,1.5214D+00,1.3956D+00,1.2594D+00,1.1115D+00,9.5033D-01,
+     &7.7356D-01,5.7585D-01,3.4506D-01,0.0000D+00,4.1710D+00,4.1201D+00,
+     &4.0712D+00,4.0213D+00,3.9730D+00,3.9228D+00,3.8734D+00,3.8233D+00,
+     &3.7726D+00,3.7217D+00,3.6699D+00,3.6160D+00,3.5640D+00,3.5311D+00,
+     &3.4960D+00,3.4549D+00,3.4121D+00,3.3689D+00,3.3237D+00,3.2848D+00,
+     &3.2425D+00,3.1917D+00,3.1399D+00,3.0866D+00,3.0319D+00,2.9838D+00,
+     &2.9306D+00,2.8668D+00,2.7992D+00,2.7291D+00,2.6605D+00,2.6007D+00,
+     &2.5375D+00,2.4631D+00,2.3919D+00,2.3261D+00,2.2643D+00,2.2183D+00,
+     &2.1772D+00,2.1426D+00,2.1222D+00,2.1155D+00,2.1135D+00,2.1130D+00,
+     &2.1102D+00,2.1039D+00,2.0941D+00,2.0815D+00,2.0652D+00,2.0466D+00,
+     &2.0251D+00,2.0014D+00,1.9746D+00,1.9450D+00,1.9116D+00,1.8381D+00,
+     &1.7481D+00,1.6484D+00,1.5404D+00,1.4225D+00,1.2963D+00,1.1611D+00,
+     &1.0161D+00,8.6047D-01,6.9193D-01,5.0691D-01,2.9581D-01,0.0000D+00,
+     &4.2754D+00,4.2238D+00,4.1737D+00,4.1233D+00,4.0740D+00,4.0219D+00,
+     &3.9713D+00,3.9196D+00,3.8675D+00,3.8160D+00,3.7618D+00,3.7060D+00,
+     &3.6510D+00,3.6173D+00,3.5808D+00,3.5380D+00,3.4941D+00,3.4493D+00,
+     &3.4027D+00,3.3623D+00,3.3163D+00,3.2647D+00,3.2114D+00,3.1563D+00,
+     &3.0989D+00,3.0489D+00,2.9929D+00,2.9263D+00,2.8563D+00,2.7837D+00/
+      DATA (XUVF_L(K),K= 1255, 1368) /
+     &2.7122D+00,2.6501D+00,2.5825D+00,2.5073D+00,2.4327D+00,2.3623D+00,
+     &2.2962D+00,2.2474D+00,2.2020D+00,2.1616D+00,2.1335D+00,2.1209D+00,
+     &2.1113D+00,2.1034D+00,2.0929D+00,2.0795D+00,2.0634D+00,2.0439D+00,
+     &2.0222D+00,1.9982D+00,1.9716D+00,1.9428D+00,1.9113D+00,1.8773D+00,
+     &1.8394D+00,1.7649D+00,1.6692D+00,1.5658D+00,1.4547D+00,1.3360D+00,
+     &1.2095D+00,1.0761D+00,9.3485D-01,7.8430D-01,6.2380D-01,4.5010D-01,
+     &2.5625D-01,0.0000D+00,4.3798D+00,4.3275D+00,4.2762D+00,4.2239D+00,
+     &4.1730D+00,4.1196D+00,4.0674D+00,4.0143D+00,3.9623D+00,3.9056D+00,
+     &3.8502D+00,3.7935D+00,3.7370D+00,3.7018D+00,3.6642D+00,3.6200D+00,
+     &3.5742D+00,3.5277D+00,3.4786D+00,3.4371D+00,3.3901D+00,3.3359D+00,
+     &3.2800D+00,3.2235D+00,3.1639D+00,3.1115D+00,3.0537D+00,2.9847D+00,
+     &2.9116D+00,2.8364D+00,2.7623D+00,2.6973D+00,2.6275D+00,2.5497D+00,
+     &2.4705D+00,2.3972D+00,2.3281D+00,2.2747D+00,2.2253D+00,2.1793D+00,
+     &2.1444D+00,2.1253D+00,2.1081D+00,2.0939D+00,2.0755D+00,2.0555D+00,
+     &2.0332D+00,2.0081D+00,1.9814D+00,1.9522D+00,1.9205D+00,1.8875D+00,
+     &1.8520D+00,1.8139D+00,1.7725D+00,1.6968D+00,1.5976D+00,1.4911D+00,
+     &1.3772D+00,1.2577D+00,1.1320D+00,1.0005D+00,8.6242D-01,7.1750D-01,
+     &5.6466D-01,4.0150D-01,2.2333D-01,0.0000D+00,4.4809D+00,4.4265D+00,
+     &4.3735D+00,4.3193D+00,4.2670D+00,4.2128D+00,4.1585D+00,4.1039D+00/
+      DATA (XUVF_L(K),K= 1369, 1482) /
+     &4.0509D+00,3.9928D+00,3.9351D+00,3.8769D+00,3.8180D+00,3.7821D+00,
+     &3.7434D+00,3.6974D+00,3.6501D+00,3.6019D+00,3.5513D+00,3.5093D+00,
+     &3.4594D+00,3.4035D+00,3.3456D+00,3.2870D+00,3.2250D+00,3.1715D+00,
+     &3.1110D+00,3.0396D+00,2.9639D+00,2.8863D+00,2.8096D+00,2.7429D+00,
+     &2.6702D+00,2.5884D+00,2.5068D+00,2.4296D+00,2.3560D+00,2.3003D+00,
+     &2.2464D+00,2.1951D+00,2.1530D+00,2.1283D+00,2.1045D+00,2.0843D+00,
+     &2.0591D+00,2.0328D+00,2.0047D+00,1.9749D+00,1.9429D+00,1.9096D+00,
+     &1.8740D+00,1.8369D+00,1.7978D+00,1.7560D+00,1.7116D+00,1.6360D+00,
+     &1.5322D+00,1.4233D+00,1.3084D+00,1.1885D+00,1.0637D+00,9.3449D-01,
+     &7.9961D-01,6.6020D-01,5.1453D-01,3.6103D-01,1.9641D-01,0.0000D+00,
+     &4.6169D+00,4.5608D+00,4.5060D+00,4.4504D+00,4.3960D+00,4.3395D+00,
+     &4.2837D+00,4.2262D+00,4.1710D+00,4.1106D+00,4.0517D+00,3.9908D+00,
+     &3.9300D+00,3.8920D+00,3.8509D+00,3.8030D+00,3.7538D+00,3.7035D+00,
+     &3.6494D+00,3.6055D+00,3.5556D+00,3.4966D+00,3.4351D+00,3.3738D+00,
+     &3.3090D+00,3.2518D+00,3.1888D+00,3.1141D+00,3.0348D+00,2.9533D+00,
+     &2.8730D+00,2.8020D+00,2.7264D+00,2.6400D+00,2.5551D+00,2.4732D+00,
+     &2.3941D+00,2.3329D+00,2.2742D+00,2.2147D+00,2.1644D+00,2.1317D+00,
+     &2.0986D+00,2.0700D+00,2.0363D+00,2.0021D+00,1.9668D+00,1.9299D+00,
+     &1.8922D+00,1.8532D+00,1.8125D+00,1.7704D+00,1.7270D+00,1.6809D+00/
+      DATA (XUVF_L(K),K= 1483, 1596) /
+     &1.6327D+00,1.5570D+00,1.4497D+00,1.3373D+00,1.2215D+00,1.1020D+00,
+     &9.7897D-01,8.5304D-01,7.2349D-01,5.9074D-01,4.5411D-01,3.1307D-01,
+     &1.6547D-01,0.0000D+00,4.7403D+00,4.6834D+00,4.6262D+00,4.5696D+00,
+     &4.5140D+00,4.4557D+00,4.3978D+00,4.3393D+00,4.2817D+00,4.2191D+00,
+     &4.1578D+00,4.0941D+00,4.0310D+00,3.9917D+00,3.9492D+00,3.8995D+00,
+     &3.8481D+00,3.7958D+00,3.7411D+00,3.6937D+00,3.6405D+00,3.5806D+00,
+     &3.5171D+00,3.4520D+00,3.3840D+00,3.3254D+00,3.2596D+00,3.1812D+00,
+     &3.0985D+00,3.0137D+00,2.9301D+00,2.8556D+00,2.7782D+00,2.6879D+00,
+     &2.5974D+00,2.5119D+00,2.4281D+00,2.3629D+00,2.2982D+00,2.2324D+00,
+     &2.1730D+00,2.1332D+00,2.0922D+00,2.0570D+00,2.0152D+00,1.9739D+00,
+     &1.9323D+00,1.8902D+00,1.8474D+00,1.8039D+00,1.7589D+00,1.7129D+00,
+     &1.6654D+00,1.6163D+00,1.5652D+00,1.4896D+00,1.3789D+00,1.2649D+00,
+     &1.1487D+00,1.0300D+00,9.0896D-01,7.8619D-01,6.6149D-01,5.3498D-01,
+     &4.0654D-01,2.7586D-01,1.4208D-01,0.0000D+00,4.8699D+00,4.8107D+00,
+     &4.7518D+00,4.6928D+00,4.6350D+00,4.5750D+00,4.5152D+00,4.4524D+00,
+     &4.3956D+00,4.3299D+00,4.2674D+00,4.2014D+00,4.1350D+00,4.0939D+00,
+     &4.0503D+00,3.9982D+00,3.9448D+00,3.8905D+00,3.8328D+00,3.7846D+00,
+     &3.7300D+00,3.6664D+00,3.5991D+00,3.5326D+00,3.4620D+00,3.3998D+00,
+     &3.3311D+00,3.2494D+00,3.1632D+00,3.0752D+00,2.9881D+00,2.9120D+00/
+      DATA (XUVF_L(K),K= 1597, 1710) /
+     &2.8299D+00,2.7339D+00,2.6398D+00,2.5493D+00,2.4611D+00,2.3911D+00,
+     &2.3215D+00,2.2482D+00,2.1812D+00,2.1342D+00,2.0854D+00,2.0427D+00,
+     &1.9932D+00,1.9453D+00,1.8978D+00,1.8504D+00,1.8030D+00,1.7545D+00,
+     &1.7059D+00,1.6565D+00,1.6056D+00,1.5535D+00,1.4989D+00,1.4245D+00,
+     &1.3108D+00,1.1959D+00,1.0798D+00,9.6219D-01,8.4358D-01,7.2422D-01,
+     &6.0451D-01,4.8425D-01,3.6380D-01,2.4286D-01,1.2189D-01,0.0000D+00,
+     &4.9964D+00,4.9356D+00,4.8755D+00,4.8147D+00,4.7550D+00,4.6935D+00,
+     &4.6315D+00,4.5697D+00,4.5062D+00,4.4406D+00,4.3752D+00,4.3061D+00,
+     &4.2380D+00,4.1962D+00,4.1500D+00,4.0963D+00,4.0405D+00,3.9832D+00,
+     &3.9245D+00,3.8728D+00,3.8172D+00,3.7504D+00,3.6811D+00,3.6108D+00,
+     &3.5381D+00,3.4734D+00,3.4018D+00,3.3164D+00,3.2269D+00,3.1352D+00,
+     &3.0446D+00,2.9657D+00,2.8794D+00,2.7800D+00,2.6821D+00,2.5867D+00,
+     &2.4930D+00,2.4184D+00,2.3433D+00,2.2634D+00,2.1877D+00,2.1342D+00,
+     &2.0772D+00,2.0279D+00,1.9713D+00,1.9172D+00,1.8642D+00,1.8120D+00,
+     &1.7600D+00,1.7076D+00,1.6553D+00,1.6027D+00,1.5491D+00,1.4938D+00,
+     &1.4374D+00,1.3637D+00,1.2481D+00,1.1325D+00,1.0166D+00,9.0047D-01,
+     &7.8428D-01,6.6889D-01,5.5381D-01,4.3953D-01,3.2652D-01,2.1461D-01,
+     &1.0498D-01,0.0000D+00,5.1134D+00,5.0511D+00,4.9886D+00,4.9273D+00,
+     &4.8660D+00,4.8016D+00,4.7382D+00,4.6744D+00,4.6106D+00,4.5420D+00/
+      DATA (XUVF_L(K),K= 1711, 1824) /
+     &4.4742D+00,4.4028D+00,4.3320D+00,4.2892D+00,4.2413D+00,4.1858D+00,
+     &4.1281D+00,4.0682D+00,4.0067D+00,3.9556D+00,3.8955D+00,3.8271D+00,
+     &3.7556D+00,3.6829D+00,3.6071D+00,3.5401D+00,3.4662D+00,3.3777D+00,
+     &3.2849D+00,3.1898D+00,3.0960D+00,3.0140D+00,2.9244D+00,2.8224D+00,
+     &2.7183D+00,2.6191D+00,2.5219D+00,2.4431D+00,2.3628D+00,2.2767D+00,
+     &2.1931D+00,2.1332D+00,2.0695D+00,2.0145D+00,1.9514D+00,1.8920D+00,
+     &1.8340D+00,1.7775D+00,1.7215D+00,1.6664D+00,1.6108D+00,1.5553D+00,
+     &1.4995D+00,1.4421D+00,1.3839D+00,1.3103D+00,1.1944D+00,1.0782D+00,
+     &9.6271D-01,8.4822D-01,7.3481D-01,6.2240D-01,5.1184D-01,4.0291D-01,
+     &2.9618D-01,1.9206D-01,9.1846D-02,0.0000D+00,5.2367D+00,5.1713D+00,
+     &5.1071D+00,5.0425D+00,4.9800D+00,4.9141D+00,4.8489D+00,4.7833D+00,
+     &4.7181D+00,4.6457D+00,4.5768D+00,4.5034D+00,4.4300D+00,4.3847D+00,
+     &4.3353D+00,4.2782D+00,4.2182D+00,4.1570D+00,4.0921D+00,4.0385D+00,
+     &3.9782D+00,3.9074D+00,3.8331D+00,3.7575D+00,3.6781D+00,3.6086D+00,
+     &3.5313D+00,3.4401D+00,3.3439D+00,3.2455D+00,3.1483D+00,3.0623D+00,
+     &2.9694D+00,2.8629D+00,2.7561D+00,2.6527D+00,2.5508D+00,2.4669D+00,
+     &2.3816D+00,2.2887D+00,2.1979D+00,2.1317D+00,2.0613D+00,2.0002D+00,
+     &1.9307D+00,1.8659D+00,1.8033D+00,1.7426D+00,1.6834D+00,1.6247D+00,
+     &1.5668D+00,1.5085D+00,1.4504D+00,1.3916D+00,1.3311D+00,1.2591D+00/
+      DATA (XUVF_L(K),K= 1825, 1836) /
+     &1.1415D+00,1.0256D+00,9.1107D-01,7.9840D-01,6.8736D-01,5.7902D-01,
+     &4.7260D-01,3.6895D-01,2.6838D-01,1.7161D-01,8.0264D-02,0.0000D+00/
+      DATA (XDVF_L(K),K=    1,  114) /
+     &1.4230D+00,1.4064D+00,1.3903D+00,1.3749D+00,1.3590D+00,1.3424D+00,
+     &1.3271D+00,1.3114D+00,1.2962D+00,1.2803D+00,1.2647D+00,1.2492D+00,
+     &1.2340D+00,1.2246D+00,1.2155D+00,1.2044D+00,1.1927D+00,1.1814D+00,
+     &1.1695D+00,1.1589D+00,1.1479D+00,1.1347D+00,1.1214D+00,1.1080D+00,
+     &1.0944D+00,1.0824D+00,1.0700D+00,1.0544D+00,1.0371D+00,1.0188D+00,
+     &9.9884D-01,9.8287D-01,9.6563D-01,9.4645D-01,9.2847D-01,9.1313D-01,
+     &9.0246D-01,8.9955D-01,9.0461D-01,9.2737D-01,9.7648D-01,1.0343D+00,
+     &1.1168D+00,1.2030D+00,1.3129D+00,1.4240D+00,1.5357D+00,1.6492D+00,
+     &1.7643D+00,1.8818D+00,2.0016D+00,2.1253D+00,2.2535D+00,2.3853D+00,
+     &2.5225D+00,2.5620D+00,2.7906D+00,3.0230D+00,3.2574D+00,3.4983D+00,
+     &3.7459D+00,4.0062D+00,4.2803D+00,4.5790D+00,4.9150D+00,5.3263D+00,
+     &5.9228D+00,0.0000D+00,1.4698D+00,1.4526D+00,1.4360D+00,1.4199D+00,
+     &1.4030D+00,1.3864D+00,1.3702D+00,1.3542D+00,1.3386D+00,1.3221D+00,
+     &1.3059D+00,1.2896D+00,1.2740D+00,1.2644D+00,1.2544D+00,1.2425D+00,
+     &1.2309D+00,1.2185D+00,1.2061D+00,1.1953D+00,1.1836D+00,1.1697D+00,
+     &1.1558D+00,1.1417D+00,1.1275D+00,1.1154D+00,1.1011D+00,1.0844D+00,
+     &1.0663D+00,1.0471D+00,1.0261D+00,1.0092D+00,9.9133D-01,9.7103D-01,
+     &9.5184D-01,9.3560D-01,9.2380D-01,9.1922D-01,9.2378D-01,9.4563D-01,
+     &9.9235D-01,1.0474D+00,1.1262D+00,1.2078D+00,1.3110D+00,1.4146D+00/
+      DATA (XDVF_L(K),K=  115,  228) /
+     &1.5192D+00,1.6241D+00,1.7298D+00,1.8375D+00,1.9471D+00,2.0592D+00,
+     &2.1741D+00,2.2925D+00,2.4144D+00,2.4425D+00,2.6407D+00,2.8375D+00,
+     &3.0361D+00,3.2345D+00,3.4343D+00,3.6388D+00,3.8488D+00,4.0682D+00,
+     &4.3043D+00,4.5737D+00,4.9280D+00,0.0000D+00,1.5226D+00,1.5047D+00,
+     &1.4874D+00,1.4702D+00,1.4530D+00,1.4363D+00,1.4193D+00,1.4023D+00,
+     &1.3860D+00,1.3690D+00,1.3520D+00,1.3351D+00,1.3190D+00,1.3083D+00,
+     &1.2983D+00,1.2858D+00,1.2733D+00,1.2606D+00,1.2476D+00,1.2362D+00,
+     &1.2237D+00,1.2092D+00,1.1943D+00,1.1795D+00,1.1645D+00,1.1509D+00,
+     &1.1365D+00,1.1185D+00,1.0994D+00,1.0784D+00,1.0566D+00,1.0388D+00,
+     &1.0195D+00,9.9801D-01,9.7765D-01,9.6019D-01,9.4712D-01,9.4158D-01,
+     &9.4524D-01,9.6454D-01,1.0088D+00,1.0604D+00,1.1346D+00,1.2112D+00,
+     &1.3076D+00,1.4038D+00,1.4995D+00,1.5957D+00,1.6918D+00,1.7888D+00,
+     &1.8877D+00,1.9877D+00,2.0896D+00,2.1940D+00,2.2999D+00,2.3168D+00,
+     &2.4844D+00,2.6497D+00,2.8098D+00,2.9678D+00,3.1219D+00,3.2743D+00,
+     &3.4260D+00,3.5742D+00,3.7237D+00,3.8717D+00,4.0300D+00,0.0000D+00,
+     &1.5849D+00,1.5662D+00,1.5482D+00,1.5298D+00,1.5130D+00,1.4944D+00,
+     &1.4769D+00,1.4593D+00,1.4423D+00,1.4243D+00,1.4066D+00,1.3894D+00,
+     &1.3720D+00,1.3607D+00,1.3499D+00,1.3366D+00,1.3237D+00,1.3101D+00,
+     &1.2963D+00,1.2840D+00,1.2709D+00,1.2553D+00,1.2396D+00,1.2232D+00/
+      DATA (XDVF_L(K),K=  229,  342) /
+     &1.2075D+00,1.1932D+00,1.1776D+00,1.1584D+00,1.1377D+00,1.1152D+00,
+     &1.0922D+00,1.0729D+00,1.0524D+00,1.0294D+00,1.0074D+00,9.8843D-01,
+     &9.7377D-01,9.6751D-01,9.6901D-01,9.8606D-01,1.0264D+00,1.0745D+00,
+     &1.1435D+00,1.2136D+00,1.3018D+00,1.3894D+00,1.4758D+00,1.5619D+00,
+     &1.6474D+00,1.7332D+00,1.8194D+00,1.9063D+00,1.9941D+00,2.0832D+00,
+     &2.1725D+00,2.1789D+00,2.3166D+00,2.4460D+00,2.5708D+00,2.6884D+00,
+     &2.7987D+00,2.9025D+00,2.9974D+00,3.0823D+00,3.1538D+00,3.2013D+00,
+     &3.2043D+00,0.0000D+00,1.6586D+00,1.6391D+00,1.6202D+00,1.6014D+00,
+     &1.5830D+00,1.5638D+00,1.5457D+00,1.5267D+00,1.5087D+00,1.4899D+00,
+     &1.4711D+00,1.4517D+00,1.4340D+00,1.4224D+00,1.4107D+00,1.3972D+00,
+     &1.3827D+00,1.3684D+00,1.3535D+00,1.3404D+00,1.3263D+00,1.3096D+00,
+     &1.2927D+00,1.2758D+00,1.2575D+00,1.2422D+00,1.2250D+00,1.2046D+00,
+     &1.1821D+00,1.1579D+00,1.1331D+00,1.1127D+00,1.0905D+00,1.0655D+00,
+     &1.0415D+00,1.0207D+00,1.0042D+00,9.9612D-01,9.9507D-01,1.0089D+00,
+     &1.0451D+00,1.0887D+00,1.1514D+00,1.2146D+00,1.2936D+00,1.3711D+00,
+     &1.4469D+00,1.5220D+00,1.5960D+00,1.6694D+00,1.7428D+00,1.8159D+00,
+     &1.8894D+00,1.9620D+00,2.0344D+00,2.0313D+00,2.1357D+00,2.2333D+00,
+     &2.3215D+00,2.4009D+00,2.4706D+00,2.5292D+00,2.5750D+00,2.6036D+00,
+     &2.6096D+00,2.5783D+00,2.4673D+00,0.0000D+00,1.7269D+00,1.7065D+00/
+      DATA (XDVF_L(K),K=  343,  456) /
+     &1.6866D+00,1.6676D+00,1.6480D+00,1.6279D+00,1.6089D+00,1.5891D+00,
+     &1.5701D+00,1.5502D+00,1.5307D+00,1.5113D+00,1.4910D+00,1.4799D+00,
+     &1.4673D+00,1.4526D+00,1.4373D+00,1.4221D+00,1.4060D+00,1.3922D+00,
+     &1.3771D+00,1.3596D+00,1.3414D+00,1.3234D+00,1.3045D+00,1.2879D+00,
+     &1.2689D+00,1.2468D+00,1.2227D+00,1.1966D+00,1.1706D+00,1.1487D+00,
+     &1.1248D+00,1.0980D+00,1.0724D+00,1.0495D+00,1.0310D+00,1.0212D+00,
+     &1.0181D+00,1.0291D+00,1.0609D+00,1.1002D+00,1.1563D+00,1.2136D+00,
+     &1.2840D+00,1.3528D+00,1.4201D+00,1.4854D+00,1.5492D+00,1.6125D+00,
+     &1.6751D+00,1.7368D+00,1.7981D+00,1.8579D+00,1.9157D+00,1.9057D+00,
+     &1.9875D+00,2.0577D+00,2.1190D+00,2.1700D+00,2.2094D+00,2.2370D+00,
+     &2.2484D+00,2.2403D+00,2.2047D+00,2.1261D+00,1.9567D+00,0.0000D+00,
+     &1.8047D+00,1.7833D+00,1.7626D+00,1.7418D+00,1.7220D+00,1.7009D+00,
+     &1.6810D+00,1.6603D+00,1.6403D+00,1.6193D+00,1.5986D+00,1.5775D+00,
+     &1.5570D+00,1.5441D+00,1.5309D+00,1.5156D+00,1.4991D+00,1.4828D+00,
+     &1.4658D+00,1.4510D+00,1.4350D+00,1.4160D+00,1.3966D+00,1.3772D+00,
+     &1.3565D+00,1.3386D+00,1.3184D+00,1.2942D+00,1.2680D+00,1.2404D+00,
+     &1.2125D+00,1.1887D+00,1.1631D+00,1.1342D+00,1.1064D+00,1.0813D+00,
+     &1.0608D+00,1.0480D+00,1.0426D+00,1.0500D+00,1.0774D+00,1.1111D+00,
+     &1.1608D+00,1.2107D+00,1.2719D+00,1.3315D+00,1.3886D+00,1.4445D+00/
+      DATA (XDVF_L(K),K=  457,  570) /
+     &1.4984D+00,1.5505D+00,1.6020D+00,1.6524D+00,1.7009D+00,1.7480D+00,
+     &1.7926D+00,1.7763D+00,1.8327D+00,1.8794D+00,1.9154D+00,1.9405D+00,
+     &1.9531D+00,1.9537D+00,1.9362D+00,1.8986D+00,1.8325D+00,1.7203D+00,
+     &1.5163D+00,0.0000D+00,1.8755D+00,1.8533D+00,1.8314D+00,1.8106D+00,
+     &1.7890D+00,1.7672D+00,1.7464D+00,1.7248D+00,1.7038D+00,1.6817D+00,
+     &1.6601D+00,1.6385D+00,1.6160D+00,1.6033D+00,1.5889D+00,1.5721D+00,
+     &1.5552D+00,1.5380D+00,1.5199D+00,1.5042D+00,1.4871D+00,1.4670D+00,
+     &1.4463D+00,1.4249D+00,1.4036D+00,1.3843D+00,1.3630D+00,1.3364D+00,
+     &1.3086D+00,1.2791D+00,1.2500D+00,1.2245D+00,1.1971D+00,1.1662D+00,
+     &1.1361D+00,1.1090D+00,1.0858D+00,1.0721D+00,1.0641D+00,1.0676D+00,
+     &1.0898D+00,1.1195D+00,1.1627D+00,1.2069D+00,1.2603D+00,1.3118D+00,
+     &1.3607D+00,1.4079D+00,1.4534D+00,1.4968D+00,1.5392D+00,1.5794D+00,
+     &1.6181D+00,1.6552D+00,1.6888D+00,1.6690D+00,1.7073D+00,1.7353D+00,
+     &1.7530D+00,1.7595D+00,1.7531D+00,1.7338D+00,1.6988D+00,1.6428D+00,
+     &1.5583D+00,1.4293D+00,1.2136D+00,0.0000D+00,1.9470D+00,1.9238D+00,
+     &1.9021D+00,1.8782D+00,1.8570D+00,1.8343D+00,1.8123D+00,1.7898D+00,
+     &1.7680D+00,1.7449D+00,1.7222D+00,1.6994D+00,1.6760D+00,1.6624D+00,
+     &1.6469D+00,1.6299D+00,1.6118D+00,1.5933D+00,1.5742D+00,1.5574D+00,
+     &1.5392D+00,1.5179D+00,1.4955D+00,1.4738D+00,1.4506D+00,1.4300D+00/
+      DATA (XDVF_L(K),K=  571,  684) /
+     &1.4069D+00,1.3792D+00,1.3492D+00,1.3178D+00,1.2868D+00,1.2597D+00,
+     &1.2307D+00,1.1976D+00,1.1654D+00,1.1363D+00,1.1108D+00,1.0945D+00,
+     &1.0840D+00,1.0845D+00,1.1017D+00,1.1268D+00,1.1637D+00,1.2016D+00,
+     &1.2473D+00,1.2910D+00,1.3324D+00,1.3719D+00,1.4090D+00,1.4450D+00,
+     &1.4784D+00,1.5109D+00,1.5404D+00,1.5681D+00,1.5925D+00,1.5689D+00,
+     &1.5916D+00,1.6043D+00,1.6067D+00,1.5981D+00,1.5779D+00,1.5449D+00,
+     &1.4949D+00,1.4262D+00,1.3303D+00,1.1932D+00,9.7657D-01,0.0000D+00,
+     &2.0122D+00,1.9881D+00,1.9640D+00,1.9418D+00,1.9190D+00,1.8954D+00,
+     &1.8721D+00,1.8492D+00,1.8262D+00,1.8024D+00,1.7784D+00,1.7550D+00,
+     &1.7300D+00,1.7157D+00,1.6999D+00,1.6818D+00,1.6627D+00,1.6435D+00,
+     &1.6233D+00,1.6058D+00,1.5866D+00,1.5643D+00,1.5417D+00,1.5178D+00,
+     &1.4926D+00,1.4705D+00,1.4465D+00,1.4174D+00,1.3856D+00,1.3527D+00,
+     &1.3198D+00,1.2914D+00,1.2605D+00,1.2257D+00,1.1915D+00,1.1601D+00,
+     &1.1326D+00,1.1142D+00,1.1016D+00,1.0982D+00,1.1114D+00,1.1321D+00,
+     &1.1637D+00,1.1958D+00,1.2352D+00,1.2722D+00,1.3071D+00,1.3397D+00,
+     &1.3704D+00,1.3995D+00,1.4267D+00,1.4516D+00,1.4736D+00,1.4942D+00,
+     &1.5100D+00,1.4848D+00,1.4955D+00,1.4964D+00,1.4873D+00,1.4675D+00,
+     &1.4366D+00,1.3933D+00,1.3349D+00,1.2585D+00,1.1565D+00,1.0171D+00,
+     &8.0601D-01,0.0000D+00,2.0789D+00,2.0539D+00,2.0294D+00,2.0053D+00/
+      DATA (XDVF_L(K),K=  685,  798) /
+     &1.9820D+00,1.9581D+00,1.9336D+00,1.9096D+00,1.8860D+00,1.8609D+00,
+     &1.8367D+00,1.8106D+00,1.7860D+00,1.7706D+00,1.7543D+00,1.7350D+00,
+     &1.7150D+00,1.6945D+00,1.6735D+00,1.6550D+00,1.6349D+00,1.6112D+00,
+     &1.5864D+00,1.5617D+00,1.5356D+00,1.5128D+00,1.4868D+00,1.4555D+00,
+     &1.4224D+00,1.3876D+00,1.3532D+00,1.3231D+00,1.2904D+00,1.2536D+00,
+     &1.2173D+00,1.1838D+00,1.1545D+00,1.1338D+00,1.1185D+00,1.1113D+00,
+     &1.1199D+00,1.1362D+00,1.1627D+00,1.1895D+00,1.2222D+00,1.2529D+00,
+     &1.2813D+00,1.3080D+00,1.3324D+00,1.3546D+00,1.3756D+00,1.3938D+00,
+     &1.4103D+00,1.4232D+00,1.4319D+00,1.4055D+00,1.4052D+00,1.3959D+00,
+     &1.3768D+00,1.3480D+00,1.3084D+00,1.2576D+00,1.1928D+00,1.1110D+00,
+     &1.0066D+00,8.6804D-01,6.6615D-01,0.0000D+00,2.1434D+00,2.1178D+00,
+     &2.0930D+00,2.0676D+00,2.0440D+00,2.0184D+00,1.9935D+00,1.9686D+00,
+     &1.9439D+00,1.9179D+00,1.8915D+00,1.8663D+00,1.8400D+00,1.8239D+00,
+     &1.8067D+00,1.7863D+00,1.7654D+00,1.7440D+00,1.7219D+00,1.7025D+00,
+     &1.6814D+00,1.6565D+00,1.6311D+00,1.6045D+00,1.5766D+00,1.5526D+00,
+     &1.5250D+00,1.4925D+00,1.4574D+00,1.4213D+00,1.3849D+00,1.3532D+00,
+     &1.3191D+00,1.2800D+00,1.2418D+00,1.2062D+00,1.1743D+00,1.1517D+00,
+     &1.1338D+00,1.1237D+00,1.1272D+00,1.1399D+00,1.1608D+00,1.1828D+00,
+     &1.2092D+00,1.2341D+00,1.2570D+00,1.2774D+00,1.2962D+00,1.3135D+00/
+      DATA (XDVF_L(K),K=  799,  912) /
+     &1.3280D+00,1.3406D+00,1.3511D+00,1.3588D+00,1.3613D+00,1.3335D+00,
+     &1.3246D+00,1.3067D+00,1.2801D+00,1.2441D+00,1.1985D+00,1.1418D+00,
+     &1.0724D+00,9.8806D-01,8.8293D-01,7.4746D-01,5.5665D-01,0.0000D+00,
+     &2.2035D+00,2.1769D+00,2.1514D+00,2.1259D+00,2.1000D+00,2.0743D+00,
+     &2.0488D+00,2.0226D+00,1.9973D+00,1.9702D+00,1.9428D+00,1.9166D+00,
+     &1.8890D+00,1.8729D+00,1.8548D+00,1.8337D+00,1.8116D+00,1.7895D+00,
+     &1.7662D+00,1.7461D+00,1.7239D+00,1.6980D+00,1.6714D+00,1.6436D+00,
+     &1.6146D+00,1.5889D+00,1.5604D+00,1.5266D+00,1.4895D+00,1.4515D+00,
+     &1.4138D+00,1.3806D+00,1.3448D+00,1.3040D+00,1.2638D+00,1.2261D+00,
+     &1.1920D+00,1.1669D+00,1.1469D+00,1.1341D+00,1.1335D+00,1.1420D+00,
+     &1.1583D+00,1.1760D+00,1.1971D+00,1.2168D+00,1.2343D+00,1.2501D+00,
+     &1.2640D+00,1.2762D+00,1.2866D+00,1.2942D+00,1.2996D+00,1.3020D+00,
+     &1.3003D+00,1.2725D+00,1.2557D+00,1.2312D+00,1.1982D+00,1.1569D+00,
+     &1.1068D+00,1.0465D+00,9.7460D-01,8.8884D-01,7.8459D-01,6.5333D-01,
+     &4.7359D-01,0.0000D+00,2.2800D+00,2.2524D+00,2.2256D+00,2.1987D+00,
+     &2.1730D+00,2.1459D+00,2.1192D+00,2.0922D+00,2.0656D+00,2.0374D+00,
+     &2.0100D+00,1.9802D+00,1.9520D+00,1.9346D+00,1.9156D+00,1.8937D+00,
+     &1.8706D+00,1.8475D+00,1.8228D+00,1.8017D+00,1.7783D+00,1.7509D+00,
+     &1.7221D+00,1.6937D+00,1.6627D+00,1.6354D+00,1.6050D+00,1.5688D+00/
+      DATA (XDVF_L(K),K=  913, 1026) /
+     &1.5301D+00,1.4898D+00,1.4503D+00,1.4150D+00,1.3772D+00,1.3339D+00,
+     &1.2911D+00,1.2510D+00,1.2138D+00,1.1866D+00,1.1637D+00,1.1458D+00,
+     &1.1403D+00,1.1441D+00,1.1548D+00,1.1669D+00,1.1817D+00,1.1950D+00,
+     &1.2065D+00,1.2163D+00,1.2249D+00,1.2313D+00,1.2355D+00,1.2379D+00,
+     &1.2379D+00,1.2348D+00,1.2275D+00,1.1987D+00,1.1744D+00,1.1427D+00,
+     &1.1035D+00,1.0570D+00,1.0018D+00,9.3862D-01,8.6494D-01,7.7913D-01,
+     &6.7747D-01,5.5266D-01,3.8741D-01,0.0000D+00,2.3524D+00,2.3243D+00,
+     &2.2963D+00,2.2689D+00,2.2420D+00,2.2137D+00,2.1858D+00,2.1579D+00,
+     &2.1301D+00,2.1011D+00,2.0718D+00,2.0424D+00,2.0120D+00,1.9937D+00,
+     &1.9743D+00,1.9509D+00,1.9267D+00,1.9020D+00,1.8763D+00,1.8541D+00,
+     &1.8295D+00,1.8006D+00,1.7713D+00,1.7402D+00,1.7077D+00,1.6794D+00,
+     &1.6475D+00,1.6087D+00,1.5679D+00,1.5259D+00,1.4840D+00,1.4470D+00,
+     &1.4072D+00,1.3615D+00,1.3163D+00,1.2738D+00,1.2336D+00,1.2045D+00,
+     &1.1783D+00,1.1563D+00,1.1459D+00,1.1457D+00,1.1504D+00,1.1577D+00,
+     &1.1662D+00,1.1742D+00,1.1807D+00,1.1857D+00,1.1886D+00,1.1902D+00,
+     &1.1899D+00,1.1878D+00,1.1830D+00,1.1751D+00,1.1633D+00,1.1345D+00,
+     &1.1039D+00,1.0667D+00,1.0230D+00,9.7228D-01,9.1417D-01,8.4905D-01,
+     &7.7478D-01,6.9004D-01,5.9155D-01,4.7371D-01,3.2191D-01,0.0000D+00,
+     &2.4233D+00,2.3947D+00,2.3653D+00,2.3365D+00,2.3090D+00,2.2800D+00/
+      DATA (XDVF_L(K),K= 1027, 1140) /
+     &2.2512D+00,2.2220D+00,2.1934D+00,2.1628D+00,2.1319D+00,2.1007D+00,
+     &2.0700D+00,2.0512D+00,2.0301D+00,2.0057D+00,1.9809D+00,1.9549D+00,
+     &1.9281D+00,1.9049D+00,1.8791D+00,1.8497D+00,1.8175D+00,1.7854D+00,
+     &1.7507D+00,1.7209D+00,1.6878D+00,1.6474D+00,1.6047D+00,1.5603D+00,
+     &1.5164D+00,1.4777D+00,1.4358D+00,1.3879D+00,1.3403D+00,1.2952D+00,
+     &1.2523D+00,1.2206D+00,1.1913D+00,1.1661D+00,1.1505D+00,1.1462D+00,
+     &1.1460D+00,1.1481D+00,1.1518D+00,1.1545D+00,1.1559D+00,1.1562D+00,
+     &1.1548D+00,1.1523D+00,1.1478D+00,1.1414D+00,1.1331D+00,1.1212D+00,
+     &1.1055D+00,1.0763D+00,1.0405D+00,9.9877D-01,9.5130D-01,8.9815D-01,
+     &8.3813D-01,7.7188D-01,6.9792D-01,6.1492D-01,5.2020D-01,4.0920D-01,
+     &2.7020D-01,0.0000D+00,2.4906D+00,2.4607D+00,2.4307D+00,2.4014D+00,
+     &2.3730D+00,2.3427D+00,2.3127D+00,2.2828D+00,2.2528D+00,2.2213D+00,
+     &2.1903D+00,2.1577D+00,2.1250D+00,2.1053D+00,2.0839D+00,2.0583D+00,
+     &2.0318D+00,2.0051D+00,1.9771D+00,1.9527D+00,1.9259D+00,1.8935D+00,
+     &1.8607D+00,1.8269D+00,1.7917D+00,1.7606D+00,1.7253D+00,1.6833D+00,
+     &1.6387D+00,1.5925D+00,1.5465D+00,1.5061D+00,1.4624D+00,1.4121D+00,
+     &1.3623D+00,1.3152D+00,1.2700D+00,1.2349D+00,1.2036D+00,1.1745D+00,
+     &1.1544D+00,1.1457D+00,1.1410D+00,1.1389D+00,1.1378D+00,1.1357D+00,
+     &1.1332D+00,1.1290D+00,1.1244D+00,1.1176D+00,1.1099D+00,1.0996D+00/
+      DATA (XDVF_L(K),K= 1141, 1254) /
+     &1.0875D+00,1.0729D+00,1.0538D+00,1.0249D+00,9.8511D-01,9.3994D-01,
+     &8.8948D-01,8.3410D-01,7.7332D-01,7.0681D-01,6.3377D-01,5.5280D-01,
+     &4.6214D-01,3.5755D-01,2.2965D-01,0.0000D+00,2.5589D+00,2.5291D+00,
+     &2.4979D+00,2.4676D+00,2.4370D+00,2.4060D+00,2.3753D+00,2.3443D+00,
+     &2.3135D+00,2.2809D+00,2.2486D+00,2.2146D+00,2.1810D+00,2.1602D+00,
+     &2.1376D+00,2.1114D+00,2.0841D+00,2.0557D+00,2.0265D+00,2.0011D+00,
+     &1.9730D+00,1.9392D+00,1.9055D+00,1.8697D+00,1.8327D+00,1.8003D+00,
+     &1.7635D+00,1.7197D+00,1.6727D+00,1.6246D+00,1.5770D+00,1.5346D+00,
+     &1.4890D+00,1.4363D+00,1.3841D+00,1.3341D+00,1.2867D+00,1.2492D+00,
+     &1.2151D+00,1.1824D+00,1.1578D+00,1.1451D+00,1.1356D+00,1.1298D+00,
+     &1.1233D+00,1.1169D+00,1.1105D+00,1.1027D+00,1.0940D+00,1.0840D+00,
+     &1.0726D+00,1.0592D+00,1.0444D+00,1.0265D+00,1.0045D+00,9.7613D-01,
+     &9.3249D-01,8.8451D-01,8.3193D-01,7.7510D-01,7.1373D-01,6.4749D-01,
+     &5.7554D-01,4.9725D-01,4.1072D-01,3.1254D-01,1.9551D-01,0.0000D+00,
+     &2.6244D+00,2.5927D+00,2.5615D+00,2.5299D+00,2.4990D+00,2.4671D+00,
+     &2.4356D+00,2.4034D+00,2.3717D+00,2.3377D+00,2.3034D+00,2.2689D+00,
+     &2.2340D+00,2.2126D+00,2.1892D+00,2.1616D+00,2.1331D+00,2.1040D+00,
+     &2.0736D+00,2.0471D+00,2.0180D+00,1.9830D+00,1.9472D+00,1.9112D+00,
+     &1.8717D+00,1.8375D+00,1.7996D+00,1.7538D+00,1.7053D+00,1.6548D+00/
+      DATA (XDVF_L(K),K= 1255, 1368) /
+     &1.6053D+00,1.5612D+00,1.5138D+00,1.4590D+00,1.4045D+00,1.3516D+00,
+     &1.3023D+00,1.2626D+00,1.2251D+00,1.1889D+00,1.1601D+00,1.1441D+00,
+     &1.1302D+00,1.1201D+00,1.1098D+00,1.0996D+00,1.0888D+00,1.0782D+00,
+     &1.0659D+00,1.0531D+00,1.0388D+00,1.0228D+00,1.0047D+00,9.8480D-01,
+     &9.6040D-01,9.3234D-01,8.8589D-01,8.3563D-01,7.8162D-01,7.2366D-01,
+     &6.6215D-01,5.9658D-01,5.2617D-01,4.5043D-01,3.6787D-01,2.7575D-01,
+     &1.6826D-01,0.0000D+00,2.6886D+00,2.6564D+00,2.6234D+00,2.5908D+00,
+     &2.5600D+00,2.5268D+00,2.4943D+00,2.4612D+00,2.4283D+00,2.3924D+00,
+     &2.3582D+00,2.3219D+00,2.2860D+00,2.2642D+00,2.2394D+00,2.2113D+00,
+     &2.1817D+00,2.1512D+00,2.1198D+00,2.0920D+00,2.0618D+00,2.0268D+00,
+     &1.9890D+00,1.9503D+00,1.9098D+00,1.8739D+00,1.8343D+00,1.7867D+00,
+     &1.7365D+00,1.6843D+00,1.6329D+00,1.5870D+00,1.5377D+00,1.4807D+00,
+     &1.4239D+00,1.3692D+00,1.3169D+00,1.2751D+00,1.2350D+00,1.1954D+00,
+     &1.1624D+00,1.1425D+00,1.1247D+00,1.1110D+00,1.0963D+00,1.0827D+00,
+     &1.0687D+00,1.0547D+00,1.0396D+00,1.0240D+00,1.0070D+00,9.8853D-01,
+     &9.6834D-01,9.4569D-01,9.1962D-01,8.9220D-01,8.4321D-01,7.9105D-01,
+     &7.3592D-01,6.7777D-01,6.1620D-01,5.5143D-01,4.8272D-01,4.0962D-01,
+     &3.3102D-01,2.4455D-01,1.4574D-01,0.0000D+00,2.7496D+00,2.7153D+00,
+     &2.6835D+00,2.6504D+00,2.6180D+00,2.5834D+00,2.5502D+00,2.5161D+00/
+      DATA (XDVF_L(K),K= 1369, 1482) /
+     &2.4824D+00,2.4466D+00,2.4095D+00,2.3736D+00,2.3360D+00,2.3124D+00,
+     &2.2875D+00,2.2580D+00,2.2274D+00,2.1960D+00,2.1631D+00,2.1347D+00,
+     &2.1032D+00,2.0670D+00,2.0277D+00,1.9882D+00,1.9458D+00,1.9086D+00,
+     &1.8675D+00,1.8179D+00,1.7658D+00,1.7122D+00,1.6586D+00,1.6112D+00,
+     &1.5600D+00,1.5010D+00,1.4420D+00,1.3855D+00,1.3294D+00,1.2858D+00,
+     &1.2435D+00,1.2006D+00,1.1641D+00,1.1410D+00,1.1193D+00,1.1023D+00,
+     &1.0837D+00,1.0664D+00,1.0496D+00,1.0329D+00,1.0157D+00,9.9745D-01,
+     &9.7803D-01,9.5735D-01,9.3539D-01,9.1075D-01,8.8302D-01,8.5608D-01,
+     &8.0509D-01,7.5168D-01,6.9580D-01,6.3743D-01,5.7619D-01,5.1233D-01,
+     &4.4547D-01,3.7496D-01,2.9995D-01,2.1862D-01,1.2745D-01,0.0000D+00,
+     &2.8331D+00,2.7978D+00,2.7648D+00,2.7299D+00,2.6960D+00,2.6609D+00,
+     &2.6263D+00,2.5910D+00,2.5561D+00,2.5197D+00,2.4802D+00,2.4424D+00,
+     &2.4030D+00,2.3791D+00,2.3526D+00,2.3216D+00,2.2897D+00,2.2570D+00,
+     &2.2225D+00,2.1925D+00,2.1595D+00,2.1199D+00,2.0799D+00,2.0383D+00,
+     &1.9938D+00,1.9551D+00,1.9121D+00,1.8601D+00,1.8054D+00,1.7494D+00,
+     &1.6932D+00,1.6435D+00,1.5898D+00,1.5280D+00,1.4659D+00,1.4056D+00,
+     &1.3471D+00,1.3010D+00,1.2550D+00,1.2078D+00,1.1652D+00,1.1383D+00,
+     &1.1114D+00,1.0902D+00,1.0668D+00,1.0451D+00,1.0248D+00,1.0039D+00,
+     &9.8353D-01,9.6205D-01,9.4076D-01,9.1705D-01,8.9229D-01,8.6577D-01/
+      DATA (XDVF_L(K),K= 1483, 1596) /
+     &8.3604D-01,8.0985D-01,7.5687D-01,7.0190D-01,6.4516D-01,5.8700D-01,
+     &5.2660D-01,4.6452D-01,3.9995D-01,3.3310D-01,2.6289D-01,1.8826D-01,
+     &1.0655D-01,0.0000D+00,2.9096D+00,2.8732D+00,2.8390D+00,2.8027D+00,
+     &2.7690D+00,2.7325D+00,2.6961D+00,2.6597D+00,2.6231D+00,2.5833D+00,
+     &2.5456D+00,2.5047D+00,2.4650D+00,2.4391D+00,2.4120D+00,2.3799D+00,
+     &2.3462D+00,2.3123D+00,2.2763D+00,2.2451D+00,2.2108D+00,2.1692D+00,
+     &2.1276D+00,2.0835D+00,2.0378D+00,1.9974D+00,1.9525D+00,1.8983D+00,
+     &1.8413D+00,1.7827D+00,1.7243D+00,1.6725D+00,1.6166D+00,1.5520D+00,
+     &1.4872D+00,1.4244D+00,1.3627D+00,1.3136D+00,1.2649D+00,1.2130D+00,
+     &1.1663D+00,1.1352D+00,1.1040D+00,1.0787D+00,1.0514D+00,1.0264D+00,
+     &1.0021D+00,9.7883D-01,9.5548D-01,9.3171D-01,9.0763D-01,8.8283D-01,
+     &8.5596D-01,8.2732D-01,7.9601D-01,7.7056D-01,7.1598D-01,6.6027D-01,
+     &6.0340D-01,5.4514D-01,4.8601D-01,4.2556D-01,3.6359D-01,2.9984D-01,
+     &2.3396D-01,1.6486D-01,9.0844D-02,0.0000D+00,2.9880D+00,2.9510D+00,
+     &2.9150D+00,2.8782D+00,2.8430D+00,2.8048D+00,2.7677D+00,2.7301D+00,
+     &2.6924D+00,2.6517D+00,2.6110D+00,2.5696D+00,2.5280D+00,2.5017D+00,
+     &2.4728D+00,2.4393D+00,2.4042D+00,2.3687D+00,2.3313D+00,2.2988D+00,
+     &2.2631D+00,2.2204D+00,2.1768D+00,2.1312D+00,2.0828D+00,2.0405D+00,
+     &1.9928D+00,1.9364D+00,1.8772D+00,1.8164D+00,1.7558D+00,1.7018D+00/
+      DATA (XDVF_L(K),K= 1597, 1710) /
+     &1.6434D+00,1.5762D+00,1.5084D+00,1.4432D+00,1.3783D+00,1.3261D+00,
+     &1.2741D+00,1.2182D+00,1.1669D+00,1.1315D+00,1.0961D+00,1.0671D+00,
+     &1.0360D+00,1.0071D+00,9.7992D-01,9.5371D-01,9.2801D-01,9.0200D-01,
+     &8.7588D-01,8.4862D-01,8.2038D-01,7.9020D-01,7.5770D-01,7.3298D-01,
+     &6.7721D-01,6.2090D-01,5.6394D-01,5.0631D-01,4.4841D-01,3.8970D-01,
+     &3.3019D-01,2.6973D-01,2.0791D-01,1.4420D-01,7.7416D-02,0.0000D+00,
+     &3.0661D+00,3.0288D+00,2.9911D+00,2.9537D+00,2.9160D+00,2.8778D+00,
+     &2.8392D+00,2.8000D+00,2.7610D+00,2.7200D+00,2.6782D+00,2.6345D+00,
+     &2.5900D+00,2.5625D+00,2.5329D+00,2.4982D+00,2.4617D+00,2.4247D+00,
+     &2.3857D+00,2.3518D+00,2.3145D+00,2.2697D+00,2.2245D+00,2.1764D+00,
+     &2.1269D+00,2.0819D+00,2.0331D+00,1.9746D+00,1.9126D+00,1.8497D+00,
+     &1.7862D+00,1.7303D+00,1.6696D+00,1.5995D+00,1.5285D+00,1.4608D+00,
+     &1.3929D+00,1.3377D+00,1.2826D+00,1.2228D+00,1.1669D+00,1.1279D+00,
+     &1.0882D+00,1.0555D+00,1.0205D+00,9.8876D-01,9.5876D-01,9.2969D-01,
+     &9.0171D-01,8.7356D-01,8.4551D-01,8.1668D-01,7.8701D-01,7.5564D-01,
+     &7.2196D-01,6.9797D-01,6.4121D-01,5.8469D-01,5.2810D-01,4.7131D-01,
+     &4.1460D-01,3.5783D-01,3.0063D-01,2.4338D-01,1.8544D-01,1.2660D-01,
+     &6.6270D-02,0.0000D+00,3.1379D+00,3.0995D+00,3.0600D+00,3.0213D+00,
+     &2.9840D+00,2.9442D+00,2.9047D+00,2.8641D+00,2.8239D+00,2.7813D+00/
+      DATA (XDVF_L(K),K= 1711, 1824) /
+     &2.7383D+00,2.6928D+00,2.6470D+00,2.6191D+00,2.5880D+00,2.5519D+00,
+     &2.5145D+00,2.4761D+00,2.4357D+00,2.4004D+00,2.3615D+00,2.3153D+00,
+     &2.2678D+00,2.2180D+00,2.1669D+00,2.1208D+00,2.0699D+00,2.0087D+00,
+     &1.9447D+00,1.8795D+00,1.8139D+00,1.7558D+00,1.6930D+00,1.6205D+00,
+     &1.5467D+00,1.4759D+00,1.4054D+00,1.3484D+00,1.2895D+00,1.2267D+00,
+     &1.1663D+00,1.1242D+00,1.0808D+00,1.0449D+00,1.0065D+00,9.7194D-01,
+     &9.3967D-01,9.0840D-01,8.7834D-01,8.4891D-01,8.1928D-01,7.8930D-01,
+     &7.5803D-01,7.2562D-01,6.9124D-01,6.6796D-01,6.1058D-01,5.5392D-01,
+     &4.9752D-01,4.4176D-01,3.8633D-01,3.3127D-01,2.7648D-01,2.2186D-01,
+     &1.6735D-01,1.1268D-01,5.7652D-02,0.0000D+00,3.2129D+00,3.1726D+00,
+     &3.1325D+00,3.0928D+00,3.0540D+00,3.0127D+00,2.9717D+00,2.9303D+00,
+     &2.8887D+00,2.8449D+00,2.8001D+00,2.7537D+00,2.7060D+00,2.6766D+00,
+     &2.6453D+00,2.6073D+00,2.5683D+00,2.5286D+00,2.4866D+00,2.4501D+00,
+     &2.4107D+00,2.3628D+00,2.3125D+00,2.2620D+00,2.2079D+00,2.1597D+00,
+     &2.1067D+00,2.0440D+00,1.9778D+00,1.9097D+00,1.8421D+00,1.7819D+00,
+     &1.7169D+00,1.6416D+00,1.5664D+00,1.4922D+00,1.4189D+00,1.3583D+00,
+     &1.2971D+00,1.2300D+00,1.1652D+00,1.1200D+00,1.0729D+00,1.0343D+00,
+     &9.9254D-01,9.5513D-01,9.2006D-01,8.8711D-01,8.5555D-01,8.2426D-01,
+     &7.9305D-01,7.6193D-01,7.2963D-01,6.9636D-01,6.6128D-01,6.3868D-01/
+      DATA (XDVF_L(K),K= 1825, 1836) /
+     &5.8093D-01,5.2428D-01,4.6858D-01,4.1372D-01,3.5972D-01,3.0648D-01,
+     &2.5392D-01,2.0208D-01,1.5083D-01,1.0018D-01,5.0068D-02,0.0000D+00/
+      DATA (XDEF_L(K),K=    1,  114) /
+     &4.3007D-01,4.2474D-01,4.1967D-01,4.1458D-01,4.0970D-01,4.0443D-01,
+     &3.9925D-01,3.9397D-01,3.8864D-01,3.8302D-01,3.7707D-01,3.7100D-01,
+     &3.6470D-01,3.6080D-01,3.5639D-01,3.5109D-01,3.4531D-01,3.3914D-01,
+     &3.3238D-01,3.2609D-01,3.1913D-01,3.1062D-01,3.0152D-01,2.9176D-01,
+     &2.8100D-01,2.7114D-01,2.5952D-01,2.4467D-01,2.2784D-01,2.0937D-01,
+     &1.9117D-01,1.7470D-01,1.5685D-01,1.3678D-01,1.1825D-01,1.0349D-01,
+     &9.4854D-02,9.5054D-02,1.0589D-01,1.3527D-01,1.8584D-01,2.3426D-01,
+     &2.9021D-01,3.3527D-01,3.7670D-01,4.0255D-01,4.1326D-01,4.0880D-01,
+     &3.8831D-01,3.5045D-01,2.9287D-01,2.1298D-01,1.0773D-01,0.0000D+00,
+     &0.0000D+00,2.0644D-01,1.5422D-01,1.0950D-01,7.3614D-02,4.6726D-02,
+     &2.7433D-02,1.4144D-02,6.5080D-03,2.4719D-03,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,4.4398D-01,4.3864D-01,4.3346D-01,4.2809D-01,
+     &4.2290D-01,4.1747D-01,4.1205D-01,4.0650D-01,4.0098D-01,3.9480D-01,
+     &3.8873D-01,3.8226D-01,3.7560D-01,3.7145D-01,3.6678D-01,3.6108D-01,
+     &3.5488D-01,3.4833D-01,3.4123D-01,3.3464D-01,3.2718D-01,3.1811D-01,
+     &3.0838D-01,2.9811D-01,2.8670D-01,2.7630D-01,2.6412D-01,2.4861D-01,
+     &2.3110D-01,2.1209D-01,1.9355D-01,1.7681D-01,1.5878D-01,1.3870D-01,
+     &1.2044D-01,1.0620D-01,9.8341D-02,9.9345D-02,1.1086D-01,1.4055D-01,
+     &1.9033D-01,2.3696D-01,2.8983D-01,3.3137D-01,3.6834D-01,3.8982D-01/
+      DATA (XDEF_L(K),K=  115,  228) /
+     &3.9672D-01,3.8896D-01,3.6609D-01,3.2678D-01,2.6933D-01,1.9181D-01,
+     &9.1683D-02,0.0000D+00,0.0000D+00,1.8955D-01,1.4041D-01,9.8873D-02,
+     &6.5928D-02,4.1462D-02,2.3905D-02,1.2324D-02,5.6113D-03,2.1050D-03,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,4.5980D-01,4.5420D-01,
+     &4.4884D-01,4.4319D-01,4.3780D-01,4.3208D-01,4.2642D-01,4.2053D-01,
+     &4.1457D-01,4.0824D-01,4.0181D-01,3.9484D-01,3.8780D-01,3.8328D-01,
+     &3.7831D-01,3.7223D-01,3.6559D-01,3.5853D-01,3.5072D-01,3.4400D-01,
+     &3.3590D-01,3.2633D-01,3.1598D-01,3.0508D-01,2.9301D-01,2.8197D-01,
+     &2.6915D-01,2.5289D-01,2.3470D-01,2.1511D-01,1.9623D-01,1.7918D-01,
+     &1.6098D-01,1.4092D-01,1.2294D-01,1.0928D-01,1.0224D-01,1.0401D-01,
+     &1.1623D-01,1.4620D-01,1.9488D-01,2.3948D-01,2.8894D-01,3.2681D-01,
+     &3.5905D-01,3.7613D-01,3.7908D-01,3.6817D-01,3.4299D-01,3.0266D-01,
+     &2.4596D-01,1.7115D-01,7.6792D-02,0.0000D+00,0.0000D+00,1.7267D-01,
+     &1.2670D-01,8.8446D-02,5.8458D-02,3.6380D-02,2.0551D-02,1.0608D-02,
+     &4.7732D-03,1.7670D-03,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &4.7845D-01,4.7258D-01,4.6687D-01,4.6107D-01,4.5540D-01,4.4938D-01,
+     &4.4336D-01,4.3728D-01,4.3070D-01,4.2403D-01,4.1702D-01,4.0968D-01,
+     &4.0210D-01,3.9723D-01,3.9181D-01,3.8522D-01,3.7808D-01,3.7047D-01,
+     &3.6211D-01,3.5469D-01,3.4619D-01,3.3582D-01,3.2478D-01,3.1314D-01/
+      DATA (XDEF_L(K),K=  229,  342) /
+     &3.0021D-01,2.8848D-01,2.7488D-01,2.5781D-01,2.3886D-01,2.1865D-01,
+     &1.9932D-01,1.8196D-01,1.6359D-01,1.4359D-01,1.2596D-01,1.1295D-01,
+     &1.0678D-01,1.0933D-01,1.2234D-01,1.5242D-01,1.9969D-01,2.4187D-01,
+     &2.8742D-01,3.2112D-01,3.4825D-01,3.6067D-01,3.5959D-01,3.4546D-01,
+     &3.1813D-01,2.7719D-01,2.2151D-01,1.5037D-01,6.2862D-02,0.0000D+00,
+     &0.0000D+00,1.5516D-01,1.1270D-01,7.7856D-02,5.0916D-02,3.1337D-02,
+     &1.7279D-02,8.9355D-03,3.9672D-03,1.4465D-03,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,5.0059D-01,4.9450D-01,4.8826D-01,4.8213D-01,
+     &4.7610D-01,4.6972D-01,4.6326D-01,4.5655D-01,4.4999D-01,4.4265D-01,
+     &4.3505D-01,4.2703D-01,4.1870D-01,4.1345D-01,4.0758D-01,4.0034D-01,
+     &3.9260D-01,3.8434D-01,3.7539D-01,3.6725D-01,3.5804D-01,3.4696D-01,
+     &3.3492D-01,3.2231D-01,3.0852D-01,2.9601D-01,2.8154D-01,2.6348D-01,
+     &2.4363D-01,2.2272D-01,2.0295D-01,1.8526D-01,1.6669D-01,1.4678D-01,
+     &1.2956D-01,1.1726D-01,1.1212D-01,1.1548D-01,1.2910D-01,1.5906D-01,
+     &2.0458D-01,2.4395D-01,2.8508D-01,3.1418D-01,3.3593D-01,3.4343D-01,
+     &3.3827D-01,3.2104D-01,2.9189D-01,2.5067D-01,1.9688D-01,1.3016D-01,
+     &5.0498D-02,0.0000D+00,0.0000D+00,1.3742D-01,9.8602D-02,6.7357D-02,
+     &4.3555D-02,2.6444D-02,1.4175D-02,7.3561D-03,3.2181D-03,1.1530D-03,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,5.2114D-01,5.1454D-01/
+      DATA (XDEF_L(K),K=  343,  456) /
+     &5.0806D-01,5.0160D-01,4.9520D-01,4.8843D-01,4.8165D-01,4.7456D-01,
+     &4.6738D-01,4.5962D-01,4.5149D-01,4.4293D-01,4.3400D-01,4.2833D-01,
+     &4.2194D-01,4.1420D-01,4.0580D-01,3.9678D-01,3.8741D-01,3.7848D-01,
+     &3.6878D-01,3.5682D-01,3.4416D-01,3.3062D-01,3.1602D-01,3.0269D-01,
+     &2.8749D-01,2.6857D-01,2.4798D-01,2.2641D-01,2.0626D-01,1.8828D-01,
+     &1.6960D-01,1.4976D-01,1.3293D-01,1.2126D-01,1.1684D-01,1.2099D-01,
+     &1.3505D-01,1.6471D-01,2.0841D-01,2.4521D-01,2.8248D-01,3.0770D-01,
+     &3.2484D-01,3.2845D-01,3.1999D-01,3.0047D-01,2.7030D-01,2.2924D-01,
+     &1.7739D-01,1.1482D-01,4.2174D-02,0.0000D+00,0.0000D+00,1.2330D-01,
+     &8.7586D-02,5.9211D-02,3.7890D-02,2.2733D-02,1.1877D-02,6.1865D-03,
+     &2.6713D-03,9.4247D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &5.4423D-01,5.3740D-01,5.3068D-01,5.2385D-01,5.1700D-01,5.0982D-01,
+     &5.0256D-01,4.9509D-01,4.8731D-01,4.7895D-01,4.7023D-01,4.6094D-01,
+     &4.5130D-01,4.4506D-01,4.3820D-01,4.2973D-01,4.2069D-01,4.1108D-01,
+     &4.0069D-01,3.9131D-01,3.8063D-01,3.6796D-01,3.5430D-01,3.3991D-01,
+     &3.2433D-01,3.1014D-01,2.9407D-01,2.7418D-01,2.5281D-01,2.3056D-01,
+     &2.0999D-01,1.9171D-01,1.7291D-01,1.5321D-01,1.3677D-01,1.2578D-01,
+     &1.2220D-01,1.2696D-01,1.4132D-01,1.7056D-01,2.1212D-01,2.4603D-01,
+     &2.7912D-01,3.0023D-01,3.1274D-01,3.1234D-01,3.0087D-01,2.7925D-01/
+      DATA (XDEF_L(K),K=  457,  570) /
+     &2.4820D-01,2.0782D-01,1.5841D-01,1.0056D-01,3.5470D-02,0.0000D+00,
+     &0.0000D+00,1.0941D-01,7.6864D-02,5.1391D-02,3.2506D-02,1.9250D-02,
+     &9.7741D-03,5.1192D-03,2.1775D-03,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,5.6542D-01,5.5814D-01,5.5101D-01,5.4385D-01,
+     &5.3670D-01,5.2913D-01,5.2140D-01,5.1352D-01,5.0533D-01,4.9639D-01,
+     &4.8702D-01,4.7710D-01,4.6670D-01,4.6011D-01,4.5270D-01,4.4365D-01,
+     &4.3394D-01,4.2383D-01,4.1271D-01,4.0253D-01,3.9137D-01,3.7783D-01,
+     &3.6325D-01,3.4810D-01,3.3163D-01,3.1674D-01,2.9988D-01,2.7922D-01,
+     &2.5706D-01,2.3429D-01,2.1333D-01,1.9484D-01,1.7592D-01,1.5634D-01,
+     &1.4028D-01,1.2985D-01,1.2692D-01,1.3218D-01,1.4678D-01,1.7535D-01,
+     &2.1492D-01,2.4628D-01,2.7582D-01,2.9349D-01,3.0215D-01,2.9865D-01,
+     &2.8479D-01,2.6176D-01,2.3025D-01,1.9073D-01,1.4372D-01,9.0030D-02,
+     &3.1431D-02,0.0000D+00,0.0000D+00,9.8561D-02,6.8571D-02,4.5400D-02,
+     &2.8439D-02,1.6650D-02,8.2414D-03,4.3377D-03,1.8226D-03,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,5.8660D-01,5.7912D-01,
+     &5.7170D-01,5.6412D-01,5.5660D-01,5.4858D-01,5.4040D-01,5.3194D-01,
+     &5.2336D-01,5.1383D-01,5.0381D-01,4.9326D-01,4.8220D-01,4.7515D-01,
+     &4.6719D-01,4.5756D-01,4.4719D-01,4.3619D-01,4.2441D-01,4.1376D-01,
+     &4.0188D-01,3.8750D-01,3.7220D-01,3.5617D-01,3.3884D-01,3.2317D-01/
+      DATA (XDEF_L(K),K=  571,  684) /
+     &3.0561D-01,2.8413D-01,2.6132D-01,2.3801D-01,2.1667D-01,1.9794D-01,
+     &1.7898D-01,1.5951D-01,1.4381D-01,1.3395D-01,1.3154D-01,1.3722D-01,
+     &1.5183D-01,1.7978D-01,2.1726D-01,2.4615D-01,2.7227D-01,2.8668D-01,
+     &2.9185D-01,2.8560D-01,2.6981D-01,2.4566D-01,2.1405D-01,1.7560D-01,
+     &1.3093D-01,8.1317D-02,2.8821D-02,0.0000D+00,0.0000D+00,8.9016D-02,
+     &6.1335D-02,4.0241D-02,2.4960D-02,1.4451D-02,6.9787D-03,3.6912D-03,
+     &1.5320D-03,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &6.0621D-01,5.9821D-01,5.9043D-01,5.8253D-01,5.7470D-01,5.6625D-01,
+     &5.5768D-01,5.4870D-01,5.3948D-01,5.2962D-01,5.1919D-01,5.0796D-01,
+     &4.9620D-01,4.8867D-01,4.8027D-01,4.7003D-01,4.5907D-01,4.4740D-01,
+     &4.3484D-01,4.2392D-01,4.1127D-01,3.9627D-01,3.8010D-01,3.6326D-01,
+     &3.4524D-01,3.2900D-01,3.1064D-01,2.8853D-01,2.6510D-01,2.4135D-01,
+     &2.1970D-01,2.0080D-01,1.8175D-01,1.6242D-01,1.4701D-01,1.3753D-01,
+     &1.3572D-01,1.4160D-01,1.5623D-01,1.8343D-01,2.1902D-01,2.4571D-01,
+     &2.6885D-01,2.8059D-01,2.8292D-01,2.7441D-01,2.5704D-01,2.3223D-01,
+     &2.0062D-01,1.6317D-01,1.2079D-01,7.4733D-02,2.7461D-02,0.0000D+00,
+     &0.0000D+00,8.1334D-02,5.5577D-02,3.6150D-02,2.2243D-02,1.2749D-02,
+     &6.0264D-03,3.2009D-03,1.3143D-03,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,6.2581D-01,6.1778D-01,6.0953D-01,6.0134D-01/
+      DATA (XDEF_L(K),K=  685,  798) /
+     &5.9310D-01,5.8428D-01,5.7523D-01,5.6587D-01,5.5625D-01,5.4565D-01,
+     &5.3457D-01,5.2280D-01,5.1030D-01,5.0236D-01,4.9350D-01,4.8267D-01,
+     &4.7104D-01,4.5899D-01,4.4560D-01,4.3381D-01,4.2066D-01,4.0485D-01,
+     &3.8801D-01,3.7047D-01,3.5165D-01,3.3476D-01,3.1574D-01,2.9293D-01,
+     &2.6889D-01,2.4469D-01,2.2279D-01,2.0369D-01,1.8458D-01,1.6537D-01,
+     &1.5025D-01,1.4125D-01,1.3980D-01,1.4589D-01,1.6046D-01,1.8686D-01,
+     &2.2052D-01,2.4502D-01,2.6530D-01,2.7444D-01,2.7406D-01,2.6361D-01,
+     &2.4491D-01,2.1954D-01,1.8819D-01,1.5193D-01,1.1170D-01,6.9146D-02,
+     &2.6829D-02,0.0000D+00,0.0000D+00,7.4387D-02,5.0398D-02,3.2529D-02,
+     &1.9840D-02,1.1260D-02,5.2109D-03,2.7796D-03,1.1291D-03,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,6.4510D-01,6.3663D-01,
+     &6.2809D-01,6.1948D-01,6.1090D-01,6.0165D-01,5.9256D-01,5.8263D-01,
+     &5.7237D-01,5.6121D-01,5.4960D-01,5.3710D-01,5.2390D-01,5.1555D-01,
+     &5.0615D-01,4.9474D-01,4.8273D-01,4.6980D-01,4.5603D-01,4.4343D-01,
+     &4.2983D-01,4.1325D-01,3.9561D-01,3.7731D-01,3.5765D-01,3.4017D-01,
+     &3.2063D-01,2.9709D-01,2.7258D-01,2.4795D-01,2.2572D-01,2.0647D-01,
+     &1.8735D-01,1.6824D-01,1.5339D-01,1.4470D-01,1.4366D-01,1.4990D-01,
+     &1.6437D-01,1.8986D-01,2.2169D-01,2.4408D-01,2.6175D-01,2.6863D-01,
+     &2.6585D-01,2.5363D-01,2.3397D-01,2.0813D-01,1.7714D-01,1.4205D-01/
+      DATA (XDEF_L(K),K=  799,  912) /
+     &1.0396D-01,6.4602D-02,2.6785D-02,0.0000D+00,0.0000D+00,6.8343D-02,
+     &4.5962D-02,2.9434D-02,1.7812D-02,1.0015D-02,4.5458D-03,2.4331D-03,
+     &9.7866D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &6.6281D-01,6.5407D-01,6.4523D-01,6.3631D-01,6.2740D-01,6.1775D-01,
+     &6.0821D-01,5.9770D-01,5.8724D-01,5.7535D-01,5.6321D-01,5.5021D-01,
+     &5.3640D-01,5.2763D-01,5.1775D-01,5.0583D-01,4.9310D-01,4.7946D-01,
+     &4.6520D-01,4.5225D-01,4.3811D-01,4.2074D-01,4.0247D-01,3.8355D-01,
+     &3.6315D-01,3.4516D-01,3.2502D-01,3.0091D-01,2.7589D-01,2.5090D-01,
+     &2.2842D-01,2.0903D-01,1.8987D-01,1.7087D-01,1.5631D-01,1.4790D-01,
+     &1.4709D-01,1.5345D-01,1.6771D-01,1.9243D-01,2.2253D-01,2.4307D-01,
+     &2.5846D-01,2.6327D-01,2.5857D-01,2.4493D-01,2.2441D-01,1.9832D-01,
+     &1.6773D-01,1.3380D-01,9.7606D-02,6.1077D-02,2.7123D-02,4.1687D-04,
+     &0.0000D+00,6.3316D-02,4.2290D-02,2.6899D-02,1.6166D-02,9.0143D-03,
+     &4.0214D-03,2.1587D-03,8.6042D-04,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,6.8558D-01,6.7623D-01,6.6716D-01,6.5776D-01,
+     &6.4840D-01,6.3825D-01,6.2778D-01,6.1697D-01,6.0589D-01,5.9350D-01,
+     &5.8071D-01,5.6677D-01,5.5220D-01,5.4293D-01,5.3246D-01,5.1980D-01,
+     &5.0630D-01,4.9221D-01,4.7690D-01,4.6348D-01,4.4839D-01,4.3024D-01,
+     &4.1112D-01,3.9125D-01,3.7016D-01,3.5134D-01,3.3054D-01,3.0571D-01/
+      DATA (XDEF_L(K),K=  913, 1026) /
+     &2.8005D-01,2.5463D-01,2.3186D-01,2.1230D-01,1.9311D-01,1.7422D-01,
+     &1.5985D-01,1.5187D-01,1.5138D-01,1.5783D-01,1.7178D-01,1.9543D-01,
+     &2.2331D-01,2.4162D-01,2.5415D-01,2.5666D-01,2.4964D-01,2.3438D-01,
+     &2.1293D-01,1.8681D-01,1.5680D-01,1.2430D-01,9.0488D-02,5.7352D-02,
+     &2.7942D-02,7.0995D-03,2.4780D-03,5.7612D-02,3.8138D-02,2.4057D-02,
+     &1.4329D-02,7.9111D-03,3.4566D-03,1.8603D-03,7.3347D-04,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,7.0709D-01,6.9744D-01,
+     &6.8784D-01,6.7803D-01,6.6830D-01,6.5763D-01,6.4678D-01,6.3540D-01,
+     &6.2360D-01,6.1071D-01,5.9715D-01,5.8240D-01,5.6710D-01,5.5722D-01,
+     &5.4625D-01,5.3291D-01,5.1856D-01,5.0380D-01,4.8797D-01,4.7363D-01,
+     &4.5801D-01,4.3900D-01,4.1917D-01,3.9846D-01,3.7656D-01,3.5717D-01,
+     &3.3564D-01,3.1017D-01,2.8397D-01,2.5816D-01,2.3508D-01,2.1538D-01,
+     &1.9615D-01,1.7737D-01,1.6324D-01,1.5559D-01,1.5535D-01,1.6175D-01,
+     &1.7537D-01,1.9793D-01,2.2384D-01,2.4005D-01,2.5009D-01,2.5051D-01,
+     &2.4150D-01,2.2495D-01,2.0291D-01,1.7668D-01,1.4739D-01,1.1625D-01,
+     &8.4583D-02,5.4470D-02,2.9013D-02,1.3147D-02,1.4553D-02,5.2777D-02,
+     &3.4672D-02,2.1686D-02,1.2821D-02,7.0105D-03,3.0093D-03,1.6226D-03,
+     &6.3321D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &7.2796D-01,7.1795D-01,7.0799D-01,6.9776D-01,6.8760D-01,6.7649D-01/
+      DATA (XDEF_L(K),K= 1027, 1140) /
+     &6.6523D-01,6.5299D-01,6.4099D-01,6.2720D-01,6.1289D-01,5.9763D-01,
+     &5.8140D-01,5.7108D-01,5.5954D-01,5.4555D-01,5.3082D-01,5.1501D-01,
+     &4.9841D-01,4.8352D-01,4.6718D-01,4.4758D-01,4.2678D-01,4.0543D-01,
+     &3.8267D-01,3.6267D-01,3.4052D-01,3.1445D-01,2.8771D-01,2.6154D-01,
+     &2.3817D-01,2.1835D-01,1.9910D-01,1.8043D-01,1.6662D-01,1.5905D-01,
+     &1.5900D-01,1.6548D-01,1.7871D-01,2.0015D-01,2.2403D-01,2.3835D-01,
+     &2.4610D-01,2.4469D-01,2.3394D-01,2.1634D-01,1.9372D-01,1.6761D-01,
+     &1.3910D-01,1.0920D-01,7.9530D-02,5.2165D-02,3.0250D-02,1.8723D-02,
+     &2.5275D-02,4.8575D-02,3.1676D-02,1.9677D-02,1.1540D-02,6.2533D-03,
+     &2.6411D-03,1.4253D-03,5.5072D-04,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,7.4788D-01,7.3751D-01,7.2708D-01,7.1644D-01,
+     &7.0580D-01,6.9430D-01,6.8256D-01,6.6975D-01,6.5712D-01,6.4276D-01,
+     &6.2791D-01,6.1180D-01,5.9490D-01,5.8409D-01,5.7199D-01,5.5739D-01,
+     &5.4166D-01,5.2544D-01,5.0821D-01,4.9288D-01,4.7590D-01,4.5544D-01,
+     &4.3393D-01,4.1178D-01,3.8837D-01,3.6775D-01,3.4513D-01,3.1844D-01,
+     &2.9125D-01,2.6472D-01,2.4110D-01,2.2115D-01,2.0189D-01,1.8330D-01,
+     &1.6955D-01,1.6237D-01,1.6243D-01,1.6875D-01,1.8164D-01,2.0201D-01,
+     &2.2410D-01,2.3665D-01,2.4236D-01,2.3927D-01,2.2710D-01,2.0852D-01,
+     &1.8563D-01,1.5962D-01,1.3170D-01,1.0314D-01,7.5292D-02,5.0347D-02/
+      DATA (XDEF_L(K),K= 1141, 1254) /
+     &3.1513D-02,2.3688D-02,3.4520D-02,4.4988D-02,2.9140D-02,1.7975D-02,
+     &1.0472D-02,5.6268D-03,2.3442D-03,1.2646D-03,4.8432D-04,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,7.6812D-01,7.5731D-01,
+     &7.4653D-01,7.3551D-01,7.2440D-01,7.1234D-01,6.9989D-01,6.8692D-01,
+     &6.7357D-01,6.5855D-01,6.4312D-01,6.2624D-01,6.0850D-01,5.9719D-01,
+     &5.8457D-01,5.6934D-01,5.5297D-01,5.3626D-01,5.1802D-01,5.0223D-01,
+     &4.8440D-01,4.6329D-01,4.4109D-01,4.1826D-01,3.9408D-01,3.7291D-01,
+     &3.4966D-01,3.2243D-01,2.9475D-01,2.6790D-01,2.4406D-01,2.2399D-01,
+     &2.0470D-01,1.8621D-01,1.7262D-01,1.6558D-01,1.6576D-01,1.7201D-01,
+     &1.8441D-01,2.0372D-01,2.2403D-01,2.3482D-01,2.3856D-01,2.3398D-01,
+     &2.2040D-01,2.0103D-01,1.7782D-01,1.5205D-01,1.2492D-01,9.7540D-02,
+     &7.1452D-02,4.8817D-02,3.2832D-02,2.8412D-02,4.3068D-02,4.1684D-02,
+     &2.6819D-02,1.6431D-02,9.5049D-03,5.0674D-03,2.0840D-03,1.1231D-03,
+     &4.2643D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &7.8709D-01,7.7617D-01,7.6509D-01,7.5353D-01,7.4210D-01,7.2955D-01,
+     &7.1666D-01,7.0326D-01,6.8906D-01,6.7364D-01,6.5743D-01,6.3988D-01,
+     &6.2140D-01,6.0962D-01,5.9645D-01,5.8083D-01,5.6382D-01,5.4630D-01,
+     &5.2750D-01,5.1079D-01,4.9267D-01,4.7078D-01,4.4780D-01,4.2425D-01,
+     &3.9948D-01,3.7773D-01,3.5398D-01,3.2619D-01,2.9811D-01,2.7093D-01/
+      DATA (XDEF_L(K),K= 1255, 1368) /
+     &2.4686D-01,2.2668D-01,2.0735D-01,1.8888D-01,1.7555D-01,1.6865D-01,
+     &1.6887D-01,1.7500D-01,1.8693D-01,2.0522D-01,2.2377D-01,2.3300D-01,
+     &2.3501D-01,2.2902D-01,2.1428D-01,1.9427D-01,1.7084D-01,1.4533D-01,
+     &1.1889D-01,9.2655D-02,6.8174D-02,4.7575D-02,3.4123D-02,3.2605D-02,
+     &5.0454D-02,3.8820D-02,2.4822D-02,1.5113D-02,8.6857D-03,4.5962D-03,
+     &1.8704D-03,1.0050D-03,3.7856D-04,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,8.0606D-01,7.9455D-01,7.8312D-01,7.7128D-01,
+     &7.5940D-01,7.4610D-01,7.3287D-01,7.1917D-01,7.0456D-01,6.8825D-01,
+     &6.7140D-01,6.5313D-01,6.3390D-01,6.2170D-01,6.0798D-01,5.9180D-01,
+     &5.7419D-01,5.5596D-01,5.3636D-01,5.1934D-01,5.0050D-01,4.7790D-01,
+     &4.5436D-01,4.3012D-01,4.0458D-01,3.8238D-01,3.5808D-01,3.2984D-01,
+     &3.0133D-01,2.7388D-01,2.4957D-01,2.2930D-01,2.0996D-01,1.9168D-01,
+     &1.7832D-01,1.7159D-01,1.7177D-01,1.7770D-01,1.8921D-01,2.0651D-01,
+     &2.2344D-01,2.3117D-01,2.3152D-01,2.2426D-01,2.0844D-01,1.8790D-01,
+     &1.6440D-01,1.3914D-01,1.1342D-01,8.8280D-02,6.5276D-02,4.6578D-02,
+     &3.5360D-02,3.6411D-02,5.6986D-02,3.6256D-02,2.3040D-02,1.3948D-02,
+     &7.9676D-03,4.1856D-03,1.6876D-03,9.0394D-04,3.3789D-04,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,8.2409D-01,8.1223D-01,
+     &8.0027D-01,7.8810D-01,7.7580D-01,7.6250D-01,7.4852D-01,7.3383D-01/
+      DATA (XDEF_L(K),K= 1369, 1482) /
+     &7.1879D-01,7.0216D-01,6.8466D-01,6.6571D-01,6.4580D-01,6.3303D-01,
+     &6.1887D-01,6.0161D-01,5.8362D-01,5.6485D-01,5.4490D-01,5.2736D-01,
+     &5.0788D-01,4.8465D-01,4.6048D-01,4.3549D-01,4.0949D-01,3.8678D-01,
+     &3.6198D-01,3.3325D-01,3.0435D-01,2.7667D-01,2.5212D-01,2.3179D-01,
+     &2.1241D-01,1.9410D-01,1.8093D-01,1.7428D-01,1.7445D-01,1.8022D-01,
+     &1.9133D-01,2.0758D-01,2.2299D-01,2.2941D-01,2.2823D-01,2.1990D-01,
+     &2.0319D-01,1.8211D-01,1.5852D-01,1.3371D-01,1.0856D-01,8.4430D-02,
+     &6.2776D-02,4.5758D-02,3.6514D-02,3.9756D-02,6.2597D-02,3.4019D-02,
+     &2.1502D-02,1.2943D-02,7.3506D-03,3.8366D-03,1.5351D-03,8.1923D-04,
+     &3.0383D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &8.4844D-01,8.3627D-01,8.2378D-01,8.1114D-01,7.9820D-01,7.8411D-01,
+     &7.6977D-01,7.5436D-01,7.3871D-01,7.2101D-01,7.0269D-01,6.8280D-01,
+     &6.6180D-01,6.4849D-01,6.3365D-01,6.1605D-01,5.9682D-01,5.7721D-01,
+     &5.5628D-01,5.3805D-01,5.1772D-01,4.9378D-01,4.6868D-01,4.4295D-01,
+     &4.1599D-01,3.9262D-01,3.6722D-01,3.3788D-01,3.0847D-01,2.8040D-01,
+     &2.5562D-01,2.3513D-01,2.1572D-01,1.9746D-01,1.8447D-01,1.7787D-01,
+     &1.7810D-01,1.8358D-01,1.9394D-01,2.0894D-01,2.2227D-01,2.2689D-01,
+     &2.2385D-01,2.1408D-01,1.9620D-01,1.7461D-01,1.5108D-01,1.2667D-01,
+     &1.0243D-01,7.9635D-02,5.9715D-02,4.4804D-02,3.7997D-02,4.3894D-02/
+      DATA (XDEF_L(K),K= 1483, 1596) /
+     &6.9391D-02,3.1240D-02,1.9603D-02,1.1712D-02,6.6036D-03,3.4150D-03,
+     &1.3549D-03,7.1812D-04,2.6373D-04,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,8.7089D-01,8.5819D-01,8.4535D-01,8.3207D-01,
+     &8.1860D-01,8.0424D-01,7.8877D-01,7.7320D-01,7.5642D-01,7.3822D-01,
+     &7.1895D-01,6.9816D-01,6.7640D-01,6.6244D-01,6.4701D-01,6.2817D-01,
+     &6.0860D-01,5.8841D-01,5.6672D-01,5.4767D-01,5.2667D-01,5.0182D-01,
+     &4.7599D-01,4.4955D-01,4.2190D-01,3.9787D-01,3.7196D-01,3.4199D-01,
+     &3.1220D-01,2.8382D-01,2.5874D-01,2.3816D-01,2.1874D-01,2.0063D-01,
+     &1.8770D-01,1.8107D-01,1.8121D-01,1.8638D-01,1.9622D-01,2.0994D-01,
+     &2.2156D-01,2.2456D-01,2.1986D-01,2.0892D-01,1.9015D-01,1.6817D-01,
+     &1.4465D-01,1.2070D-01,9.7309D-02,7.5665D-02,5.7234D-02,4.4095D-02,
+     &3.9289D-02,4.7307D-02,7.4739D-02,2.8958D-02,1.8046D-02,1.0716D-02,
+     &6.0010D-03,3.0801D-03,1.2145D-03,6.3833D-04,2.3251D-04,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,8.9366D-01,8.8058D-01,
+     &8.6727D-01,8.5353D-01,8.3950D-01,8.2436D-01,8.0890D-01,7.9205D-01,
+     &7.7476D-01,7.5566D-01,7.3557D-01,7.1393D-01,6.9120D-01,6.7672D-01,
+     &6.6059D-01,6.4145D-01,6.2086D-01,5.9962D-01,5.7716D-01,5.5756D-01,
+     &5.3584D-01,5.1022D-01,4.8344D-01,4.5615D-01,4.2780D-01,4.0320D-01,
+     &3.7671D-01,3.4621D-01,3.1594D-01,2.8727D-01,2.6196D-01,2.4126D-01/
+      DATA (XDEF_L(K),K= 1597, 1710) /
+     &2.2177D-01,2.0361D-01,1.9078D-01,1.8427D-01,1.8432D-01,1.8918D-01,
+     &1.9834D-01,2.1079D-01,2.2065D-01,2.2210D-01,2.1587D-01,2.0383D-01,
+     &1.8424D-01,1.6197D-01,1.3849D-01,1.1505D-01,9.2463D-02,7.1949D-02,
+     &5.4952D-02,4.3474D-02,4.0525D-02,5.0376D-02,7.9517D-02,2.6835D-02,
+     &1.6616D-02,9.8004D-03,5.4489D-03,2.7768D-03,1.0900D-03,5.6728D-04,
+     &2.0489D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &9.1643D-01,9.0298D-01,8.8901D-01,8.7472D-01,8.6030D-01,8.4449D-01,
+     &8.2790D-01,8.1090D-01,7.9278D-01,7.7287D-01,7.5201D-01,7.2942D-01,
+     &7.0580D-01,6.9067D-01,6.7395D-01,6.5357D-01,6.3264D-01,6.1082D-01,
+     &5.8728D-01,5.6718D-01,5.4478D-01,5.1825D-01,4.9075D-01,4.6263D-01,
+     &4.3360D-01,4.0844D-01,3.8138D-01,3.5032D-01,3.1963D-01,2.9065D-01,
+     &2.6511D-01,2.4428D-01,2.2479D-01,2.0678D-01,1.9385D-01,1.8735D-01,
+     &1.8722D-01,1.9179D-01,2.0029D-01,2.1158D-01,2.1961D-01,2.1971D-01,
+     &2.1194D-01,1.9894D-01,1.7862D-01,1.5609D-01,1.3279D-01,1.0972D-01,
+     &8.8007D-02,6.8578D-02,5.2905D-02,4.2942D-02,4.1624D-02,5.3065D-02,
+     &8.3506D-02,2.4920D-02,1.5334D-02,8.9876D-03,4.9653D-03,2.5112D-03,
+     &9.8300D-04,5.0629D-04,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,9.3762D-01,9.2325D-01,9.0916D-01,8.9432D-01,
+     &8.7930D-01,8.6312D-01,8.4579D-01,8.2807D-01,8.0954D-01,7.8866D-01/
+      DATA (XDEF_L(K),K= 1711, 1824) /
+     &7.6704D-01,7.4360D-01,7.1911D-01,7.0343D-01,6.8612D-01,6.6512D-01,
+     &6.4349D-01,6.2048D-01,5.9676D-01,5.7574D-01,5.5261D-01,5.2556D-01,
+     &4.9731D-01,4.6862D-01,4.3881D-01,4.1318D-01,3.8556D-01,3.5408D-01,
+     &3.2299D-01,2.9375D-01,2.6794D-01,2.4706D-01,2.2744D-01,2.0939D-01,
+     &1.9662D-01,1.9016D-01,1.8990D-01,1.9412D-01,2.0192D-01,2.1208D-01,
+     &2.1863D-01,2.1745D-01,2.0845D-01,1.9458D-01,1.7365D-01,1.5094D-01,
+     &1.2783D-01,1.0526D-01,8.4228D-02,6.5746D-02,5.1203D-02,4.2521D-02,
+     &4.2531D-02,5.5238D-02,8.6619D-02,2.3321D-02,1.4266D-02,8.3142D-03,
+     &4.5684D-03,2.2945D-03,8.9721D-04,4.5700D-04,0.0000D+00,0.0000D+00,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,9.5912D-01,9.4446D-01,
+     &9.2967D-01,9.1446D-01,8.9890D-01,8.8176D-01,8.6424D-01,8.4567D-01,
+     &8.2630D-01,8.0492D-01,7.8242D-01,7.5817D-01,7.3271D-01,7.1653D-01,
+     &6.9849D-01,6.7725D-01,6.5433D-01,6.3091D-01,6.0625D-01,5.8456D-01,
+     &5.6088D-01,5.3305D-01,5.0402D-01,4.7461D-01,4.4411D-01,4.1800D-01,
+     &3.8988D-01,3.5790D-01,3.2644D-01,2.9690D-01,2.7087D-01,2.4987D-01,
+     &2.3039D-01,2.1219D-01,1.9955D-01,1.9298D-01,1.9248D-01,1.9636D-01,
+     &2.0355D-01,2.1258D-01,2.1752D-01,2.1512D-01,2.0490D-01,1.9021D-01,
+     &1.6876D-01,1.4586D-01,1.2296D-01,1.0090D-01,8.0587D-02,6.3034D-02,
+     &4.9591D-02,4.2122D-02,4.3355D-02,5.7203D-02,8.9336D-02,2.1802D-02/
+      DATA (XDEF_L(K),K= 1825, 1836) /
+     &1.3258D-02,7.6843D-03,4.1967D-03,2.0952D-03,8.1932D-04,4.1202D-04,
+     &0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00,0.0000D+00/
+      DATA (XUDF_L(K),K=    1,  114) /
+     &1.8987D-02,1.9947D-02,2.0980D-02,2.2068D-02,2.3225D-02,2.4540D-02,
+     &2.5957D-02,2.7526D-02,2.9229D-02,3.1232D-02,3.3453D-02,3.6003D-02,
+     &3.8855D-02,4.0763D-02,4.2980D-02,4.5778D-02,4.8895D-02,5.2320D-02,
+     &5.6174D-02,5.9765D-02,6.3980D-02,6.9315D-02,7.5299D-02,8.1888D-02,
+     &8.9292D-02,9.6162D-02,1.0414D-01,1.1410D-01,1.2505D-01,1.3674D-01,
+     &1.4937D-01,1.6060D-01,1.7296D-01,1.8730D-01,2.0166D-01,2.1531D-01,
+     &2.2821D-01,2.3833D-01,2.4848D-01,2.6049D-01,2.7586D-01,2.9166D-01,
+     &3.1456D-01,3.3942D-01,3.7230D-01,4.0597D-01,4.3921D-01,4.7071D-01,
+     &4.9846D-01,5.2057D-01,5.3433D-01,5.3610D-01,5.2141D-01,4.8433D-01,
+     &4.1719D-01,6.3794D-01,6.7411D-01,7.2040D-01,7.8812D-01,8.9495D-01,
+     &1.0702D+00,1.3629D+00,1.8763D+00,2.8399D+00,4.8968D+00,1.0506D+01,
+     &3.7793D+01,0.0000D+00,3.1111D-02,3.2336D-02,3.3580D-02,3.4906D-02,
+     &3.6247D-02,3.7773D-02,3.9337D-02,4.1056D-02,4.2876D-02,4.5001D-02,
+     &4.7299D-02,4.9897D-02,5.2761D-02,5.4666D-02,5.6867D-02,5.9620D-02,
+     &6.2679D-02,6.6018D-02,6.9775D-02,7.3275D-02,7.7353D-02,8.2522D-02,
+     &8.8327D-02,9.4694D-02,1.0184D-01,1.0846D-01,1.1615D-01,1.2575D-01,
+     &1.3628D-01,1.4752D-01,1.5964D-01,1.7036D-01,1.8215D-01,1.9580D-01,
+     &2.0933D-01,2.2213D-01,2.3411D-01,2.4341D-01,2.5275D-01,2.6387D-01,
+     &2.7831D-01,2.9333D-01,3.1510D-01,3.3876D-01,3.6995D-01,4.0170D-01/
+      DATA (XUDF_L(K),K=  115,  228) /
+     &4.3298D-01,4.6172D-01,4.8742D-01,5.0700D-01,5.1856D-01,5.1873D-01,
+     &5.0352D-01,4.6746D-01,4.0418D-01,6.1801D-01,6.5339D-01,6.9923D-01,
+     &7.6627D-01,8.7125D-01,1.0408D+00,1.3199D+00,1.8020D+00,2.6920D+00,
+     &4.5574D+00,9.5310D+00,3.2877D+01,0.0000D+00,5.1176D-02,5.2640D-02,
+     &5.4100D-02,5.5603D-02,5.7095D-02,5.8737D-02,6.0416D-02,6.2154D-02,
+     &6.4016D-02,6.6046D-02,6.8273D-02,7.0765D-02,7.3444D-02,7.5182D-02,
+     &7.7263D-02,7.9781D-02,8.2626D-02,8.5707D-02,8.9176D-02,9.2402D-02,
+     &9.6182D-02,1.0098D-01,1.0635D-01,1.1227D-01,1.1893D-01,1.2513D-01,
+     &1.3230D-01,1.4128D-01,1.5115D-01,1.6164D-01,1.7300D-01,1.8301D-01,
+     &1.9397D-01,2.0660D-01,2.1907D-01,2.3072D-01,2.4154D-01,2.4985D-01,
+     &2.5817D-01,2.6810D-01,2.8136D-01,2.9535D-01,3.1585D-01,3.3824D-01,
+     &3.6743D-01,3.9701D-01,4.2565D-01,4.5205D-01,4.7460D-01,4.9184D-01,
+     &5.0110D-01,4.9954D-01,4.8363D-01,4.4878D-01,3.8940D-01,5.9452D-01,
+     &6.2820D-01,6.7181D-01,7.3612D-01,8.3598D-01,9.9560D-01,1.2543D+00,
+     &1.6953D+00,2.4947D+00,4.1415D+00,8.4275D+00,2.7797D+01,0.0000D+00,
+     &8.6266D-02,8.7847D-02,8.9380D-02,9.0869D-02,9.2337D-02,9.3826D-02,
+     &9.5315D-02,9.6842D-02,9.8333D-02,1.0003D-01,1.0178D-01,1.0370D-01,
+     &1.0575D-01,1.0710D-01,1.0872D-01,1.1075D-01,1.1295D-01,1.1538D-01,
+     &1.1821D-01,1.2088D-01,1.2396D-01,1.2796D-01,1.3252D-01,1.3756D-01/
+      DATA (XUDF_L(K),K=  229,  342) /
+     &1.4331D-01,1.4870D-01,1.5500D-01,1.6291D-01,1.7166D-01,1.8100D-01,
+     &1.9111D-01,2.0002D-01,2.0977D-01,2.2095D-01,2.3189D-01,2.4200D-01,
+     &2.5123D-01,2.5821D-01,2.6512D-01,2.7351D-01,2.8514D-01,2.9789D-01,
+     &3.1683D-01,3.3731D-01,3.6424D-01,3.9124D-01,4.1697D-01,4.4030D-01,
+     &4.6002D-01,4.7419D-01,4.8085D-01,4.7740D-01,4.6086D-01,4.2728D-01,
+     &3.7241D-01,5.6656D-01,5.9684D-01,6.3694D-01,6.9622D-01,7.8804D-01,
+     &9.3343D-01,1.1653D+00,1.5545D+00,2.2504D+00,3.6537D+00,7.2124D+00,
+     &2.2653D+01,0.0000D+00,1.4838D-01,1.4960D-01,1.5068D-01,1.5161D-01,
+     &1.5242D-01,1.5316D-01,1.5373D-01,1.5426D-01,1.5470D-01,1.5511D-01,
+     &1.5554D-01,1.5602D-01,1.5660D-01,1.5698D-01,1.5750D-01,1.5830D-01,
+     &1.5923D-01,1.6034D-01,1.6181D-01,1.6324D-01,1.6509D-01,1.6746D-01,
+     &1.7054D-01,1.7402D-01,1.7811D-01,1.8208D-01,1.8687D-01,1.9296D-01,
+     &1.9986D-01,2.0734D-01,2.1554D-01,2.2281D-01,2.3075D-01,2.3983D-01,
+     &2.4863D-01,2.5660D-01,2.6366D-01,2.6883D-01,2.7387D-01,2.8026D-01,
+     &2.8982D-01,3.0088D-01,3.1780D-01,3.3626D-01,3.6021D-01,3.8399D-01,
+     &4.0666D-01,4.2682D-01,4.4278D-01,4.5386D-01,4.5774D-01,4.5230D-01,
+     &4.3509D-01,4.0314D-01,3.5321D-01,5.3325D-01,5.5916D-01,5.9448D-01,
+     &6.4707D-01,7.2797D-01,8.5557D-01,1.0563D+00,1.3882D+00,1.9717D+00,
+     &3.1223D+00,5.9601D+00,1.7750D+01,0.0000D+00,2.3139D-01,2.3138D-01/
+      DATA (XUDF_L(K),K=  343,  456) /
+     &2.3120D-01,2.3076D-01,2.3006D-01,2.2907D-01,2.2788D-01,2.2645D-01,
+     &2.2489D-01,2.2308D-01,2.2120D-01,2.1929D-01,2.1743D-01,2.1630D-01,
+     &2.1526D-01,2.1411D-01,2.1311D-01,2.1231D-01,2.1171D-01,2.1148D-01,
+     &2.1150D-01,2.1182D-01,2.1271D-01,2.1412D-01,2.1601D-01,2.1822D-01,
+     &2.2096D-01,2.2496D-01,2.2961D-01,2.3481D-01,2.4086D-01,2.4622D-01,
+     &2.5214D-01,2.5891D-01,2.6537D-01,2.7104D-01,2.7588D-01,2.7922D-01,
+     &2.8235D-01,2.8664D-01,2.9413D-01,3.0352D-01,3.1845D-01,3.3481D-01,
+     &3.5617D-01,3.7737D-01,3.9689D-01,4.1403D-01,4.2736D-01,4.3558D-01,
+     &4.3712D-01,4.3016D-01,4.1245D-01,3.8197D-01,3.3645D-01,5.0322D-01,
+     &5.2507D-01,5.5559D-01,6.0172D-01,6.7286D-01,7.8413D-01,9.5797D-01,
+     &1.2422D+00,1.7341D+00,2.6883D+00,4.9868D+00,1.4177D+01,0.0000D+00,
+     &3.6389D-01,3.6098D-01,3.5780D-01,3.5400D-01,3.5016D-01,3.4553D-01,
+     &3.4044D-01,3.3521D-01,3.2971D-01,3.2369D-01,3.1755D-01,3.1120D-01,
+     &3.0494D-01,3.0120D-01,2.9724D-01,2.9287D-01,2.8855D-01,2.8449D-01,
+     &2.8072D-01,2.7770D-01,2.7469D-01,2.7175D-01,2.6933D-01,2.6740D-01,
+     &2.6613D-01,2.6556D-01,2.6563D-01,2.6631D-01,2.6763D-01,2.6975D-01,
+     &2.7268D-01,2.7539D-01,2.7857D-01,2.8224D-01,2.8565D-01,2.8841D-01,
+     &2.9040D-01,2.9139D-01,2.9220D-01,2.9395D-01,2.9888D-01,3.0633D-01,
+     &3.1877D-01,3.3296D-01,3.5147D-01,3.6947D-01,3.8604D-01,3.9986D-01/
+      DATA (XUDF_L(K),K=  457,  570) /
+     &4.1008D-01,4.1548D-01,4.1467D-01,4.0620D-01,3.8830D-01,3.5965D-01,
+     &3.1902D-01,4.7020D-01,4.8772D-01,5.1303D-01,5.5185D-01,6.1224D-01,
+     &7.0699D-01,8.5323D-01,1.0903D+00,1.4950D+00,2.2640D+00,4.0723D+00,
+     &0.0000D+00,0.0000D+00,5.2666D-01,5.1909D-01,5.1100D-01,5.0238D-01,
+     &4.9333D-01,4.8312D-01,4.7293D-01,4.6180D-01,4.5066D-01,4.3890D-01,
+     &4.2692D-01,4.1467D-01,4.0262D-01,3.9542D-01,3.8784D-01,3.7925D-01,
+     &3.7080D-01,3.6267D-01,3.5482D-01,3.4841D-01,3.4190D-01,3.3492D-01,
+     &3.2852D-01,3.2287D-01,3.1768D-01,3.1409D-01,3.1066D-01,3.0785D-01,
+     &3.0564D-01,3.0446D-01,3.0380D-01,3.0388D-01,3.0402D-01,3.0458D-01,
+     &3.0488D-01,3.0475D-01,3.0386D-01,3.0263D-01,3.0116D-01,3.0045D-01,
+     &3.0296D-01,3.0852D-01,3.1888D-01,3.3085D-01,3.4677D-01,3.6222D-01,
+     &3.7600D-01,3.8707D-01,3.9488D-01,3.9799D-01,3.9530D-01,3.8568D-01,
+     &3.6791D-01,3.4080D-01,3.0424D-01,4.4195D-01,4.5570D-01,4.7648D-01,
+     &5.0935D-01,5.6099D-01,6.4225D-01,7.6680D-01,9.6736D-01,1.3053D+00,
+     &1.9393D+00,3.3976D+00,0.0000D+00,0.0000D+00,7.4015D-01,7.2498D-01,
+     &7.0940D-01,6.9297D-01,6.7620D-01,6.5800D-01,6.3935D-01,6.2047D-01,
+     &6.0114D-01,5.8076D-01,5.6065D-01,5.4030D-01,5.2035D-01,5.0839D-01,
+     &4.9583D-01,4.8167D-01,4.6773D-01,4.5434D-01,4.4113D-01,4.3035D-01,
+     &4.1922D-01,4.0719D-01,3.9582D-01,3.8536D-01,3.7557D-01,3.6805D-01/
+      DATA (XUDF_L(K),K=  571,  684) /
+     &3.6079D-01,3.5336D-01,3.4710D-01,3.4173D-01,3.3719D-01,3.3400D-01,
+     &3.3124D-01,3.2819D-01,3.2494D-01,3.2158D-01,3.1765D-01,3.1400D-01,
+     &3.1011D-01,3.0684D-01,3.0682D-01,3.1046D-01,3.1856D-01,3.2861D-01,
+     &3.4189D-01,3.5475D-01,3.6597D-01,3.7463D-01,3.8003D-01,3.8108D-01,
+     &3.7681D-01,3.6631D-01,3.4865D-01,3.2327D-01,2.9078D-01,4.1488D-01,
+     &4.2529D-01,4.4193D-01,4.6945D-01,5.1322D-01,5.8236D-01,6.8846D-01,
+     &8.5739D-01,1.1394D+00,1.6617D+00,2.8395D+00,0.0000D+00,0.0000D+00,
+     &9.8501D-01,9.5975D-01,9.3420D-01,9.0757D-01,8.8092D-01,8.5237D-01,
+     &8.2383D-01,7.9445D-01,7.6556D-01,7.3524D-01,7.0484D-01,6.7495D-01,
+     &6.4547D-01,6.2798D-01,6.0969D-01,5.8904D-01,5.6882D-01,5.4932D-01,
+     &5.3014D-01,5.1443D-01,4.9826D-01,4.8058D-01,4.6380D-01,4.4815D-01,
+     &4.3330D-01,4.2167D-01,4.1020D-01,3.9827D-01,3.8748D-01,3.7784D-01,
+     &3.6931D-01,3.6303D-01,3.5669D-01,3.4992D-01,3.4358D-01,3.3710D-01,
+     &3.3025D-01,3.2429D-01,3.1817D-01,3.1242D-01,3.1001D-01,3.1195D-01,
+     &3.1802D-01,3.2610D-01,3.3719D-01,3.4770D-01,3.5674D-01,3.6357D-01,
+     &3.6695D-01,3.6631D-01,3.6075D-01,3.4960D-01,3.3214D-01,3.0855D-01,
+     &2.7931D-01,3.9198D-01,3.9931D-01,4.1263D-01,4.3550D-01,4.7310D-01,
+     &5.3259D-01,6.2375D-01,7.6876D-01,1.0087D+00,1.4464D+00,2.4185D+00,
+     &0.0000D+00,0.0000D+00,1.2917D+00,1.2523D+00,1.2128D+00,1.1722D+00/
+      DATA (XUDF_L(K),K=  685,  798) /
+     &1.1321D+00,1.0894D+00,1.0473D+00,1.0044D+00,9.6262D-01,9.1838D-01,
+     &8.7565D-01,8.3283D-01,7.9186D-01,7.6734D-01,7.4146D-01,7.1300D-01,
+     &6.8484D-01,6.5787D-01,6.3134D-01,6.0963D-01,5.8730D-01,5.6294D-01,
+     &5.3947D-01,5.1767D-01,4.9689D-01,4.8039D-01,4.6398D-01,4.4675D-01,
+     &4.3087D-01,4.1650D-01,4.0371D-01,3.9342D-01,3.8361D-01,3.7293D-01,
+     &3.6284D-01,3.5305D-01,3.4307D-01,3.3468D-01,3.2613D-01,3.1788D-01,
+     &3.1306D-01,3.1309D-01,3.1715D-01,3.2346D-01,3.3232D-01,3.4066D-01,
+     &3.4779D-01,3.5251D-01,3.5401D-01,3.5184D-01,3.4519D-01,3.3347D-01,
+     &3.1650D-01,2.9433D-01,2.6872D-01,3.6968D-01,3.7446D-01,3.8477D-01,
+     &4.0368D-01,4.3551D-01,4.8654D-01,5.6457D-01,6.8832D-01,8.9135D-01,
+     &1.2583D+00,2.0601D+00,0.0000D+00,0.0000D+00,1.6499D+00,1.5928D+00,
+     &1.5356D+00,1.4773D+00,1.4202D+00,1.3601D+00,1.3009D+00,1.2413D+00,
+     &1.1836D+00,1.1235D+00,1.0650D+00,1.0076D+00,9.5212D-01,9.1919D-01,
+     &8.8569D-01,8.4733D-01,8.1006D-01,7.7436D-01,7.3955D-01,7.1104D-01,
+     &6.8173D-01,6.4966D-01,6.1893D-01,5.9026D-01,5.6287D-01,5.4114D-01,
+     &5.1941D-01,4.9621D-01,4.7490D-01,4.5564D-01,4.3786D-01,4.2408D-01,
+     &4.1024D-01,3.9562D-01,3.8175D-01,3.6853D-01,3.5541D-01,3.4455D-01,
+     &3.3366D-01,3.2286D-01,3.1565D-01,3.1397D-01,3.1618D-01,3.2069D-01,
+     &3.2744D-01,3.3383D-01,3.3911D-01,3.4194D-01,3.4194D-01,3.3844D-01/
+      DATA (XUDF_L(K),K=  799,  912) /
+     &3.3088D-01,3.1887D-01,3.0224D-01,2.8177D-01,2.5901D-01,3.4945D-01,
+     &3.5200D-01,3.5959D-01,3.7518D-01,4.0212D-01,4.4590D-01,5.1305D-01,
+     &6.1934D-01,7.9273D-01,1.1025D+00,1.7693D+00,0.0000D+00,0.0000D+00,
+     &2.0413D+00,1.9626D+00,1.8840D+00,1.8053D+00,1.7284D+00,1.6480D+00,
+     &1.5697D+00,1.4911D+00,1.4157D+00,1.3375D+00,1.2620D+00,1.1875D+00,
+     &1.1168D+00,1.0751D+00,1.0321D+00,9.8410D-01,9.3682D-01,8.9196D-01,
+     &8.4816D-01,8.1245D-01,7.7582D-01,7.3576D-01,6.9745D-01,6.6154D-01,
+     &6.2742D-01,6.0036D-01,5.7319D-01,5.4409D-01,5.1721D-01,4.9291D-01,
+     &4.7049D-01,4.5284D-01,4.3541D-01,4.1671D-01,3.9926D-01,3.8274D-01,
+     &3.6660D-01,3.5348D-01,3.4035D-01,3.2727D-01,3.1788D-01,3.1459D-01,
+     &3.1499D-01,3.1792D-01,3.2291D-01,3.2764D-01,3.3124D-01,3.3250D-01,
+     &3.3120D-01,3.2663D-01,3.1834D-01,3.0608D-01,2.8998D-01,2.7085D-01,
+     &2.5085D-01,3.3191D-01,3.3258D-01,3.3808D-01,3.5072D-01,3.7379D-01,
+     &4.1182D-01,4.7005D-01,5.6257D-01,7.1233D-01,9.7788D-01,1.5412D+00,
+     &0.0000D+00,0.0000D+00,2.6325D+00,2.5188D+00,2.4060D+00,2.2942D+00,
+     &2.1863D+00,2.0740D+00,1.9650D+00,1.8571D+00,1.7537D+00,1.6473D+00,
+     &1.5453D+00,1.4458D+00,1.3515D+00,1.2965D+00,1.2394D+00,1.1767D+00,
+     &1.1150D+00,1.0560D+00,9.9927D-01,9.5301D-01,9.0565D-01,8.5400D-01,
+     &8.0462D-01,7.5858D-01,7.1481D-01,6.7994D-01,6.4502D-01,6.0799D-01/
+      DATA (XUDF_L(K),K=  913, 1026) /
+     &5.7349D-01,5.4206D-01,5.1299D-01,4.9028D-01,4.6789D-01,4.4387D-01,
+     &4.2168D-01,4.0096D-01,3.8070D-01,3.6457D-01,3.4857D-01,3.3249D-01,
+     &3.2026D-01,3.1503D-01,3.1326D-01,3.1423D-01,3.1703D-01,3.1974D-01,
+     &3.2120D-01,3.2086D-01,3.1799D-01,3.1221D-01,3.0315D-01,2.9072D-01,
+     &2.7522D-01,2.5796D-01,2.4114D-01,3.1079D-01,3.0956D-01,3.1267D-01,
+     &3.2223D-01,3.4089D-01,3.7246D-01,4.2134D-01,4.9853D-01,6.2305D-01,
+     &8.4191D-01,1.2983D+00,0.0000D+00,0.0000D+00,3.2997D+00,3.1427D+00,
+     &2.9900D+00,2.8374D+00,2.6927D+00,2.5421D+00,2.3973D+00,2.2549D+00,
+     &2.1191D+00,1.9809D+00,1.8488D+00,1.7209D+00,1.6001D+00,1.5300D+00,
+     &1.4576D+00,1.3771D+00,1.2999D+00,1.2268D+00,1.1551D+00,1.0975D+00,
+     &1.0385D+00,9.7437D-01,9.1327D-01,8.5649D-01,8.0236D-01,7.5952D-01,
+     &7.1667D-01,6.7091D-01,6.2847D-01,5.9005D-01,5.5422D-01,5.2636D-01,
+     &4.9890D-01,4.6976D-01,4.4269D-01,4.1752D-01,3.9377D-01,3.7477D-01,
+     &3.5594D-01,3.3710D-01,3.2226D-01,3.1511D-01,3.1131D-01,3.1067D-01,
+     &3.1132D-01,3.1227D-01,3.1198D-01,3.1021D-01,3.0606D-01,2.9926D-01,
+     &2.8958D-01,2.7716D-01,2.6233D-01,2.4655D-01,2.3275D-01,2.9229D-01,
+     &2.8941D-01,2.9061D-01,2.9753D-01,3.1273D-01,3.3909D-01,3.8034D-01,
+     &4.4548D-01,5.5028D-01,7.3256D-01,1.1074D+00,0.0000D+00,0.0000D+00,
+     &4.0557D+00,3.8486D+00,3.6460D+00,3.4480D+00,3.2579D+00,3.0626D+00/
+      DATA (XUDF_L(K),K= 1027, 1140) /
+     &2.8756D+00,2.6929D+00,2.5196D+00,2.3441D+00,2.1778D+00,2.0170D+00,
+     &1.8670D+00,1.7797D+00,1.6902D+00,1.5909D+00,1.4960D+00,1.4058D+00,
+     &1.3191D+00,1.2484D+00,1.1764D+00,1.0991D+00,1.0253D+00,9.5689D-01,
+     &8.9197D-01,8.4046D-01,7.8904D-01,7.3442D-01,6.8367D-01,6.3780D-01,
+     &5.9520D-01,5.6218D-01,5.2934D-01,4.9500D-01,4.6300D-01,4.3370D-01,
+     &4.0611D-01,3.8431D-01,3.6284D-01,3.4121D-01,3.2389D-01,3.1494D-01,
+     &3.0926D-01,3.0697D-01,3.0594D-01,3.0501D-01,3.0330D-01,3.0019D-01,
+     &2.9492D-01,2.8734D-01,2.7718D-01,2.6476D-01,2.5057D-01,2.3646D-01,
+     &2.2503D-01,2.7558D-01,2.7132D-01,2.7089D-01,2.7569D-01,2.8794D-01,
+     &3.1000D-01,3.4491D-01,4.0016D-01,4.8886D-01,6.4191D-01,9.5232D-01,
+     &0.0000D+00,0.0000D+00,4.8799D+00,4.6116D+00,4.3560D+00,4.1035D+00,
+     &3.8608D+00,3.6163D+00,3.3822D+00,3.1557D+00,2.9412D+00,2.7247D+00,
+     &2.5209D+00,2.3248D+00,2.1421D+00,2.0368D+00,1.9287D+00,1.8094D+00,
+     &1.6955D+00,1.5877D+00,1.4841D+00,1.4003D+00,1.3154D+00,1.2237D+00,
+     &1.1368D+00,1.0563D+00,9.8015D-01,9.2005D-01,8.5978D-01,7.9615D-01,
+     &7.3715D-01,6.8369D-01,6.3441D-01,5.9609D-01,5.5830D-01,5.1865D-01,
+     &4.8192D-01,4.4872D-01,4.1747D-01,3.9300D-01,3.6895D-01,3.4483D-01,
+     &3.2508D-01,3.1459D-01,3.0709D-01,3.0328D-01,3.0056D-01,2.9840D-01,
+     &2.9543D-01,2.9107D-01,2.8485D-01,2.7655D-01,2.6610D-01,2.5368D-01/
+      DATA (XUDF_L(K),K= 1141, 1254) /
+     &2.4019D-01,2.2736D-01,2.1837D-01,2.6080D-01,2.5542D-01,2.5362D-01,
+     &2.5693D-01,2.6661D-01,2.8505D-01,3.1490D-01,3.6226D-01,4.3798D-01,
+     &5.6769D-01,8.2836D-01,0.0000D+00,0.0000D+00,5.8340D+00,5.4940D+00,
+     &5.1700D+00,4.8532D+00,4.5515D+00,4.2463D+00,3.9559D+00,3.6752D+00,
+     &3.4138D+00,3.1496D+00,2.9022D+00,2.6648D+00,2.4450D+00,2.3189D+00,
+     &2.1896D+00,2.0476D+00,1.9120D+00,1.7843D+00,1.6621D+00,1.5639D+00,
+     &1.4648D+00,1.3569D+00,1.2556D+00,1.1618D+00,1.0734D+00,1.0037D+00,
+     &9.3416D-01,8.6065D-01,7.9257D-01,7.3145D-01,6.7463D-01,6.3082D-01,
+     &5.8786D-01,5.4262D-01,5.0118D-01,4.6374D-01,4.2883D-01,4.0146D-01,
+     &3.7490D-01,3.4814D-01,3.2612D-01,3.1397D-01,3.0482D-01,2.9958D-01,
+     &2.9536D-01,2.9178D-01,2.8756D-01,2.8208D-01,2.7504D-01,2.6611D-01,
+     &2.5539D-01,2.4319D-01,2.3031D-01,2.1877D-01,2.1195D-01,2.4673D-01,
+     &2.4036D-01,2.3746D-01,2.3912D-01,2.4677D-01,2.6223D-01,2.8748D-01,
+     &3.2792D-01,3.9255D-01,5.0271D-01,7.2095D-01,0.0000D+00,0.0000D+00,
+     &6.8578D+00,6.4388D+00,6.0380D+00,5.6501D+00,5.2825D+00,4.9103D+00,
+     &4.5613D+00,4.2230D+00,3.9070D+00,3.5911D+00,3.2966D+00,3.0156D+00,
+     &2.7567D+00,2.6078D+00,2.4563D+00,2.2905D+00,2.1319D+00,1.9837D+00,
+     &1.8421D+00,1.7287D+00,1.6141D+00,1.4902D+00,1.3730D+00,1.2663D+00,
+     &1.1652D+00,1.0858D+00,1.0067D+00,9.2337D-01,8.4648D-01,7.7710D-01/
+      DATA (XUDF_L(K),K= 1255, 1368) /
+     &7.1333D-01,6.6392D-01,6.1566D-01,5.6531D-01,5.1904D-01,4.7761D-01,
+     &4.3908D-01,4.0927D-01,3.8022D-01,3.5109D-01,3.2686D-01,3.1318D-01,
+     &3.0244D-01,2.9602D-01,2.9031D-01,2.8538D-01,2.8024D-01,2.7382D-01,
+     &2.6607D-01,2.5668D-01,2.4571D-01,2.3364D-01,2.2155D-01,2.1116D-01,
+     &2.0617D-01,2.3421D-01,2.2704D-01,2.2320D-01,2.2366D-01,2.2952D-01,
+     &2.4241D-01,2.6402D-01,2.9884D-01,3.5437D-01,4.4860D-01,6.3331D-01,
+     &0.0000D+00,0.0000D+00,7.9784D+00,7.4673D+00,6.9820D+00,6.5121D+00,
+     &6.0712D+00,5.6250D+00,5.2080D+00,4.8065D+00,4.4309D+00,4.0590D+00,
+     &3.7131D+00,3.3843D+00,3.0816D+00,2.9094D+00,2.7332D+00,2.5420D+00,
+     &2.3595D+00,2.1895D+00,2.0271D+00,1.8966D+00,1.7658D+00,1.6248D+00,
+     &1.4933D+00,1.3718D+00,1.2579D+00,1.1683D+00,1.0795D+00,9.8589D-01,
+     &8.9996D-01,8.2253D-01,7.5153D-01,6.9648D-01,6.4287D-01,5.8736D-01,
+     &5.3655D-01,4.9109D-01,4.4891D-01,4.1655D-01,3.8518D-01,3.5367D-01,
+     &3.2738D-01,3.1221D-01,3.0006D-01,2.9246D-01,2.8544D-01,2.7940D-01,
+     &2.7319D-01,2.6601D-01,2.5763D-01,2.4782D-01,2.3676D-01,2.2486D-01,
+     &2.1329D-01,2.0405D-01,2.0083D-01,2.2267D-01,2.1489D-01,2.1027D-01,
+     &2.0967D-01,2.1409D-01,2.2473D-01,2.4320D-01,2.7316D-01,3.2113D-01,
+     &4.0209D-01,5.5899D-01,0.0000D+00,0.0000D+00,9.1575D+00,8.5458D+00,
+     &7.9700D+00,7.4123D+00,6.8876D+00,6.3653D+00,5.8736D+00,5.4042D+00/
+      DATA (XUDF_L(K),K= 1369, 1482) /
+     &4.9684D+00,4.5359D+00,4.1366D+00,3.7576D+00,3.4110D+00,3.2138D+00,
+     &3.0122D+00,2.7943D+00,2.5871D+00,2.3944D+00,2.2102D+00,2.0646D+00,
+     &1.9163D+00,1.7581D+00,1.6109D+00,1.4753D+00,1.3483D+00,1.2486D+00,
+     &1.1500D+00,1.0462D+00,9.5130D-01,8.6585D-01,7.8770D-01,7.2741D-01,
+     &6.6891D-01,6.0781D-01,5.5266D-01,5.0342D-01,4.5788D-01,4.2322D-01,
+     &3.8960D-01,3.5594D-01,3.2768D-01,3.1125D-01,2.9779D-01,2.8890D-01,
+     &2.8091D-01,2.7385D-01,2.6670D-01,2.5886D-01,2.4989D-01,2.3976D-01,
+     &2.2861D-01,2.1703D-01,2.0604D-01,1.9777D-01,1.9598D-01,2.1238D-01,
+     &2.0408D-01,1.9879D-01,1.9735D-01,2.0048D-01,2.0933D-01,2.2523D-01,
+     &2.5120D-01,2.9296D-01,3.6305D-01,4.9711D-01,0.0000D+00,0.0000D+00,
+     &1.0956D+01,1.0188D+01,9.4660D+00,8.7704D+00,8.1209D+00,7.4727D+00,
+     &6.8721D+00,6.2972D+00,5.7646D+00,5.2434D+00,4.7595D+00,4.3051D+00,
+     &3.8911D+00,3.6559D+00,3.4174D+00,3.1598D+00,2.9153D+00,2.6889D+00,
+     &2.4732D+00,2.3031D+00,2.1311D+00,1.9475D+00,1.7771D+00,1.6202D+00,
+     &1.4748D+00,1.3609D+00,1.2481D+00,1.1301D+00,1.0222D+00,9.2549D-01,
+     &8.3728D-01,7.6947D-01,7.0373D-01,6.3561D-01,5.7438D-01,5.1959D-01,
+     &4.6984D-01,4.3187D-01,3.9529D-01,3.5864D-01,3.2783D-01,3.0967D-01,
+     &2.9444D-01,2.8428D-01,2.7469D-01,2.6638D-01,2.5813D-01,2.4942D-01,
+     &2.3986D-01,2.2937D-01,2.1819D-01,2.0682D-01,1.9665D-01,1.8966D-01/
+      DATA (XUDF_L(K),K= 1483, 1596) /
+     &1.8971D-01,1.9926D-01,1.9036D-01,1.8442D-01,1.8192D-01,1.8362D-01,
+     &1.9037D-01,2.0318D-01,2.2459D-01,2.5904D-01,3.1665D-01,4.2407D-01,
+     &0.0000D+00,0.0000D+00,1.2798D+01,1.1861D+01,1.0986D+01,1.0144D+01,
+     &9.3643D+00,8.5887D+00,7.8706D+00,7.1866D+00,6.5568D+00,5.9419D+00,
+     &5.3754D+00,4.8419D+00,4.3593D+00,4.0864D+00,3.8109D+00,3.5127D+00,
+     &3.2315D+00,2.9714D+00,2.7252D+00,2.5309D+00,2.3356D+00,2.1269D+00,
+     &1.9338D+00,1.7578D+00,1.5939D+00,1.4656D+00,1.3394D+00,1.2075D+00,
+     &1.0875D+00,9.8023D-01,8.8256D-01,8.0772D-01,7.3533D-01,6.6054D-01,
+     &5.9364D-01,5.3423D-01,4.8009D-01,4.3930D-01,4.0003D-01,3.6079D-01,
+     &3.2768D-01,3.0809D-01,2.9130D-01,2.7993D-01,2.6898D-01,2.5976D-01,
+     &2.5062D-01,2.4123D-01,2.3116D-01,2.2040D-01,2.0917D-01,1.9814D-01,
+     &1.8865D-01,1.8272D-01,1.8428D-01,1.8820D-01,1.7883D-01,1.7238D-01,
+     &1.6914D-01,1.6979D-01,1.7482D-01,1.8534D-01,2.0325D-01,2.3214D-01,
+     &2.8022D-01,3.6659D-01,0.0000D+00,0.0000D+00,1.4900D+01,1.3767D+01,
+     &1.2708D+01,1.1700D+01,1.0766D+01,9.8403D+00,8.9832D+00,8.1757D+00,
+     &7.4366D+00,6.7121D+00,6.0486D+00,5.4300D+00,4.8704D+00,4.5555D+00,
+     &4.2371D+00,3.8955D+00,3.5734D+00,3.2760D+00,2.9952D+00,2.7738D+00,
+     &2.5528D+00,2.3175D+00,2.1001D+00,1.9012D+00,1.7176D+00,1.5750D+00,
+     &1.4344D+00,1.2880D+00,1.1547D+00,1.0364D+00,9.2859D-01,8.4652D-01/
+      DATA (XUDF_L(K),K= 1597, 1710) /
+     &7.6723D-01,6.8578D-01,6.1255D-01,5.4848D-01,4.9034D-01,4.4649D-01,
+     &4.0456D-01,3.6275D-01,3.2738D-01,3.0624D-01,2.8805D-01,2.7544D-01,
+     &2.6343D-01,2.5315D-01,2.4318D-01,2.3314D-01,2.2263D-01,2.1166D-01,
+     &2.0051D-01,1.8983D-01,1.8102D-01,1.7610D-01,1.7901D-01,1.7764D-01,
+     &1.6791D-01,1.6102D-01,1.5715D-01,1.5684D-01,1.6056D-01,1.6899D-01,
+     &1.8376D-01,2.0786D-01,2.4776D-01,3.1470D-01,0.0000D+00,0.0000D+00,
+     &1.7212D+01,1.5853D+01,1.4590D+01,1.3390D+01,1.2283D+01,1.1191D+01,
+     &1.0185D+01,9.2395D+00,8.3762D+00,7.5315D+00,6.7670D+00,6.0503D+00,
+     &5.4086D+00,5.0481D+00,4.6843D+00,4.2940D+00,3.9280D+00,3.5917D+00,
+     &3.2752D+00,3.0252D+00,2.7768D+00,2.5132D+00,2.2690D+00,2.0490D+00,
+     &1.8445D+00,1.6857D+00,1.5301D+00,1.3685D+00,1.2219D+00,1.0920D+00,
+     &9.7438D-01,8.8478D-01,7.9825D-01,7.1007D-01,6.3111D-01,5.6196D-01,
+     &5.0016D-01,4.5321D-01,4.0867D-01,3.6435D-01,3.2686D-01,3.0431D-01,
+     &2.8470D-01,2.7109D-01,2.5789D-01,2.4674D-01,2.3605D-01,2.2547D-01,
+     &2.1459D-01,2.0348D-01,1.9237D-01,1.8201D-01,1.7376D-01,1.6982D-01,
+     &1.7398D-01,1.6789D-01,1.5795D-01,1.5065D-01,1.4630D-01,1.4521D-01,
+     &1.4773D-01,1.5443D-01,1.6659D-01,1.8664D-01,2.1966D-01,2.6878D-01,
+     &0.0000D+00,0.0000D+00,1.9526D+01,1.7951D+01,1.6470D+01,1.5074D+01,
+     &1.3790D+01,1.2527D+01,1.1370D+01,1.0282D+01,9.2958D+00,8.3330D+00/
+      DATA (XUDF_L(K),K= 1711, 1824) /
+     &7.4603D+00,6.6536D+00,5.9285D+00,5.5219D+00,5.1141D+00,4.6768D+00,
+     &4.2681D+00,3.8926D+00,3.5402D+00,3.2626D+00,2.9882D+00,2.6963D+00,
+     &2.4284D+00,2.1851D+00,1.9619D+00,1.7885D+00,1.6187D+00,1.4429D+00,
+     &1.2838D+00,1.1431D+00,1.0159D+00,9.1924D-01,8.2663D-01,7.3180D-01,
+     &6.4793D-01,5.7429D-01,5.0828D-01,4.5904D-01,4.1215D-01,3.6558D-01,
+     &3.2620D-01,3.0238D-01,2.8167D-01,2.6700D-01,2.5302D-01,2.4098D-01,
+     &2.2975D-01,2.1873D-01,2.0756D-01,1.9633D-01,1.8532D-01,1.7533D-01,
+     &1.6763D-01,1.6450D-01,1.6959D-01,1.5953D-01,1.4943D-01,1.4185D-01,
+     &1.3716D-01,1.3545D-01,1.3705D-01,1.4238D-01,1.5258D-01,1.6945D-01,
+     &1.9705D-01,2.3049D-01,0.0000D+00,0.0000D+00,2.2141D+01,2.0286D+01,
+     &1.8570D+01,1.6948D+01,1.5466D+01,1.4010D+01,1.2679D+01,1.1431D+01,
+     &1.0303D+01,9.2106D+00,8.2239D+00,7.3077D+00,6.4926D+00,6.0348D+00,
+     &5.5765D+00,5.0879D+00,4.6321D+00,4.2138D+00,3.8233D+00,3.5162D+00,
+     &3.2122D+00,2.8907D+00,2.5960D+00,2.3300D+00,2.0856D+00,1.8954D+00,
+     &1.7110D+00,1.5199D+00,1.3476D+00,1.1955D+00,1.0584D+00,9.5478D-01,
+     &8.5531D-01,7.5417D-01,6.6439D-01,5.8623D-01,5.1682D-01,4.6468D-01,
+     &4.1541D-01,3.6662D-01,3.2538D-01,3.0035D-01,2.7843D-01,2.6291D-01,
+     &2.4798D-01,2.3522D-01,2.2346D-01,2.1203D-01,2.0062D-01,1.8935D-01,
+     &1.7843D-01,1.6874D-01,1.6163D-01,1.5920D-01,1.6520D-01,1.5147D-01/
+      DATA (XUDF_L(K),K= 1825, 1836) /
+     &1.4120D-01,1.3349D-01,1.2844D-01,1.2620D-01,1.2701D-01,1.3118D-01,
+     &1.3954D-01,1.5369D-01,1.7631D-01,1.9416D-01,0.0000D+00,0.0000D+00/
+      DATA (XSF_L(K),K=    1,  114) /
+     &8.9277D-03,9.2838D-03,9.6380D-03,9.9960D-03,1.0349D-02,1.0719D-02,
+     &1.1082D-02,1.1442D-02,1.1792D-02,1.2148D-02,1.2489D-02,1.2817D-02,
+     &1.3124D-02,1.3295D-02,1.3474D-02,1.3661D-02,1.3835D-02,1.3985D-02,
+     &1.4121D-02,1.4217D-02,1.4303D-02,1.4379D-02,1.4419D-02,1.4434D-02,
+     &1.4412D-02,1.4366D-02,1.4286D-02,1.4158D-02,1.3991D-02,1.3790D-02,
+     &1.3553D-02,1.3335D-02,1.3094D-02,1.2821D-02,1.2580D-02,1.2410D-02,
+     &1.2357D-02,1.2459D-02,1.2790D-02,1.3571D-02,1.5018D-02,1.6665D-02,
+     &1.9113D-02,2.1832D-02,2.5587D-02,2.9818D-02,3.4535D-02,3.9813D-02,
+     &4.5737D-02,5.2358D-02,5.9765D-02,6.8021D-02,7.7185D-02,8.7258D-02,
+     &9.8198D-02,1.1073D-01,1.4216D-01,1.8364D-01,2.3959D-01,3.1758D-01,
+     &4.3050D-01,6.0203D-01,8.8214D-01,1.3845D+00,2.4294D+00,5.2463D+00,
+     &1.8903D+01,0.0000D+00,1.4987D-02,1.5468D-02,1.5936D-02,1.6403D-02,
+     &1.6855D-02,1.7319D-02,1.7760D-02,1.8194D-02,1.8600D-02,1.9008D-02,
+     &1.9382D-02,1.9730D-02,2.0033D-02,2.0199D-02,2.0359D-02,2.0523D-02,
+     &2.0654D-02,2.0760D-02,2.0831D-02,2.0870D-02,2.0886D-02,2.0858D-02,
+     &2.0798D-02,2.0680D-02,2.0523D-02,2.0363D-02,2.0127D-02,1.9825D-02,
+     &1.9464D-02,1.9060D-02,1.8607D-02,1.8200D-02,1.7750D-02,1.7240D-02,
+     &1.6759D-02,1.6362D-02,1.6103D-02,1.6050D-02,1.6240D-02,1.6916D-02,
+     &1.8336D-02,2.0030D-02,2.2586D-02,2.5447D-02,2.9418D-02,3.3874D-02/
+      DATA (XSF_L(K),K=  115,  228) /
+     &3.8821D-02,4.4375D-02,5.0509D-02,5.7343D-02,6.4974D-02,7.3385D-02,
+     &8.2640D-02,9.2732D-02,1.0354D-01,1.1667D-01,1.4809D-01,1.8910D-01,
+     &2.4387D-01,3.1940D-01,4.2764D-01,5.9054D-01,8.5228D-01,1.3150D+00,
+     &2.2623D+00,4.7596D+00,1.6445D+01,0.0000D+00,2.5010D-02,2.5616D-02,
+     &2.6180D-02,2.6758D-02,2.7279D-02,2.7792D-02,2.8274D-02,2.8729D-02,
+     &2.9134D-02,2.9513D-02,2.9836D-02,3.0110D-02,3.0324D-02,3.0417D-02,
+     &3.0492D-02,3.0537D-02,3.0551D-02,3.0517D-02,3.0432D-02,3.0326D-02,
+     &3.0181D-02,2.9954D-02,2.9663D-02,2.9316D-02,2.8913D-02,2.8508D-02,
+     &2.8021D-02,2.7422D-02,2.6741D-02,2.5997D-02,2.5204D-02,2.4500D-02,
+     &2.3734D-02,2.2858D-02,2.2019D-02,2.1281D-02,2.0698D-02,2.0402D-02,
+     &2.0365D-02,2.0844D-02,2.2137D-02,2.3807D-02,2.6404D-02,2.9338D-02,
+     &3.3433D-02,3.8036D-02,4.3135D-02,4.8799D-02,5.5061D-02,6.1999D-02,
+     &6.9633D-02,7.8024D-02,8.7156D-02,9.6998D-02,1.0742D-01,1.2099D-01,
+     &1.5162D-01,1.9121D-01,2.4363D-01,3.1510D-01,4.1638D-01,5.6669D-01,
+     &8.0557D-01,1.2216D+00,2.0572D+00,4.2084D+00,1.3911D+01,0.0000D+00,
+     &4.2554D-02,4.3210D-02,4.3820D-02,4.4379D-02,4.4862D-02,4.5317D-02,
+     &4.5708D-02,4.6037D-02,4.6300D-02,4.6434D-02,4.6540D-02,4.6530D-02,
+     &4.6426D-02,4.6317D-02,4.6155D-02,4.5919D-02,4.5622D-02,4.5267D-02,
+     &4.4833D-02,4.4425D-02,4.3932D-02,4.3298D-02,4.2582D-02,4.1785D-02/
+      DATA (XSF_L(K),K=  229,  342) /
+     &4.0903D-02,4.0097D-02,3.9179D-02,3.8047D-02,3.6815D-02,3.5547D-02,
+     &3.4199D-02,3.3020D-02,3.1748D-02,3.0298D-02,2.8905D-02,2.7644D-02,
+     &2.6563D-02,2.5882D-02,2.5485D-02,2.5614D-02,2.6651D-02,2.8199D-02,
+     &3.0731D-02,3.3652D-02,3.7768D-02,4.2390D-02,4.7530D-02,5.3188D-02,
+     &5.9436D-02,6.6257D-02,7.3734D-02,8.1918D-02,9.0696D-02,1.0004D-01,
+     &1.0978D-01,1.2357D-01,1.5274D-01,1.8999D-01,2.3888D-01,3.0452D-01,
+     &3.9656D-01,5.3136D-01,7.4246D-01,1.1043D+00,1.8158D+00,3.6023D+00,
+     &0.0000D+00,0.0000D+00,7.3602D-02,7.4085D-02,7.4460D-02,7.4729D-02,
+     &7.4904D-02,7.4982D-02,7.4902D-02,7.4713D-02,7.4446D-02,7.3972D-02,
+     &7.3397D-02,7.2626D-02,7.1803D-02,7.1200D-02,7.0479D-02,6.9610D-02,
+     &6.8654D-02,6.7624D-02,6.6495D-02,6.5467D-02,6.4313D-02,6.2898D-02,
+     &6.1380D-02,5.9788D-02,5.8079D-02,5.6557D-02,5.4876D-02,5.2866D-02,
+     &5.0733D-02,4.8592D-02,4.6341D-02,4.4415D-02,4.2370D-02,4.0073D-02,
+     &3.7825D-02,3.5778D-02,3.3956D-02,3.2702D-02,3.1749D-02,3.1334D-02,
+     &3.1922D-02,3.3216D-02,3.5534D-02,3.8322D-02,4.2321D-02,4.6830D-02,
+     &5.1816D-02,5.7335D-02,6.3369D-02,6.9947D-02,7.7109D-02,8.4752D-02,
+     &9.2948D-02,1.0153D-01,1.1031D-01,1.2405D-01,1.5100D-01,1.8509D-01,
+     &2.2905D-01,2.8761D-01,3.6847D-01,4.8537D-01,6.6543D-01,9.6831D-01,
+     &1.5524D+00,2.9766D+00,0.0000D+00,0.0000D+00,1.1509D-01,1.1500D-01/
+      DATA (XSF_L(K),K=  343,  456) /
+     &1.1474D-01,1.1430D-01,1.1371D-01,1.1292D-01,1.1196D-01,1.1079D-01,
+     &1.0948D-01,1.0791D-01,1.0620D-01,1.0426D-01,1.0215D-01,1.0076D-01,
+     &9.9224D-02,9.7466D-02,9.5472D-02,9.3507D-02,9.1346D-02,8.9460D-02,
+     &8.7382D-02,8.4914D-02,8.2326D-02,7.9663D-02,7.6874D-02,7.4459D-02,
+     &7.1794D-02,6.8694D-02,6.5489D-02,6.2266D-02,5.8964D-02,5.6164D-02,
+     &5.3226D-02,4.9916D-02,4.6721D-02,4.3794D-02,4.1128D-02,3.9225D-02,
+     &3.7654D-02,3.6613D-02,3.6666D-02,3.7626D-02,3.9655D-02,4.2227D-02,
+     &4.6000D-02,5.0288D-02,5.5044D-02,6.0308D-02,6.6020D-02,7.2218D-02,
+     &7.8943D-02,8.6079D-02,9.3611D-02,1.0141D-01,1.0925D-01,1.2274D-01,
+     &1.4748D-01,1.7840D-01,2.1791D-01,2.6997D-01,3.4109D-01,4.4280D-01,
+     &5.9706D-01,8.5325D-01,1.3371D+00,2.4909D+00,0.0000D+00,0.0000D+00,
+     &1.8131D-01,1.7986D-01,1.7802D-01,1.7597D-01,1.7372D-01,1.7110D-01,
+     &1.6825D-01,1.6515D-01,1.6187D-01,1.5820D-01,1.5428D-01,1.5016D-01,
+     &1.4582D-01,1.4314D-01,1.4017D-01,1.3677D-01,1.3315D-01,1.2951D-01,
+     &1.2571D-01,1.2248D-01,1.1891D-01,1.1472D-01,1.1045D-01,1.0615D-01,
+     &1.0173D-01,9.7944D-02,9.3854D-02,8.9131D-02,8.4347D-02,7.9597D-02,
+     &7.4799D-02,7.0788D-02,6.6599D-02,6.1932D-02,5.7438D-02,5.3307D-02,
+     &4.9546D-02,4.6816D-02,4.4417D-02,4.2536D-02,4.1862D-02,4.2361D-02,
+     &4.3960D-02,4.6198D-02,4.9612D-02,5.3553D-02,5.7974D-02,6.2830D-02/
+      DATA (XSF_L(K),K=  457,  570) /
+     &6.8141D-02,7.3865D-02,7.9970D-02,8.6422D-02,9.3160D-02,1.0006D-01,
+     &1.0685D-01,1.1989D-01,1.4199D-01,1.6937D-01,2.0407D-01,2.4925D-01,
+     &3.1029D-01,3.9635D-01,5.2529D-01,7.3579D-01,1.1263D+00,2.0347D+00,
+     &0.0000D+00,0.0000D+00,2.6278D-01,2.5883D-01,2.5460D-01,2.5007D-01,
+     &2.4526D-01,2.3995D-01,2.3437D-01,2.2848D-01,2.2242D-01,2.1578D-01,
+     &2.0894D-01,2.0181D-01,1.9465D-01,1.9018D-01,1.8540D-01,1.7984D-01,
+     &1.7415D-01,1.6846D-01,1.6261D-01,1.5768D-01,1.5234D-01,1.4615D-01,
+     &1.3987D-01,1.3368D-01,1.2736D-01,1.2199D-01,1.1628D-01,1.0975D-01,
+     &1.0321D-01,9.6788D-02,9.0380D-02,8.5059D-02,7.9532D-02,7.3436D-02,
+     &6.7594D-02,6.2243D-02,5.7363D-02,5.3720D-02,5.0502D-02,4.7772D-02,
+     &4.6346D-02,4.6358D-02,4.7497D-02,4.9377D-02,5.2401D-02,5.5965D-02,
+     &6.0009D-02,6.4489D-02,6.9334D-02,7.4546D-02,8.0117D-02,8.5936D-02,
+     &9.1972D-02,9.8056D-02,1.0398D-01,1.1644D-01,1.3628D-01,1.6068D-01,
+     &1.9127D-01,2.3085D-01,2.8377D-01,3.5756D-01,4.6698D-01,6.4315D-01,
+     &9.6485D-01,1.6969D+00,0.0000D+00,0.0000D+00,3.6944D-01,3.6187D-01,
+     &3.5380D-01,3.4525D-01,3.3659D-01,3.2716D-01,3.1761D-01,3.0767D-01,
+     &2.9759D-01,2.8675D-01,2.7586D-01,2.6462D-01,2.5339D-01,2.4660D-01,
+     &2.3933D-01,2.3101D-01,2.2257D-01,2.1415D-01,2.0571D-01,1.9854D-01,
+     &1.9083D-01,1.8216D-01,1.7338D-01,1.6480D-01,1.5613D-01,1.4885D-01/
+      DATA (XSF_L(K),K=  571,  684) /
+     &1.4115D-01,1.3244D-01,1.2380D-01,1.1542D-01,1.0713D-01,1.0031D-01,
+     &9.3226D-02,8.5515D-02,7.8171D-02,7.1449D-02,6.5307D-02,6.0723D-02,
+     &5.6523D-02,5.2878D-02,5.0622D-02,5.0109D-02,5.0720D-02,5.2187D-02,
+     &5.4770D-02,5.7950D-02,6.1582D-02,6.5595D-02,6.9997D-02,7.4716D-02,
+     &7.9677D-02,8.4886D-02,9.0221D-02,9.5543D-02,1.0065D-01,1.1245D-01,
+     &1.3012D-01,1.5166D-01,1.7859D-01,2.1305D-01,2.5881D-01,3.2188D-01,
+     &4.1454D-01,5.6186D-01,8.2718D-01,1.4188D+00,0.0000D+00,0.0000D+00,
+     &4.9195D-01,4.7916D-01,4.6620D-01,4.5277D-01,4.3908D-01,4.2463D-01,
+     &4.0985D-01,3.9491D-01,3.7975D-01,3.6377D-01,3.4790D-01,3.3178D-01,
+     &3.1592D-01,3.0640D-01,2.9622D-01,2.8462D-01,2.7303D-01,2.6160D-01,
+     &2.5012D-01,2.4047D-01,2.3023D-01,2.1867D-01,2.0717D-01,1.9597D-01,
+     &1.8477D-01,1.7546D-01,1.6568D-01,1.5468D-01,1.4387D-01,1.3343D-01,
+     &1.2319D-01,1.1482D-01,1.0622D-01,9.6828D-02,8.7978D-02,7.9884D-02,
+     &7.2526D-02,6.6973D-02,6.1948D-02,5.7359D-02,5.4304D-02,5.3263D-02,
+     &5.3381D-02,5.4456D-02,5.6601D-02,5.9380D-02,6.2613D-02,6.6252D-02,
+     &7.0174D-02,7.4432D-02,7.8943D-02,8.3559D-02,8.8282D-02,9.2963D-02,
+     &9.7382D-02,1.0858D-01,1.2441D-01,1.4363D-01,1.6745D-01,1.9778D-01,
+     &2.3771D-01,2.9246D-01,3.7200D-01,4.9738D-01,7.2010D-01,1.2083D+00,
+     &0.0000D+00,0.0000D+00,6.4521D-01,6.2534D-01,6.0540D-01,5.8499D-01/
+      DATA (XSF_L(K),K=  685,  798) /
+     &5.6467D-01,5.4301D-01,5.2143D-01,4.9951D-01,4.7813D-01,4.5538D-01,
+     &4.3325D-01,4.1083D-01,3.8899D-01,3.7591D-01,3.6210D-01,3.4648D-01,
+     &3.3091D-01,3.1578D-01,3.0062D-01,2.8797D-01,2.7469D-01,2.5979D-01,
+     &2.4501D-01,2.3066D-01,2.1649D-01,2.0481D-01,1.9252D-01,1.7884D-01,
+     &1.6549D-01,1.5274D-01,1.4029D-01,1.3018D-01,1.1985D-01,1.0865D-01,
+     &9.8135D-02,8.8550D-02,7.9829D-02,7.3318D-02,6.7269D-02,6.1748D-02,
+     &5.7838D-02,5.6250D-02,5.5826D-02,5.6474D-02,5.8181D-02,6.0533D-02,
+     &6.3373D-02,6.6563D-02,7.0085D-02,7.3865D-02,7.7842D-02,8.1937D-02,
+     &8.6092D-02,9.0169D-02,9.3962D-02,1.0448D-01,1.1858D-01,1.3561D-01,
+     &1.5663D-01,1.8318D-01,2.1803D-01,2.6529D-01,3.3349D-01,4.3985D-01,
+     &6.2661D-01,1.0291D+00,0.0000D+00,0.0000D+00,8.2462D-01,7.9558D-01,
+     &7.6680D-01,7.3764D-01,7.0860D-01,6.7834D-01,6.4822D-01,6.1798D-01,
+     &5.8880D-01,5.5792D-01,5.2800D-01,4.9801D-01,4.6912D-01,4.5197D-01,
+     &4.3393D-01,4.1360D-01,3.9348D-01,3.7394D-01,3.5462D-01,3.3856D-01,
+     &3.2180D-01,3.0303D-01,2.8460D-01,2.6681D-01,2.4932D-01,2.3502D-01,
+     &2.2005D-01,2.0359D-01,1.8747D-01,1.7224D-01,1.5746D-01,1.4551D-01,
+     &1.3337D-01,1.2028D-01,1.0805D-01,9.6986D-02,8.6877D-02,7.9334D-02,
+     &7.2326D-02,6.5799D-02,6.1060D-02,5.8911D-02,5.7957D-02,5.8189D-02,
+     &5.9441D-02,6.1387D-02,6.3834D-02,6.6632D-02,6.9732D-02,7.3070D-02/
+      DATA (XSF_L(K),K=  799,  912) /
+     &7.6595D-02,8.0190D-02,8.3816D-02,8.7358D-02,9.0631D-02,1.0046D-01,
+     &1.1304D-01,1.2815D-01,1.4670D-01,1.7006D-01,2.0049D-01,2.4154D-01,
+     &3.0039D-01,3.9121D-01,5.4894D-01,8.8378D-01,0.0000D+00,0.0000D+00,
+     &1.0199D+00,9.8025D-01,9.4100D-01,9.0151D-01,8.6283D-01,8.2243D-01,
+     &7.8262D-01,7.4321D-01,7.0465D-01,6.6494D-01,6.2647D-01,5.8811D-01,
+     &5.5152D-01,5.2985D-01,5.0721D-01,4.8183D-01,4.5681D-01,4.3274D-01,
+     &4.0883D-01,3.8916D-01,3.6878D-01,3.4589D-01,3.2366D-01,3.0238D-01,
+     &2.8152D-01,2.6437D-01,2.4685D-01,2.2733D-01,2.0858D-01,1.9085D-01,
+     &1.7375D-01,1.6000D-01,1.4607D-01,1.3115D-01,1.1722D-01,1.0469D-01,
+     &9.3284D-02,8.4739D-02,7.6803D-02,6.9420D-02,6.3844D-02,6.1178D-02,
+     &5.9720D-02,5.9561D-02,6.0398D-02,6.1984D-02,6.4051D-02,6.6494D-02,
+     &6.9202D-02,7.2161D-02,7.5274D-02,7.8453D-02,8.1651D-02,8.4728D-02,
+     &8.7564D-02,9.6777D-02,1.0806D-01,1.2157D-01,1.3806D-01,1.5882D-01,
+     &1.8566D-01,2.2170D-01,2.7301D-01,3.5168D-01,4.8696D-01,7.7010D-01,
+     &0.0000D+00,0.0000D+00,1.3158D+00,1.2585D+00,1.2024D+00,1.1462D+00,
+     &1.0919D+00,1.0352D+00,9.8042D-01,9.2608D-01,8.7345D-01,8.1987D-01,
+     &7.6814D-01,7.1724D-01,6.6882D-01,6.4053D-01,6.1093D-01,5.7796D-01,
+     &5.4572D-01,5.1470D-01,4.8433D-01,4.5934D-01,4.3358D-01,4.0495D-01,
+     &3.7717D-01,3.5082D-01,3.2513D-01,3.0408D-01,2.8258D-01,2.5918D-01/
+      DATA (XSF_L(K),K=  913, 1026) /
+     &2.3648D-01,2.1538D-01,1.9510D-01,1.7888D-01,1.6255D-01,1.4508D-01,
+     &1.2895D-01,1.1443D-01,1.0131D-01,9.1507D-02,8.2387D-02,7.3778D-02,
+     &6.7147D-02,6.3813D-02,6.1721D-02,6.1065D-02,6.1373D-02,6.2475D-02,
+     &6.4105D-02,6.6079D-02,6.8362D-02,7.0856D-02,7.3440D-02,7.6143D-02,
+     &7.8812D-02,8.1388D-02,8.3726D-02,9.2167D-02,1.0190D-01,1.1355D-01,
+     &1.2780D-01,1.4554D-01,1.6841D-01,1.9900D-01,2.4223D-01,3.0775D-01,
+     &4.1920D-01,6.4849D-01,0.0000D+00,0.0000D+00,1.6483D+00,1.5703D+00,
+     &1.4940D+00,1.4180D+00,1.3449D+00,1.2694D+00,1.1966D+00,1.1250D+00,
+     &1.0566D+00,9.8644D-01,9.1985D-01,8.5482D-01,7.9312D-01,7.5722D-01,
+     &7.1986D-01,6.7849D-01,6.3821D-01,5.9972D-01,5.6214D-01,5.3143D-01,
+     &4.9987D-01,4.6500D-01,4.3136D-01,3.9956D-01,3.6875D-01,3.4379D-01,
+     &3.1832D-01,2.9044D-01,2.6397D-01,2.3923D-01,2.1580D-01,1.9706D-01,
+     &1.7829D-01,1.5838D-01,1.3999D-01,1.2356D-01,1.0875D-01,9.7664D-02,
+     &8.7392D-02,7.7645D-02,7.0035D-02,6.6062D-02,6.3365D-02,6.2239D-02,
+     &6.2062D-02,6.2731D-02,6.3942D-02,6.5526D-02,6.7390D-02,6.9436D-02,
+     &7.1635D-02,7.3891D-02,7.6122D-02,7.8246D-02,8.0196D-02,8.7884D-02,
+     &9.6357D-02,1.0648D-01,1.1880D-01,1.3413D-01,1.5386D-01,1.7993D-01,
+     &2.1655D-01,2.7189D-01,3.6486D-01,5.5332D-01,0.0000D+00,0.0000D+00,
+     &2.0271D+00,1.9234D+00,1.8224D+00,1.7226D+00,1.6272D+00,1.5293D+00/
+      DATA (XSF_L(K),K= 1027, 1140) /
+     &1.4356D+00,1.3438D+00,1.2568D+00,1.1682D+00,1.0841D+00,1.0026D+00,
+     &9.2625D-01,8.8207D-01,8.3568D-01,7.8523D-01,7.3607D-01,6.8926D-01,
+     &6.4385D-01,6.0685D-01,5.6892D-01,5.2730D-01,4.8731D-01,4.4961D-01,
+     &4.1331D-01,3.8417D-01,3.5441D-01,3.2210D-01,2.9168D-01,2.6323D-01,
+     &2.3631D-01,2.1500D-01,1.9374D-01,1.7129D-01,1.5067D-01,1.3231D-01,
+     &1.1579D-01,1.0349D-01,9.2080D-02,8.1205D-02,7.2626D-02,6.8039D-02,
+     &6.4761D-02,6.3188D-02,6.2549D-02,6.2795D-02,6.3617D-02,6.4835D-02,
+     &6.6329D-02,6.8017D-02,6.9809D-02,7.1667D-02,7.3520D-02,7.5270D-02,
+     &7.6864D-02,8.3899D-02,9.1206D-02,1.0002D-01,1.1070D-01,1.2399D-01,
+     &1.4094D-01,1.6341D-01,1.9474D-01,2.4163D-01,3.1971D-01,4.7587D-01,
+     &0.0000D+00,0.0000D+00,2.4392D+00,2.3049D+00,2.1760D+00,2.0502D+00,
+     &1.9296D+00,1.8065D+00,1.6895D+00,1.5750D+00,1.4674D+00,1.3585D+00,
+     &1.2554D+00,1.1565D+00,1.0638D+00,1.0103D+00,9.5527D-01,8.9449D-01,
+     &8.3572D-01,7.8018D-01,7.2635D-01,6.8280D-01,6.3819D-01,5.8948D-01,
+     &5.4299D-01,4.9923D-01,4.5740D-01,4.2371D-01,3.8978D-01,3.5296D-01,
+     &3.1832D-01,2.8629D-01,2.5599D-01,2.3212D-01,2.0840D-01,1.8346D-01,
+     &1.6065D-01,1.4043D-01,1.2229D-01,1.0880D-01,9.6294D-02,8.4335D-02,
+     &7.4905D-02,6.9717D-02,6.5897D-02,6.3914D-02,6.2851D-02,6.2731D-02,
+     &6.3183D-02,6.4075D-02,6.5225D-02,6.6597D-02,6.8048D-02,6.9577D-02/
+      DATA (XSF_L(K),K= 1141, 1254) /
+     &7.1093D-02,7.2525D-02,7.3842D-02,8.0241D-02,8.6615D-02,9.4292D-02,
+     &1.0360D-01,1.1517D-01,1.2992D-01,1.4936D-01,1.7633D-01,2.1652D-01,
+     &2.8294D-01,4.1389D-01,0.0000D+00,0.0000D+00,2.9162D+00,2.7470D+00,
+     &2.5840D+00,2.4244D+00,2.2743D+00,2.1215D+00,1.9764D+00,1.8358D+00,
+     &1.7035D+00,1.5708D+00,1.4463D+00,1.3268D+00,1.2152D+00,1.1514D+00,
+     &1.0857D+00,1.0132D+00,9.4449D-01,8.7867D-01,8.1556D-01,7.6453D-01,
+     &7.1252D-01,6.5602D-01,6.0218D-01,5.5192D-01,5.0387D-01,4.6545D-01,
+     &4.2679D-01,3.8521D-01,3.4602D-01,3.1005D-01,2.7623D-01,2.4962D-01,
+     &2.2332D-01,1.9577D-01,1.7070D-01,1.4856D-01,1.2874D-01,1.1402D-01,
+     &1.0040D-01,8.7343D-02,7.6984D-02,7.1254D-02,6.6892D-02,6.4508D-02,
+     &6.3019D-02,6.2518D-02,6.2667D-02,6.3211D-02,6.4031D-02,6.5064D-02,
+     &6.6243D-02,6.7458D-02,6.8679D-02,6.9830D-02,7.0885D-02,7.6672D-02,
+     &8.2192D-02,8.8844D-02,9.6930D-02,1.0696D-01,1.1972D-01,1.3654D-01,
+     &1.5978D-01,1.9411D-01,2.5048D-01,3.6023D-01,0.0000D+00,0.0000D+00,
+     &3.4281D+00,3.2194D+00,3.0180D+00,2.8239D+00,2.6400D+00,2.4537D+00,
+     &2.2781D+00,2.1087D+00,1.9503D+00,1.7915D+00,1.6433D+00,1.5021D+00,
+     &1.3711D+00,1.2958D+00,1.2191D+00,1.1350D+00,1.0536D+00,9.7846D-01,
+     &9.0526D-01,8.4668D-01,7.8697D-01,7.2243D-01,6.6110D-01,6.0402D-01,
+     &5.4971D-01,5.0652D-01,4.6307D-01,4.1647D-01,3.7287D-01,3.3288D-01/
+      DATA (XSF_L(K),K= 1255, 1368) /
+     &2.9545D-01,2.6636D-01,2.3751D-01,2.0740D-01,1.8012D-01,1.5611D-01,
+     &1.3467D-01,1.1881D-01,1.0414D-01,9.0105D-02,7.8839D-02,7.2563D-02,
+     &6.7703D-02,6.4930D-02,6.3070D-02,6.2241D-02,6.2071D-02,6.2347D-02,
+     &6.2882D-02,6.3645D-02,6.4526D-02,6.5473D-02,6.6427D-02,6.7333D-02,
+     &6.8194D-02,7.3430D-02,7.8217D-02,8.3974D-02,9.1017D-02,9.9745D-02,
+     &1.1088D-01,1.2552D-01,1.4563D-01,1.7528D-01,2.2351D-01,3.1636D-01,
+     &0.0000D+00,0.0000D+00,3.9892D+00,3.7328D+00,3.4900D+00,3.2549D+00,
+     &3.0344D+00,2.8108D+00,2.6014D+00,2.4001D+00,2.2123D+00,2.0253D+00,
+     &1.8518D+00,1.6860D+00,1.5339D+00,1.4463D+00,1.3575D+00,1.2608D+00,
+     &1.1678D+00,1.0809D+00,9.9767D-01,9.3087D-01,8.6314D-01,7.8996D-01,
+     &7.2083D-01,6.5671D-01,5.9602D-01,5.4775D-01,4.9935D-01,4.4773D-01,
+     &3.9951D-01,3.5571D-01,3.1467D-01,2.8272D-01,2.5135D-01,2.1871D-01,
+     &1.8923D-01,1.6331D-01,1.4031D-01,1.2332D-01,1.0762D-01,9.2560D-02,
+     &8.0473D-02,7.3714D-02,6.8385D-02,6.5246D-02,6.3019D-02,6.1878D-02,
+     &6.1420D-02,6.1413D-02,6.1734D-02,6.2226D-02,6.2861D-02,6.3564D-02,
+     &6.4288D-02,6.4985D-02,6.5657D-02,7.0367D-02,7.4522D-02,7.9506D-02,
+     &8.5651D-02,9.3297D-02,1.0298D-01,1.1572D-01,1.3323D-01,1.5884D-01,
+     &2.0039D-01,2.7925D-01,0.0000D+00,0.0000D+00,4.5788D+00,4.2729D+00,
+     &3.9840D+00,3.7039D+00,3.4438D+00,3.1812D+00,2.9349D+00,2.6996D+00/
+      DATA (XSF_L(K),K= 1369, 1482) /
+     &2.4810D+00,2.2644D+00,2.0633D+00,1.8732D+00,1.6979D+00,1.5988D+00,
+     &1.4974D+00,1.3865D+00,1.2812D+00,1.1834D+00,1.0891D+00,1.0143D+00,
+     &9.3839D-01,8.5662D-01,7.7948D-01,7.0838D-01,6.4106D-01,5.8780D-01,
+     &5.3454D-01,4.7781D-01,4.2528D-01,3.7737D-01,3.3289D-01,2.9818D-01,
+     &2.6446D-01,2.2932D-01,1.9770D-01,1.7005D-01,1.4552D-01,1.2746D-01,
+     &1.1078D-01,9.4770D-02,8.1957D-02,7.4689D-02,6.8915D-02,6.5457D-02,
+     &6.2902D-02,6.1493D-02,6.0768D-02,6.0515D-02,6.0585D-02,6.0863D-02,
+     &6.1298D-02,6.1789D-02,6.2311D-02,6.2835D-02,6.3340D-02,6.7601D-02,
+     &7.1162D-02,7.5516D-02,8.0878D-02,8.7566D-02,9.6095D-02,1.0725D-01,
+     &1.2258D-01,1.4495D-01,1.8090D-01,2.4841D-01,0.0000D+00,0.0000D+00,
+     &5.4774D+00,5.0929D+00,4.7320D+00,4.3841D+00,4.0592D+00,3.7350D+00,
+     &3.4329D+00,3.1454D+00,2.8799D+00,2.6172D+00,2.3747D+00,2.1466D+00,
+     &1.9383D+00,1.8195D+00,1.6996D+00,1.5689D+00,1.4457D+00,1.3301D+00,
+     &1.2211D+00,1.1339D+00,1.0456D+00,9.5119D-01,8.6259D-01,7.8097D-01,
+     &7.0419D-01,6.4380D-01,5.8358D-01,5.1955D-01,4.6051D-01,4.0719D-01,
+     &3.5768D-01,3.1962D-01,2.8220D-01,2.4360D-01,2.0909D-01,1.7895D-01,
+     &1.5240D-01,1.3282D-01,1.1484D-01,9.7655D-02,8.3739D-02,7.5857D-02,
+     &6.9509D-02,6.5616D-02,6.2633D-02,6.0853D-02,5.9819D-02,5.9271D-02,
+     &5.9038D-02,5.9046D-02,5.9192D-02,5.9432D-02,5.9709D-02,6.0008D-02/
+      DATA (XSF_L(K),K= 1483, 1596) /
+     &6.0340D-02,6.4032D-02,6.6851D-02,7.0446D-02,7.4870D-02,8.0457D-02,
+     &8.7554D-02,9.6862D-02,1.0964D-01,1.2821D-01,1.5779D-01,2.1189D-01,
+     &0.0000D+00,0.0000D+00,6.3982D+00,5.9307D+00,5.4920D+00,5.0710D+00,
+     &4.6822D+00,4.2915D+00,3.9337D+00,3.5898D+00,3.2756D+00,2.9660D+00,
+     &2.6817D+00,2.4150D+00,2.1724D+00,2.0348D+00,1.8961D+00,1.7457D+00,
+     &1.6034D+00,1.4714D+00,1.3471D+00,1.2473D+00,1.1476D+00,1.0408D+00,
+     &9.4083D-01,8.4932D-01,7.6350D-01,6.9606D-01,6.2897D-01,5.5833D-01,
+     &4.9315D-01,4.3444D-01,3.8044D-01,3.3861D-01,2.9817D-01,2.5642D-01,
+     &2.1917D-01,1.8685D-01,1.5838D-01,1.3752D-01,1.1831D-01,9.9987D-02,
+     &8.5224D-02,7.6762D-02,6.9910D-02,6.5655D-02,6.2297D-02,6.0213D-02,
+     &5.8897D-02,5.8096D-02,5.7624D-02,5.7400D-02,5.7322D-02,5.7351D-02,
+     &5.7432D-02,5.7560D-02,5.7758D-02,6.0939D-02,6.3212D-02,6.6167D-02,
+     &6.9884D-02,7.4560D-02,8.0552D-02,8.8432D-02,9.9242D-02,1.1491D-01,
+     &1.3966D-01,1.8320D-01,0.0000D+00,0.0000D+00,7.4490D+00,6.8826D+00,
+     &6.3540D+00,5.8477D+00,5.3805D+00,4.9187D+00,4.4884D+00,4.0843D+00,
+     &3.7147D+00,3.3516D+00,3.0193D+00,2.7088D+00,2.4279D+00,2.2696D+00,
+     &2.1091D+00,1.9368D+00,1.7739D+00,1.6237D+00,1.4821D+00,1.3692D+00,
+     &1.2557D+00,1.1358D+00,1.0238D+00,9.2133D-01,8.2567D-01,7.5070D-01,
+     &6.7656D-01,5.9850D-01,5.2688D-01,4.6263D-01,4.0371D-01,3.5842D-01/
+      DATA (XSF_L(K),K= 1597, 1710) /
+     &3.1427D-01,2.6933D-01,2.2930D-01,1.9466D-01,1.6427D-01,1.4208D-01,
+     &1.2168D-01,1.0226D-01,8.6560D-02,7.7553D-02,7.0202D-02,6.5576D-02,
+     &6.1860D-02,5.9487D-02,5.7920D-02,5.6852D-02,5.6166D-02,5.5736D-02,
+     &5.5458D-02,5.5289D-02,5.5193D-02,5.5163D-02,5.5243D-02,5.7935D-02,
+     &5.9740D-02,6.2111D-02,6.5158D-02,6.9050D-02,7.4078D-02,8.0683D-02,
+     &8.9776D-02,1.0288D-01,1.2351D-01,1.5725D-01,0.0000D+00,0.0000D+00,
+     &8.6044D+00,7.9255D+00,7.2940D+00,6.6940D+00,6.1391D+00,5.5940D+00,
+     &5.0907D+00,4.6180D+00,4.1841D+00,3.7622D+00,3.3775D+00,3.0195D+00,
+     &2.6967D+00,2.5153D+00,2.3331D+00,2.1364D+00,1.9521D+00,1.7815D+00,
+     &1.6211D+00,1.4944D+00,1.3683D+00,1.2334D+00,1.1084D+00,9.9465D-01,
+     &8.8864D-01,8.0585D-01,7.2432D-01,6.3866D-01,5.6038D-01,4.9058D-01,
+     &4.2648D-01,3.7768D-01,3.3036D-01,2.8189D-01,2.3907D-01,2.0214D-01,
+     &1.6987D-01,1.4635D-01,1.2479D-01,1.0428D-01,8.7748D-02,7.8203D-02,
+     &7.0386D-02,6.5431D-02,6.1373D-02,5.8719D-02,5.6916D-02,5.5642D-02,
+     &5.4751D-02,5.4118D-02,5.3653D-02,5.3314D-02,5.3067D-02,5.2897D-02,
+     &5.2861D-02,5.5140D-02,5.6493D-02,5.8378D-02,6.0860D-02,6.4090D-02,
+     &6.8261D-02,7.3828D-02,8.1439D-02,9.2423D-02,1.0952D-01,1.3424D-01,
+     &0.0000D+00,0.0000D+00,9.7645D+00,8.9701D+00,8.2340D+00,7.5357D+00,
+     &6.8926D+00,6.2607D+00,5.6834D+00,5.1374D+00,4.6459D+00,4.1625D+00/
+      DATA (XSF_L(K),K= 1711, 1824) /
+     &3.7261D+00,3.3206D+00,2.9567D+00,2.7529D+00,2.5476D+00,2.3274D+00,
+     &2.1217D+00,1.9320D+00,1.7541D+00,1.6131D+00,1.4740D+00,1.3257D+00,
+     &1.1879D+00,1.0631D+00,9.4732D-01,8.5726D-01,7.6844D-01,6.7586D-01,
+     &5.9131D-01,5.1597D-01,4.4748D-01,3.9504D-01,3.4470D-01,2.9317D-01,
+     &2.4779D-01,2.0880D-01,1.7478D-01,1.5007D-01,1.2748D-01,1.0600D-01,
+     &8.8713D-02,7.8704D-02,7.0472D-02,6.5220D-02,6.0885D-02,5.7993D-02,
+     &5.5967D-02,5.4536D-02,5.3470D-02,5.2665D-02,5.2054D-02,5.1577D-02,
+     &5.1203D-02,5.0930D-02,5.0809D-02,5.2731D-02,5.3716D-02,5.5192D-02,
+     &5.7203D-02,5.9902D-02,6.3412D-02,6.8123D-02,7.4602D-02,8.3905D-02,
+     &9.8185D-02,1.1515D-01,0.0000D+00,0.0000D+00,1.1069D+01,1.0141D+01,
+     &9.2840D+00,8.4741D+00,7.7316D+00,7.0038D+00,6.3364D+00,5.7137D+00,
+     &5.1475D+00,4.6031D+00,4.1059D+00,3.6477D+00,3.2381D+00,3.0086D+00,
+     &2.7788D+00,2.5333D+00,2.3033D+00,2.0926D+00,1.8951D+00,1.7404D+00,
+     &1.5854D+00,1.4229D+00,1.2715D+00,1.1352D+00,1.0089D+00,9.1089D-01,
+     &8.1457D-01,7.1424D-01,6.2332D-01,5.4229D-01,4.6872D-01,4.1295D-01,
+     &3.5903D-01,3.0454D-01,2.5654D-01,2.1539D-01,1.7965D-01,1.5373D-01,
+     &1.3011D-01,1.0766D-01,8.9530D-02,7.9108D-02,7.0483D-02,6.4943D-02,
+     &6.0331D-02,5.7203D-02,5.4990D-02,5.3395D-02,5.2144D-02,5.1206D-02,
+     &5.0454D-02,4.9840D-02,4.9351D-02,4.8978D-02,4.8801D-02,5.0351D-02/
+      DATA (XSF_L(K),K= 1825, 1836) /
+     &5.1017D-02,5.2127D-02,5.3737D-02,5.5934D-02,5.8835D-02,6.2800D-02,
+     &6.8260D-02,7.6135D-02,8.7873D-02,0.0000D+00,0.0000D+00,0.0000D+00/
+      DATA (XGF_L(K),K=    1,  114) /
+     &1.0646D+00,1.0934D+00,1.1214D+00,1.1484D+00,1.1741D+00,1.1999D+00,
+     &1.2242D+00,1.2466D+00,1.2676D+00,1.2873D+00,1.3042D+00,1.3194D+00,
+     &1.3313D+00,1.3376D+00,1.3430D+00,1.3472D+00,1.3502D+00,1.3504D+00,
+     &1.3501D+00,1.3478D+00,1.3430D+00,1.3356D+00,1.3267D+00,1.3149D+00,
+     &1.3003D+00,1.2857D+00,1.2680D+00,1.2451D+00,1.2189D+00,1.1899D+00,
+     &1.1575D+00,1.1282D+00,1.0947D+00,1.0543D+00,1.0121D+00,9.6983D-01,
+     &9.2809D-01,8.9556D-01,8.6663D-01,8.4606D-01,8.4971D-01,8.7714D-01,
+     &9.3569D-01,1.0140D+00,1.1325D+00,1.2706D+00,1.4268D+00,1.6005D+00,
+     &1.7918D+00,2.0014D+00,2.2301D+00,2.4791D+00,2.7490D+00,3.0404D+00,
+     &3.3541D+00,3.5718D+00,4.2579D+00,5.0478D+00,5.9674D+00,7.0458D+00,
+     &8.3375D+00,9.9284D+00,1.1949D+01,1.4650D+01,1.8560D+01,2.5096D+01,
+     &4.0067D+01,0.0000D+00,1.6404D+00,1.6723D+00,1.7014D+00,1.7287D+00,
+     &1.7533D+00,1.7768D+00,1.7973D+00,1.8152D+00,1.8297D+00,1.8417D+00,
+     &1.8498D+00,1.8540D+00,1.8544D+00,1.8526D+00,1.8489D+00,1.8424D+00,
+     &1.8335D+00,1.8221D+00,1.8091D+00,1.7949D+00,1.7784D+00,1.7555D+00,
+     &1.7310D+00,1.7034D+00,1.6713D+00,1.6428D+00,1.6093D+00,1.5680D+00,
+     &1.5230D+00,1.4754D+00,1.4241D+00,1.3785D+00,1.3278D+00,1.2681D+00,
+     &1.2068D+00,1.1462D+00,1.0867D+00,1.0400D+00,9.9665D-01,9.6041D-01,
+     &9.4923D-01,9.6563D-01,1.0117D+00,1.0781D+00,1.1816D+00,1.3028D+00/
+      DATA (XGF_L(K),K=  115,  228) /
+     &1.4397D+00,1.5912D+00,1.7573D+00,1.9376D+00,2.1326D+00,2.3425D+00,
+     &2.5677D+00,2.8078D+00,3.0611D+00,3.2398D+00,3.7904D+00,4.4126D+00,
+     &5.1162D+00,5.9322D+00,6.8841D+00,8.0278D+00,9.4403D+00,1.1276D+01,
+     &1.3844D+01,1.7948D+01,2.6821D+01,0.0000D+00,2.5295D+00,2.5563D+00,
+     &2.5800D+00,2.5995D+00,2.6174D+00,2.6286D+00,2.6363D+00,2.6395D+00,
+     &2.6379D+00,2.6306D+00,2.6184D+00,2.6000D+00,2.5768D+00,2.5598D+00,
+     &2.5397D+00,2.5137D+00,2.4839D+00,2.4516D+00,2.4161D+00,2.3833D+00,
+     &2.3459D+00,2.3000D+00,2.2499D+00,2.1966D+00,2.1407D+00,2.0900D+00,
+     &2.0320D+00,1.9647D+00,1.8929D+00,1.8190D+00,1.7411D+00,1.6734D+00,
+     &1.5997D+00,1.5142D+00,1.4279D+00,1.3438D+00,1.2617D+00,1.1967D+00,
+     &1.1353D+00,1.0800D+00,1.0501D+00,1.0526D+00,1.0849D+00,1.1369D+00,
+     &1.2228D+00,1.3250D+00,1.4410D+00,1.5691D+00,1.7085D+00,1.8587D+00,
+     &2.0200D+00,2.1915D+00,2.3728D+00,2.5633D+00,2.7603D+00,2.9047D+00,
+     &3.3315D+00,3.8026D+00,4.3243D+00,4.9121D+00,5.5828D+00,6.3648D+00,
+     &7.3038D+00,8.4817D+00,1.0068D+01,1.2484D+01,1.7398D+01,0.0000D+00,
+     &3.9781D+00,3.9859D+00,3.9880D+00,3.9845D+00,3.9763D+00,3.9582D+00,
+     &3.9337D+00,3.9028D+00,3.8636D+00,3.8159D+00,3.7613D+00,3.6984D+00,
+     &3.6287D+00,3.5836D+00,3.5326D+00,3.4703D+00,3.4046D+00,3.3350D+00,
+     &3.2612D+00,3.1962D+00,3.1248D+00,3.0388D+00,2.9485D+00,2.8565D+00/
+      DATA (XGF_L(K),K=  229,  342) /
+     &2.7591D+00,2.6752D+00,2.5823D+00,2.4756D+00,2.3627D+00,2.2510D+00,
+     &2.1352D+00,2.0365D+00,1.9308D+00,1.8097D+00,1.6896D+00,1.5737D+00,
+     &1.4618D+00,1.3735D+00,1.2886D+00,1.2087D+00,1.1551D+00,1.1411D+00,
+     &1.1545D+00,1.1903D+00,1.2550D+00,1.3356D+00,1.4282D+00,1.5306D+00,
+     &1.6419D+00,1.7606D+00,1.8869D+00,2.0194D+00,2.1574D+00,2.2992D+00,
+     &2.4432D+00,2.5568D+00,2.8674D+00,3.2008D+00,3.5626D+00,3.9572D+00,
+     &4.3932D+00,4.8857D+00,5.4544D+00,6.1386D+00,7.0188D+00,8.2895D+00,
+     &1.0709D+01,0.0000D+00,6.3697D+00,6.3265D+00,6.2740D+00,6.2091D+00,
+     &6.1391D+00,6.0517D+00,5.9560D+00,5.8525D+00,5.7367D+00,5.6106D+00,
+     &5.4709D+00,5.3235D+00,5.1695D+00,5.0724D+00,4.9662D+00,4.8411D+00,
+     &4.7105D+00,4.5784D+00,4.4412D+00,4.3226D+00,4.1943D+00,4.0442D+00,
+     &3.8903D+00,3.7360D+00,3.5773D+00,3.4420D+00,3.2967D+00,3.1301D+00,
+     &2.9593D+00,2.7916D+00,2.6229D+00,2.4802D+00,2.3301D+00,2.1613D+00,
+     &1.9957D+00,1.8382D+00,1.6875D+00,1.5691D+00,1.4545D+00,1.3433D+00,
+     &1.2614D+00,1.2264D+00,1.2177D+00,1.2342D+00,1.2749D+00,1.3313D+00,
+     &1.3987D+00,1.4740D+00,1.5559D+00,1.6431D+00,1.7346D+00,1.8295D+00,
+     &1.9260D+00,2.0232D+00,2.1174D+00,2.2034D+00,2.4118D+00,2.6289D+00,
+     &2.8563D+00,3.0948D+00,3.3486D+00,3.6231D+00,3.9250D+00,4.2677D+00,
+     &4.6847D+00,5.2492D+00,6.2650D+00,0.0000D+00,9.3778D+00,9.2428D+00/
+      DATA (XGF_L(K),K=  343,  456) /
+     &9.0960D+00,8.9365D+00,8.7665D+00,8.5746D+00,8.3714D+00,8.1544D+00,
+     &7.9343D+00,7.6882D+00,7.4352D+00,7.1724D+00,6.9027D+00,6.7360D+00,
+     &6.5571D+00,6.3494D+00,6.1374D+00,5.9260D+00,5.7093D+00,5.5249D+00,
+     &5.3270D+00,5.0995D+00,4.8700D+00,4.6419D+00,4.4114D+00,4.2173D+00,
+     &4.0129D+00,3.7786D+00,3.5451D+00,3.3173D+00,3.0900D+00,2.9004D+00,
+     &2.7040D+00,2.4853D+00,2.2734D+00,2.0742D+00,1.8851D+00,1.7372D+00,
+     &1.5941D+00,1.4536D+00,1.3433D+00,1.2893D+00,1.2607D+00,1.2587D+00,
+     &1.2792D+00,1.3153D+00,1.3616D+00,1.4149D+00,1.4736D+00,1.5361D+00,
+     &1.6012D+00,1.6677D+00,1.7344D+00,1.7990D+00,1.8589D+00,1.9261D+00,
+     &2.0646D+00,2.2044D+00,2.3456D+00,2.4882D+00,2.6342D+00,2.7823D+00,
+     &2.9370D+00,3.1022D+00,3.2902D+00,3.5288D+00,3.9528D+00,0.0000D+00,
+     &1.3926D+01,1.3617D+01,1.3298D+01,1.2959D+01,1.2612D+01,1.2230D+01,
+     &1.1845D+01,1.1442D+01,1.1036D+01,1.0599D+01,1.0158D+01,9.7041D+00,
+     &9.2562D+00,8.9827D+00,8.6974D+00,8.3632D+00,8.0255D+00,7.6946D+00,
+     &7.3614D+00,7.0802D+00,6.7814D+00,6.4439D+00,6.1064D+00,5.7775D+00,
+     &5.4468D+00,5.1723D+00,4.8858D+00,4.5617D+00,4.2425D+00,3.9361D+00,
+     &3.6353D+00,3.3874D+00,3.1301D+00,2.8506D+00,2.5816D+00,2.3318D+00,
+     &2.0965D+00,1.9136D+00,1.7368D+00,1.5622D+00,1.4211D+00,1.3452D+00,
+     &1.2937D+00,1.2737D+00,1.2719D+00,1.2868D+00,1.3119D+00,1.3437D+00/
+      DATA (XGF_L(K),K=  457,  570) /
+     &1.3799D+00,1.4189D+00,1.4596D+00,1.5003D+00,1.5401D+00,1.5761D+00,
+     &1.6073D+00,1.6574D+00,1.7377D+00,1.8158D+00,1.8902D+00,1.9601D+00,
+     &2.0263D+00,2.0884D+00,2.1452D+00,2.1990D+00,2.2512D+00,2.3118D+00,
+     &2.4354D+00,0.0000D+00,1.9256D+01,1.8699D+01,1.8142D+01,1.7563D+01,
+     &1.6980D+01,1.6355D+01,1.5725D+01,1.5081D+01,1.4443D+01,1.3769D+01,
+     &1.3097D+01,1.2422D+01,1.1755D+01,1.1358D+01,1.0937D+01,1.0454D+01,
+     &9.9818D+00,9.5167D+00,9.0465D+00,8.6570D+00,8.2473D+00,7.7870D+00,
+     &7.3320D+00,6.8911D+00,6.4569D+00,6.0969D+00,5.7223D+00,5.3051D+00,
+     &4.8992D+00,4.5131D+00,4.1351D+00,3.8285D+00,3.5148D+00,3.1749D+00,
+     &2.8517D+00,2.5534D+00,2.2748D+00,2.0598D+00,1.8527D+00,1.6465D+00,
+     &1.4780D+00,1.3832D+00,1.3129D+00,1.2758D+00,1.2566D+00,1.2544D+00,
+     &1.2628D+00,1.2778D+00,1.2971D+00,1.3186D+00,1.3412D+00,1.3637D+00,
+     &1.3845D+00,1.4021D+00,1.4142D+00,1.4518D+00,1.4945D+00,1.5327D+00,
+     &1.5661D+00,1.5941D+00,1.6160D+00,1.6309D+00,1.6386D+00,1.6381D+00,
+     &1.6291D+00,1.6176D+00,1.6271D+00,0.0000D+00,2.5945D+01,2.5063D+01,
+     &2.4160D+01,2.3234D+01,2.2336D+01,2.1370D+01,2.0417D+01,1.9450D+01,
+     &1.8508D+01,1.7517D+01,1.6548D+01,1.5580D+01,1.4645D+01,1.4085D+01,
+     &1.3496D+01,1.2836D+01,1.2181D+01,1.1547D+01,1.0921D+01,1.0404D+01,
+     &9.8614D+00,9.2547D+00,8.6616D+00,8.0926D+00,7.5352D+00,7.0774D+00/
+      DATA (XGF_L(K),K=  571,  684) /
+     &6.6043D+00,6.0842D+00,5.5816D+00,5.1040D+00,4.6450D+00,4.2749D+00,
+     &3.8995D+00,3.4941D+00,3.1134D+00,2.7651D+00,2.4423D+00,2.1941D+00,
+     &1.9564D+00,1.7198D+00,1.5241D+00,1.4112D+00,1.3220D+00,1.2705D+00,
+     &1.2348D+00,1.2175D+00,1.2113D+00,1.2119D+00,1.2167D+00,1.2238D+00,
+     &1.2321D+00,1.2398D+00,1.2460D+00,1.2491D+00,1.2470D+00,1.2752D+00,
+     &1.2894D+00,1.2998D+00,1.3055D+00,1.3049D+00,1.2991D+00,1.2860D+00,
+     &1.2655D+00,1.2370D+00,1.1998D+00,1.1564D+00,1.1181D+00,0.0000D+00,
+     &3.3362D+01,3.2051D+01,3.0740D+01,2.9429D+01,2.8133D+01,2.6758D+01,
+     &2.5422D+01,2.4082D+01,2.2784D+01,2.1435D+01,2.0130D+01,1.8839D+01,
+     &1.7597D+01,1.6865D+01,1.6098D+01,1.5241D+01,1.4397D+01,1.3587D+01,
+     &1.2791D+01,1.2130D+01,1.1444D+01,1.0687D+01,9.9507D+00,9.2501D+00,
+     &8.5659D+00,8.0104D+00,7.4390D+00,6.8118D+00,6.2125D+00,5.6506D+00,
+     &5.1096D+00,4.6780D+00,4.2434D+00,3.7769D+00,3.3424D+00,2.9475D+00,
+     &2.5842D+00,2.3061D+00,2.0409D+00,1.7770D+00,1.5572D+00,1.4290D+00,
+     &1.3248D+00,1.2609D+00,1.2112D+00,1.1814D+00,1.1636D+00,1.1530D+00,
+     &1.1469D+00,1.1433D+00,1.1407D+00,1.1378D+00,1.1337D+00,1.1269D+00,
+     &1.1152D+00,1.1360D+00,1.1320D+00,1.1243D+00,1.1127D+00,1.0960D+00,
+     &1.0739D+00,1.0461D+00,1.0122D+00,9.7100D-01,9.2292D-01,8.6909D-01,
+     &8.1432D-01,0.0000D+00,4.2364D+01,4.0483D+01,3.8640D+01,3.6792D+01/
+      DATA (XGF_L(K),K=  685,  798) /
+     &3.4991D+01,3.3112D+01,3.1295D+01,2.9487D+01,2.7748D+01,2.5953D+01,
+     &2.4235D+01,2.2543D+01,2.0935D+01,1.9990D+01,1.9011D+01,1.7921D+01,
+     &1.6852D+01,1.5830D+01,1.4831D+01,1.4013D+01,1.3165D+01,1.2236D+01,
+     &1.1337D+01,1.0485D+01,9.6616D+00,8.9943D+00,8.3137D+00,7.5711D+00,
+     &6.8670D+00,6.2090D+00,5.5842D+00,5.0866D+00,4.5873D+00,4.0564D+00,
+     &3.5646D+00,3.1234D+00,2.7185D+00,2.4107D+00,2.1172D+00,1.8273D+00,
+     &1.5836D+00,1.4407D+00,1.3211D+00,1.2459D+00,1.1839D+00,1.1433D+00,
+     &1.1153D+00,1.0949D+00,1.0794D+00,1.0667D+00,1.0555D+00,1.0443D+00,
+     &1.0317D+00,1.0172D+00,9.9883D-01,1.0131D+00,9.9503D-01,9.7446D-01,
+     &9.5064D-01,9.2316D-01,8.9156D-01,8.5528D-01,8.1439D-01,7.6837D-01,
+     &7.1718D-01,6.6210D-01,6.0243D-01,0.0000D+00,5.2603D+01,5.0038D+01,
+     &4.7540D+01,4.5053D+01,4.2652D+01,4.0175D+01,3.7784D+01,3.5407D+01,
+     &3.3154D+01,3.0851D+01,2.8651D+01,2.6507D+01,2.4488D+01,2.3310D+01,
+     &2.2084D+01,2.0735D+01,1.9418D+01,1.8166D+01,1.6951D+01,1.5960D+01,
+     &1.4935D+01,1.3817D+01,1.2742D+01,1.1732D+01,1.0759D+01,9.9749D+00,
+     &9.1794D+00,8.3186D+00,7.5044D+00,6.7510D+00,6.0386D+00,5.4762D+00,
+     &4.9137D+00,4.3200D+00,3.7728D+00,3.2842D+00,2.8391D+00,2.5026D+00,
+     &2.1835D+00,1.8677D+00,1.6033D+00,1.4461D+00,1.3138D+00,1.2277D+00,
+     &1.1557D+00,1.1057D+00,1.0689D+00,1.0407D+00,1.0176D+00,9.9768D-01/
+      DATA (XGF_L(K),K=  799,  912) /
+     &9.7951D-01,9.6199D-01,9.4331D-01,9.2359D-01,9.0058D-01,9.0921D-01,
+     &8.8156D-01,8.5244D-01,8.2081D-01,7.8702D-01,7.5025D-01,7.1005D-01,
+     &6.6667D-01,6.1984D-01,5.6969D-01,5.1748D-01,4.5895D-01,0.0000D+00,
+     &6.3459D+01,6.0127D+01,5.6900D+01,5.3695D+01,5.0615D+01,4.7464D+01,
+     &4.4440D+01,4.1483D+01,3.8684D+01,3.5826D+01,3.3122D+01,3.0500D+01,
+     &2.8040D+01,2.6617D+01,2.5143D+01,2.3518D+01,2.1950D+01,2.0455D+01,
+     &1.9011D+01,1.7842D+01,1.6646D+01,1.5337D+01,1.4094D+01,1.2920D+01,
+     &1.1799D+01,1.0903D+01,9.9940D+00,9.0166D+00,8.0967D+00,7.2512D+00,
+     &6.4551D+00,5.8279D+00,5.2081D+00,4.5519D+00,3.9568D+00,3.4237D+00,
+     &2.9425D+00,2.5798D+00,2.2371D+00,1.8995D+00,1.6161D+00,1.4477D+00,
+     &1.3046D+00,1.2096D+00,1.1285D+00,1.0709D+00,1.0274D+00,9.9290D-01,
+     &9.6399D-01,9.3860D-01,9.1550D-01,8.9324D-01,8.7036D-01,8.4674D-01,
+     &8.2129D-01,8.2506D-01,7.9094D-01,7.5633D-01,7.2031D-01,6.8307D-01,
+     &6.4387D-01,6.0237D-01,5.5907D-01,5.1344D-01,4.6618D-01,4.1810D-01,
+     &3.6329D-01,0.0000D+00,7.9498D+01,7.4941D+01,7.0580D+01,6.6266D+01,
+     &6.2169D+01,5.8002D+01,5.4045D+01,5.0164D+01,4.6539D+01,4.2847D+01,
+     &3.9386D+01,3.6065D+01,3.2968D+01,3.1180D+01,2.9347D+01,2.7330D+01,
+     &2.5394D+01,2.3566D+01,2.1811D+01,2.0388D+01,1.8944D+01,1.7368D+01,
+     &1.5877D+01,1.4488D+01,1.3164D+01,1.2111D+01,1.1051D+01,9.9162D+00/
+      DATA (XGF_L(K),K=  913, 1026) /
+     &8.8542D+00,7.8839D+00,6.9777D+00,6.2689D+00,5.5695D+00,4.8410D+00,
+     &4.1789D+00,3.5909D+00,3.0635D+00,2.6689D+00,2.2973D+00,1.9324D+00,
+     &1.6270D+00,1.4446D+00,1.2882D+00,1.1839D+00,1.0926D+00,1.0266D+00,
+     &9.7585D-01,9.3473D-01,8.9976D-01,8.6898D-01,8.4068D-01,8.1374D-01,
+     &7.8714D-01,7.6011D-01,7.3262D-01,7.3148D-01,6.9170D-01,6.5270D-01,
+     &6.1357D-01,5.7426D-01,5.3417D-01,4.9316D-01,4.5166D-01,4.0914D-01,
+     &3.6649D-01,3.2429D-01,2.7651D-01,0.0000D+00,9.7091D+01,9.1127D+01,
+     &8.5440D+01,7.9869D+01,7.4603D+01,6.9275D+01,6.4220D+01,5.9343D+01,
+     &5.4780D+01,5.0195D+01,4.5912D+01,4.1816D+01,3.8028D+01,3.5857D+01,
+     &3.3637D+01,3.1205D+01,2.8880D+01,2.6695D+01,2.4601D+01,2.2923D+01,
+     &2.1219D+01,1.9374D+01,1.7634D+01,1.6009D+01,1.4488D+01,1.3276D+01,
+     &1.2064D+01,1.0772D+01,9.5709D+00,8.4795D+00,7.4649D+00,6.6775D+00,
+     &5.9046D+00,5.1015D+00,4.3733D+00,3.7372D+00,3.1677D+00,2.7434D+00,
+     &2.3459D+00,1.9566D+00,1.6317D+00,1.4368D+00,1.2699D+00,1.1572D+00,
+     &1.0581D+00,9.8558D-01,9.2913D-01,8.8297D-01,8.4349D-01,8.0862D-01,
+     &7.7667D-01,7.4686D-01,7.1760D-01,6.8906D-01,6.6005D-01,6.5493D-01,
+     &6.1209D-01,5.7080D-01,5.3038D-01,4.9085D-01,4.5137D-01,4.1231D-01,
+     &3.7316D-01,3.3442D-01,2.9613D-01,2.5928D-01,2.1912D-01,0.0000D+00,
+     &1.1660D+02,1.0899D+02,1.0178D+02,9.4752D+01,8.8142D+01,8.1480D+01/
+      DATA (XGF_L(K),K= 1027, 1140) /
+     &7.5219D+01,6.9198D+01,6.3578D+01,5.7986D+01,5.2800D+01,4.7867D+01,
+     &4.3328D+01,4.0736D+01,3.8088D+01,3.5213D+01,3.2469D+01,2.9907D+01,
+     &2.7451D+01,2.5501D+01,2.3516D+01,2.1392D+01,1.9391D+01,1.7546D+01,
+     &1.5800D+01,1.4426D+01,1.3057D+01,1.1607D+01,1.0266D+01,9.0517D+00,
+     &7.9294D+00,7.0617D+00,6.2165D+00,5.3397D+00,4.5572D+00,3.8687D+00,
+     &3.2598D+00,2.8078D+00,2.3859D+00,1.9745D+00,1.6317D+00,1.4267D+00,
+     &1.2497D+00,1.1305D+00,1.0247D+00,9.4657D-01,8.8556D-01,8.3542D-01,
+     &7.9253D-01,7.5465D-01,7.2037D-01,6.8840D-01,6.5775D-01,6.2793D-01,
+     &5.9852D-01,5.9015D-01,5.4553D-01,5.0339D-01,4.6306D-01,4.2411D-01,
+     &3.8622D-01,3.4909D-01,3.1294D-01,2.7773D-01,2.4373D-01,2.1150D-01,
+     &1.7848D-01,0.0000D+00,1.3738D+02,1.2796D+02,1.1904D+02,1.1042D+02,
+     &1.0233D+02,9.4222D+01,8.6662D+01,7.9409D+01,7.2655D+01,6.6001D+01,
+     &5.9833D+01,5.4007D+01,4.8672D+01,4.5642D+01,4.2552D+01,3.9214D+01,
+     &3.6040D+01,3.3082D+01,3.0272D+01,2.8026D+01,2.5779D+01,2.3361D+01,
+     &2.1093D+01,1.9009D+01,1.7062D+01,1.5526D+01,1.4003D+01,1.2396D+01,
+     &1.0916D+01,9.5845D+00,8.3611D+00,7.4188D+00,6.5021D+00,5.5589D+00,
+     &4.7169D+00,3.9865D+00,3.3389D+00,2.8617D+00,2.4178D+00,1.9872D+00,
+     &1.6283D+00,1.4143D+00,1.2296D+00,1.1049D+00,9.9315D-01,9.1079D-01,
+     &8.4623D-01,7.9317D-01,7.4768D-01,7.0802D-01,6.7178D-01,6.3836D-01/
+      DATA (XGF_L(K),K= 1141, 1254) /
+     &6.0703D-01,5.7658D-01,5.4733D-01,5.3630D-01,4.9100D-01,4.4879D-01,
+     &4.0920D-01,3.7138D-01,3.3521D-01,3.0054D-01,2.6721D-01,2.3523D-01,
+     &2.0485D-01,1.7634D-01,1.4852D-01,0.0000D+00,1.6103D+02,1.4938D+02,
+     &1.3848D+02,1.2798D+02,1.1818D+02,1.0840D+02,9.9309D+01,9.0651D+01,
+     &8.2647D+01,7.4733D+01,6.7469D+01,6.0672D+01,5.4433D+01,5.0913D+01,
+     &4.7343D+01,4.3482D+01,3.9833D+01,3.6452D+01,3.3242D+01,3.0689D+01,
+     &2.8134D+01,2.5404D+01,2.2863D+01,2.0531D+01,1.8362D+01,1.6652D+01,
+     &1.4967D+01,1.3197D+01,1.1573D+01,1.0120D+01,8.7877D+00,7.7679D+00,
+     &6.7819D+00,5.7685D+00,4.8731D+00,4.0967D+00,3.4122D+00,2.9097D+00,
+     &2.4451D+00,1.9953D+00,1.6222D+00,1.3995D+00,1.2076D+00,1.0771D+00,
+     &9.6151D-01,8.7563D-01,8.0819D-01,7.5269D-01,7.0548D-01,6.6395D-01,
+     &6.2666D-01,5.9253D-01,5.6034D-01,5.3005D-01,5.0122D-01,4.8790D-01,
+     &4.4273D-01,4.0115D-01,3.6251D-01,3.2632D-01,2.9224D-01,2.5988D-01,
+     &2.2931D-01,2.0039D-01,1.7324D-01,1.4805D-01,1.2201D-01,0.0000D+00,
+     &1.8591D+02,1.7193D+02,1.5886D+02,1.4632D+02,1.3469D+02,1.2310D+02,
+     &1.1237D+02,1.0218D+02,9.2839D+01,8.3643D+01,7.5256D+01,6.7382D+01,
+     &6.0231D+01,5.6204D+01,5.2127D+01,4.7743D+01,4.3601D+01,3.9784D+01,
+     &3.6172D+01,3.3310D+01,3.0455D+01,2.7410D+01,2.4579D+01,2.2009D+01,
+     &1.9599D+01,1.7727D+01,1.5886D+01,1.3956D+01,1.2193D+01,1.0620D+01/
+      DATA (XGF_L(K),K= 1255, 1368) /
+     &9.1866D+00,8.0925D+00,7.0383D+00,5.9623D+00,5.0119D+00,4.1917D+00,
+     &3.4750D+00,2.9503D+00,2.4663D+00,1.9999D+00,1.6141D+00,1.3840D+00,
+     &1.1856D+00,1.0518D+00,9.3192D-01,8.4324D-01,7.7348D-01,7.1642D-01,
+     &6.6779D-01,6.2531D-01,5.8732D-01,5.5231D-01,5.2039D-01,4.9037D-01,
+     &4.6218D-01,4.4711D-01,4.0225D-01,3.6159D-01,3.2438D-01,2.8982D-01,
+     &2.5765D-01,2.2765D-01,1.9954D-01,1.7331D-01,1.4889D-01,1.2621D-01,
+     &9.6984D-02,0.0000D+00,2.1269D+02,1.9609D+02,1.8060D+02,1.6582D+02,
+     &1.5214D+02,1.3863D+02,1.2613D+02,1.1431D+02,1.0351D+02,9.2957D+01,
+     &8.3294D+01,7.4318D+01,6.6188D+01,6.1617D+01,5.7019D+01,5.2073D+01,
+     &4.7428D+01,4.3153D+01,3.9122D+01,3.5941D+01,3.2764D+01,2.9404D+01,
+     &2.6282D+01,2.3458D+01,2.0836D+01,1.8796D+01,1.6786D+01,1.4693D+01,
+     &1.2792D+01,1.1101D+01,9.5678D+00,8.4010D+00,7.2773D+00,6.1402D+00,
+     &5.1403D+00,4.2791D+00,3.5311D+00,2.9851D+00,2.4835D+00,2.0017D+00,
+     &1.6039D+00,1.3677D+00,1.1646D+00,1.0265D+00,9.0375D-01,8.1271D-01,
+     &7.4135D-01,6.8280D-01,6.3328D-01,5.9018D-01,5.5184D-01,5.1677D-01,
+     &4.8494D-01,4.5537D-01,4.2797D-01,4.1146D-01,3.6736D-01,3.2788D-01,
+     &2.9207D-01,2.5923D-01,2.2901D-01,2.0110D-01,1.7527D-01,1.5131D-01,
+     &1.2926D-01,1.0839D-01,6.9776D-02,0.0000D+00,2.4043D+02,2.2104D+02,
+     &2.0300D+02,1.8582D+02,1.7003D+02,1.5443D+02,1.4007D+02,1.2658D+02/
+      DATA (XGF_L(K),K= 1369, 1482) /
+     &1.1426D+02,1.0227D+02,9.1332D+01,8.1197D+01,7.2119D+01,6.6989D+01,
+     &6.1846D+01,5.6342D+01,5.1188D+01,4.6448D+01,4.2002D+01,3.8498D+01,
+     &3.5016D+01,3.1335D+01,2.7931D+01,2.4848D+01,2.2009D+01,1.9797D+01,
+     &1.7637D+01,1.5389D+01,1.3354D+01,1.1550D+01,9.9187D+00,8.6824D+00,
+     &7.4988D+00,6.3022D+00,5.2549D+00,4.3589D+00,3.5788D+00,3.0139D+00,
+     &2.4962D+00,2.0005D+00,1.5931D+00,1.3514D+00,1.1435D+00,1.0028D+00,
+     &8.7751D-01,7.8479D-01,7.1218D-01,6.5272D-01,6.0250D-01,5.5920D-01,
+     &5.2061D-01,4.8590D-01,4.5422D-01,4.2519D-01,3.9858D-01,3.8094D-01,
+     &3.3789D-01,2.9975D-01,2.6524D-01,2.3401D-01,2.0560D-01,1.7956D-01,
+     &1.5565D-01,1.3374D-01,1.1354D-01,9.4096D-02,3.9275D-02,0.0000D+00,
+     &2.8195D+02,2.5830D+02,2.3640D+02,2.1554D+02,1.9645D+02,1.7774D+02,
+     &1.6058D+02,1.4448D+02,1.2990D+02,1.1575D+02,1.0299D+02,9.1121D+01,
+     &8.0574D+01,7.4642D+01,6.8724D+01,6.2402D+01,5.6498D+01,5.1101D+01,
+     &4.6042D+01,4.2081D+01,3.8152D+01,3.4014D+01,3.0201D+01,2.6780D+01,
+     &2.3611D+01,2.1171D+01,1.8789D+01,1.6329D+01,1.4107D+01,1.2148D+01,
+     &1.0386D+01,9.0557D+00,7.7874D+00,6.5118D+00,5.4006D+00,4.4539D+00,
+     &3.6370D+00,3.0467D+00,2.5088D+00,1.9959D+00,1.5762D+00,1.3274D+00,
+     &1.1142D+00,9.7065D-01,8.4265D-01,7.4825D-01,6.7451D-01,6.1445D-01,
+     &5.6374D-01,5.2024D-01,4.8166D-01,4.4741D-01,4.1643D-01,3.8830D-01/
+      DATA (XGF_L(K),K= 1483, 1596) /
+     &3.6282D-01,3.4411D-01,3.0249D-01,2.6607D-01,2.3369D-01,2.0474D-01,
+     &1.7852D-01,1.5489D-01,1.3341D-01,1.1384D-01,9.5862D-02,7.7509D-02,
+     &0.0000D+00,0.0000D+00,3.2379D+02,2.9556D+02,2.6960D+02,2.4513D+02,
+     &2.2265D+02,2.0073D+02,1.8071D+02,1.6202D+02,1.4515D+02,1.2887D+02,
+     &1.1419D+02,1.0071D+02,8.8650D+01,8.1931D+01,7.5233D+01,6.8140D+01,
+     &6.1510D+01,5.5467D+01,4.9832D+01,4.5419D+01,4.1070D+01,3.6493D+01,
+     &3.2295D+01,2.8536D+01,2.5086D+01,2.2426D+01,1.9846D+01,1.7175D+01,
+     &1.4781D+01,1.2681D+01,1.0797D+01,9.3831D+00,8.0380D+00,6.6897D+00,
+     &5.5221D+00,4.5337D+00,3.6831D+00,3.0714D+00,2.5159D+00,1.9884D+00,
+     &1.5586D+00,1.3048D+00,1.0886D+00,9.4191D-01,8.1217D-01,7.1679D-01,
+     &6.4238D-01,5.8194D-01,5.3136D-01,4.8766D-01,4.4965D-01,4.1594D-01,
+     &3.8570D-01,3.5847D-01,3.3403D-01,3.1456D-01,2.7454D-01,2.3977D-01,
+     &2.0922D-01,1.8216D-01,1.5795D-01,1.3622D-01,1.1669D-01,9.9012D-02,
+     &8.2668D-02,6.4604D-02,0.0000D+00,0.0000D+00,3.7071D+02,3.3727D+02,
+     &3.0660D+02,2.7790D+02,2.5169D+02,2.2608D+02,2.0283D+02,1.8123D+02,
+     &1.6179D+02,1.4311D+02,1.2635D+02,1.1097D+02,9.7357D+01,8.9759D+01,
+     &8.2263D+01,7.4239D+01,6.6821D+01,6.0073D+01,5.3813D+01,4.8927D+01,
+     &4.4114D+01,3.9072D+01,3.4471D+01,3.0351D+01,2.6592D+01,2.3699D+01,
+     &2.0903D+01,1.8031D+01,1.5459D+01,1.3211D+01,1.1204D+01,9.7024D+00/
+      DATA (XGF_L(K),K= 1597, 1710) /
+     &8.2828D+00,6.8644D+00,5.6367D+00,4.6059D+00,3.7241D+00,3.0915D+00,
+     &2.5189D+00,1.9786D+00,1.5396D+00,1.2816D+00,1.0611D+00,9.1306D-01,
+     &7.8207D-01,6.8594D-01,6.1118D-01,5.5075D-01,5.0031D-01,4.5732D-01,
+     &4.1996D-01,3.8671D-01,3.5732D-01,3.3101D-01,3.0775D-01,2.8769D-01,
+     &2.4931D-01,2.1637D-01,1.8763D-01,1.6241D-01,1.4002D-01,1.2013D-01,
+     &1.0238D-01,8.6311D-02,7.1348D-02,5.2982D-02,0.0000D+00,0.0000D+00,
+     &4.2142D+02,3.8237D+02,3.4660D+02,3.1292D+02,2.8259D+02,2.5300D+02,
+     &2.2626D+02,2.0148D+02,1.7927D+02,1.5797D+02,1.3896D+02,1.2163D+02,
+     &1.0632D+02,9.7858D+01,8.9366D+01,8.0488D+01,7.2234D+01,6.4771D+01,
+     &5.7843D+01,5.2468D+01,4.7182D+01,4.1663D+01,3.6633D+01,3.2165D+01,
+     &2.8082D+01,2.4971D+01,2.1960D+01,1.8866D+01,1.6118D+01,1.3723D+01,
+     &1.1595D+01,1.0008D+01,8.5101D+00,7.0232D+00,5.7443D+00,4.6705D+00,
+     &3.7584D+00,3.1066D+00,2.5189D+00,1.9659D+00,1.5193D+00,1.2575D+00,
+     &1.0346D+00,8.8517D-01,7.5338D-01,6.5695D-01,5.8219D-01,5.2200D-01,
+     &4.7218D-01,4.2954D-01,3.9258D-01,3.6043D-01,3.3190D-01,3.0663D-01,
+     &2.8431D-01,2.6413D-01,2.2746D-01,1.9612D-01,1.6912D-01,1.4557D-01,
+     &1.2488D-01,1.0660D-01,9.0362D-02,7.5731D-02,6.1890D-02,4.2720D-02,
+     &0.0000D+00,0.0000D+00,4.7166D+02,4.2676D+02,3.8580D+02,3.4749D+02,
+     &3.1273D+02,2.7927D+02,2.4899D+02,2.2108D+02,1.9611D+02,1.7230D+02/
+      DATA (XGF_L(K),K= 1711, 1824) /
+     &1.5107D+02,1.3178D+02,1.1483D+02,1.0548D+02,9.6179D+01,8.6383D+01,
+     &7.7331D+01,6.9156D+01,6.1613D+01,5.5763D+01,5.0019D+01,4.4056D+01,
+     &3.8633D+01,3.3819D+01,2.9446D+01,2.6108D+01,2.2889D+01,1.9617D+01,
+     &1.6706D+01,1.4179D+01,1.1938D+01,1.0276D+01,8.7112D+00,7.1630D+00,
+     &5.8345D+00,4.7275D+00,3.7856D+00,3.1171D+00,2.5164D+00,1.9532D+00,
+     &1.4997D+00,1.2350D+00,1.0108D+00,8.6027D-01,7.2804D-01,6.3166D-01,
+     &5.5726D-01,4.9745D-01,4.4802D-01,4.0623D-01,3.7002D-01,3.3850D-01,
+     &3.1081D-01,2.8644D-01,2.6509D-01,2.4476D-01,2.0951D-01,1.7979D-01,
+     &1.5426D-01,1.3217D-01,1.1290D-01,9.5951D-02,8.0975D-02,6.7483D-02,
+     &5.4483D-02,3.4309D-02,0.0000D+00,0.0000D+00,5.2745D+02,4.7595D+02,
+     &4.2900D+02,3.8543D+02,3.4589D+02,3.0795D+02,2.7377D+02,2.4235D+02,
+     &2.1434D+02,1.8771D+02,1.6408D+02,1.4266D+02,1.2392D+02,1.1358D+02,
+     &1.0335D+02,9.2593D+01,8.2702D+01,7.3780D+01,6.5553D+01,5.9207D+01,
+     &5.2983D+01,4.6535D+01,4.0700D+01,3.5531D+01,3.0842D+01,2.7278D+01,
+     &2.3855D+01,2.0386D+01,1.7301D+01,1.4635D+01,1.2282D+01,1.0538D+01,
+     &8.9065D+00,7.2932D+00,5.9178D+00,4.7769D+00,3.8086D+00,3.1240D+00,
+     &2.5114D+00,1.9387D+00,1.4794D+00,1.2125D+00,9.8604D-01,8.3538D-01,
+     &7.0309D-01,6.0683D-01,5.3289D-01,4.7378D-01,4.2493D-01,3.8387D-01,
+     &3.4846D-01,3.1778D-01,2.9097D-01,2.6744D-01,2.4699D-01,2.2688D-01/
+      DATA (XGF_L(K),K= 1825, 1836) /
+     &1.9308D-01,1.6489D-01,1.4079D-01,1.2009D-01,1.0214D-01,8.6447D-02,
+     &7.2603D-02,6.0131D-02,4.7893D-02,2.6613D-02,0.0000D+00,0.0000D+00/
+
+*
+      X = Xinp
+*...CHECK OF X AND Q2 VALUES :
+      IF ( (X.LT.0.99D-9) .OR. (X.GT.1.D0) ) THEN
+*        WRITE(6,91) X
+*  91     FORMAT (2X,'PHO_DOR98LO: x out of range',1p,E12.4)
+         X = 0.99D-9
+*        STOP
+      ENDIF
+
+      Q2 = Q2inp
+      IF ( (Q2.LT.0.799D0) .OR. (Q2.GT.1.E6) ) THEN
+*        WRITE(6,92) Q2
+*  92     FORMAT (2X,'PHO_DOR98LO: Q2 out of range',1p,E12.4)
+         Q2 = 0.99D6
+*        STOP
+      ENDIF
+
+*
+*...INTERPOLATION :
+      NA(1) = NX
+      NA(2) = NQ
+      XT(1) = DLOG(X)
+      XT(2) = DLOG(Q2)
+      X1 = 1.D0- X
+      XV = X**0.5D0
+      XS = X**(-0.2D0)
+      UV = SIB_DBFINT(NARG,XT,NA,ARRF,XUVF) * X1**3 * XV
+      DV = SIB_DBFINT(NARG,XT,NA,ARRF,XDVF) * X1**4 * XV
+      DE = SIB_DBFINT(NARG,XT,NA,ARRF,XDEF) * X1**7 * XV
+      UD = SIB_DBFINT(NARG,XT,NA,ARRF,XUDF) * X1**7 * XS
+      US = 0.5D0 * (UD - DE)
+      DS = 0.5D0 * (UD + DE)
+      SS = SIB_DBFINT(NARG,XT,NA,ARRF,XSF)  * X1**7 * XS
+      GL = SIB_DBFINT(NARG,XT,NA,ARRF,XGF)  * X1**5 * XS
+
+      END
diff --git a/Framework/Cascade/sibyll2.3c.h b/Framework/Cascade/sibyll2.3c.h
new file mode 100644
index 0000000000000000000000000000000000000000..4a00010fcbcf29003921cea384864be521286b50
--- /dev/null
+++ b/Framework/Cascade/sibyll2.3c.h
@@ -0,0 +1,87 @@
+#ifndef _include_sib23c_interface_h_
+#define _include_sib23c_interface_h_
+//----------------------------------------------
+//  C++ interface for the SIBYLL event generator
+//----------------------------------------------
+//wrapper
+
+
+
+
+extern"C"{
+
+  typedef char s_name[6];
+
+  // SIBYLL particle stack (FORTRAN COMMON)
+  // variables are: np : numer of particles on stack
+  //                 p : 4momentum + mass of particles on stack
+  //             llist : id of particles on stack
+  extern struct { 
+    double p[5][8000]; 
+    int llist[8000]; 
+    int np; 
+  }s_plist_;
+
+
+  // additional particle stack for the mother particles of unstable particles
+  // stable particles have entry zero
+  extern struct { 
+    int llist1[8000]; 
+  }s_plist1_;
+
+
+  // tables with particle properties
+  // charge, strangeness and baryon number
+  extern struct {
+    int ichp[99]; 
+    int istr[99]; 
+    int ibar[99]; 
+  }s_chp_;
+
+  // tables with particle properties
+  // mass and mass squared
+  extern struct {
+    double am[99]; 
+    double am2[99]; 
+  }s_mass1_;
+
+  // table with particle names
+  extern struct {char namp[6][99];}s_cnam_;
+
+  // debug info
+  extern struct {int ncall; int ndebug; int lun; }s_debug_;
+
+  // lund random generator setup
+  //extern struct {int mrlu[6]; float rrlu[100]; }ludatr_;
+
+
+  // sibyll main subroutine
+  void sibyll_(int&,int&,double&);
+    
+  // subroutine to initiate sibyll
+  void sibyll_ini_();
+
+  // subroutine to SET DECAYS
+  void dec_ini_();
+
+  // subroutine to initiate random number generator
+  void rnd_ini_();
+  
+  // print event
+  void sib_list_(int&);
+
+  // decay routine
+  void decsib_();
+
+  // interaction length
+  //double fpni_(double&, int&);
+
+  void sib_sigma_hnuc_(int&,int&,double&,double&,double&);
+  
+  double s_rndm_(int&);
+
+  // phojet random generator setup
+  void pho_rndin_(int&,int&,int&,int&);
+}
+#endif
+
diff --git a/Framework/Units/PhysicalConstants.h b/Framework/Units/PhysicalConstants.h
index 7add499dd5b000172de38da22074e5427ce36b76..915f2d59cf7f418255574218f1530b09f1ff37e5 100644
--- a/Framework/Units/PhysicalConstants.h
+++ b/Framework/Units/PhysicalConstants.h
@@ -54,6 +54,9 @@ namespace corsika::units::si::constants {
   // unified atomic mass unit
   constexpr quantity<mass_d> u{Rep(1.6605402e-27L) * kilogram};
 
+  // millibarn
+  constexpr quantity<area_d> barn{Rep(1.e-28L) * meter * meter};
+  
   // etc.
 
 } // namespace corsika::units::si::constants
diff --git a/Framework/Units/PhysicalUnits.h b/Framework/Units/PhysicalUnits.h
index 23dbbb871dc7d5b2cd2d8538c2bbe7c6197c6812..adaa004d30592edd91bf0a2ae154d8906e1841ff 100644
--- a/Framework/Units/PhysicalUnits.h
+++ b/Framework/Units/PhysicalUnits.h
@@ -38,6 +38,8 @@ namespace corsika::units::si {
   using EnergyType = phys::units::quantity<phys::units::energy_d, double>;
   using MassType = phys::units::quantity<phys::units::mass_d, double>;
 
+  using CrossSectionType = phys::units::quantity<phys::units::area_d, double>;
+  
 } // end namespace corsika::units::si
 
 // we want to call the operator<< without namespace... I think