
COPYRIGHT STATUS

The bulk of this code is copyright by members of or all of the R Core
Team.  ('The R Core Team' in copyright statements in individual files
refers to some or all of the team.)

See the file COPYING for the exact conditions under which you may
redistribute it.  R as a whole is distributed under GPL version 2 or
3: most source files contain a copyright statement allowing use of
that file under GPL version 2 or later: the main exceptions are the
included versions of packages 'MASS', 'class', 'nnet', 'rpart' and
'spatial' (GPL-2 or GPL-3).  (The auxiliary file m4/openmp.m4 is under
GPL-3, but its incorporation into 'configure' is not.)

The status of files used only in the Windows port is in file
src/gnuwin32/COPYRIGHTS.win, which is appended to this file in binary
Windows distributions.

Note that almost all the code *is* copyright and may only be
reproduced if the copyright notice (that in the file or this notice)
is preserved.  The status of the included LINPACK routines is unclear:
they are said to be in the public domain in the USA.

	---------------------------------------------------

Some (but not all) of the public header files are distributed under
the more permissive terms of version 2.1 or later of the LGPL: see
files R_HOME/share/licenses/LGPL-2.1 and R_HOME/share/licenses/LGPL-3.
This applies only to the header files

src/include/R.h
src/include/Rdefines.h
src/include/Rgraphics.h
src/include/Rinternals.h
src/include/Rmath.h
src/include/S.h
src/include/R_ext/*.h

Note that it does not apply to the header files such as Rembedded.h
and Rinterface.h used for third-party front ends.

From the announcement of the change (2001-Feb-05)

    It came to our attention that some projects are interpreting GPL to
    mean that compiling against the header files or linking against a
    Windows import library brings the compiled code under the scope of
    GPL.  This would mean it would be impossible to distribute binary
    versions of non-GPL packages with compiled code which called entry
    points in the R executable or DLL, of which there are many on CRAN.

    We encourage packages to be distributed under Open Source conditions,
    but accept that this is not possible for some contributions.  Our
    intention is that export files and import libraries be 'accessors'
    under clause 5 of the LGPL, so that in most cases no (additional)
    restrictions are imposed by compiling a package using the LGPL-ed
    components of R.

    To avoid any anomalies, the versions of the same files in R versions
    1.0.0 to 1.2.1 may also be used under LGPL or GPL.

Import libraries are no longer used under Windows.

Some contributed files are also covered by the Library General Public License.
These include (see also below)

src/library/stats/R/embed.R
src/library/stats/src/PPsum.c

	---------------------------------------------------




Some of the code contains different copyright statements.  It is used
here in accordance with the copyright conditions in that code.  A
not-necessarily-complete list of such files is:

src/library/grDevices/inst/afm/*___.afm

	Copyright (c) 1984 to 1992 Adobe Systems Incorporated.

src/library/grDevices/inst/afm/MustRead.html
src/library/grDevices/inst/afm/Courier*.afm
src/library/grDevices/inst/afm/Helvetica*.afm
src/library/grDevices/inst/afm/Times*.afm
src/library/grDevices/inst/afm/Symbol.afm
src/library/grDevices/inst/afm/ZapfDingbats.afm

	Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems
	Incorporated.  All Rights Reserved.

src/library/grDevices/inst/afm/*l.afm

	Copyright 1999 by (URW)++ Design & Development

src/library/grDevices/inst/afm/CM_*.afm
src/library/grDevices/inst/afm/cm*.afm

	are derived from afms which are copyright by the American
	Mathematical Society, but 'the AMS does require that the
	AMS copyright notice be removed from any derivative versions
	of the fonts which have been altered in any way'.

doc/manual/R-intro.texi

in part

	Copyright (C) 1990 W. N. Venables
	Copyright (C) 1992 W. N. Venables & D. M. Smith
	Copyright (C) 1997 R. Gentleman & R. Ihaka
	Copyright (C) 1997, 1998 M. Maechler

share/licenses/*

	See the individual files.

share/texmf/bibtex/bst/jss.bst

	Copyright 1994-2007 Patrick W Daly

share/texmf/tex/latex/jss.cls

	Copyright: (C) Achim Zeileis

src/library/graphics/R/mosaicplot.R

	Original code copyright (C) 1998 John W. Emerson

src/library/graphics/R/pairs.R

	In part, Copyright 1999 Dr. Jens Oehlschlaegel-Akiyoshi

src/library/graphics/R/polygon.R

	Copyright (C) 2001 by Kevin Buhr <buhr@stat.wisc.edu>

src/library/splines/R/splineClasses.R

	Copyright (C) 1998 Douglas M. Bates and William N. Venables.

src/library/datasets/man/austres.Rd
src/library/datasets/man/beavers.Rd
src/library/datasets/man/lh.Rd
src/library/datasets/man/npk.Rd
src/library/datasets/man/rock.Rd
src/library/datasets/man/UKLungDeaths.Rd
src/library/datasets/man/USAccDeaths.Rd
src/library/stats/R/add.R
src/library/stats/R/bandwidths.R
src/library/stats/R/confint.R
src/library/stats/R/cpgram.R
src/library/stats/R/spectrum.R
src/library/stats/R/vcov.R
src/library/stats/src//bandwidths.c
src/appl/maxcol.c

	Copyright (C) various dates W. N. Venables and B. D. Ripley


src/appl/interv.c : moved to API from code originally in
		    src/library/stats/src/bvalue.f, see
		    src/library/stats/COPYRIGHTS.modreg

src/library/stats:

	See the files src/library/stats/COPYRIGHTS.modreg and
	src/library/stats/COPYRIGHTS.portsrc for further details


src/library/stats/R/diffinv.R
src/library/stats/R/embed.R
src/library/stats/R/kernel.R
src/library/stats/src/PPsum.c

	Copyright (C) 1997-1999	 Adrian Trapletti


src/library/stats/R/nls.R

	In part, Copyright 1999-1999 Saikat DebRoy


src/library/stats/R/nlsFunc.R
src/library/stats/R/selfStart.R
src/library/stats/R/zzModels.R

	Copyright 1997,1999 Jose C. Pinheiro, Douglas M. Bates

src/library/stats/R/runmed.R
src/library/stats/src/Trunmed.c

	In part Copyright (C) 1995 Berwin A. Turlach

src/library/stats/src/loessc.c
src/library/stats/src/loessf.f

	In part Copyright (c) 1989, 1992 by AT&T

src/library/stats/R/spline.R

	In part, Copyright (C) 2002 Simon N. Wood

src/library/tcltk/exec/{hierarchy,util*,widget}.tcl

	Copyright (c) various dates Jeffrey Hobbs


src/modules/X11/rotated.[ch]

	Copyright (c) 1993 Alan Richardson


src/appl/loglin.c
src/library/stats/src/chisqsim.c
src/library/stats/src/nscor.c
src/library/stats/src/prho.c
src/library/stats/src/swilk.c
src/library/stats/src/kmns.f
src/library/stats/src/starma.c
src/nmath/pnbeta.c
src/nmath/pnchisq.c
src/nmath/pnt.c
src/nmath/qbeta.c
src/nmath/qgamma.c
src/nmath/qnorm.c
src/nmath/qtukey.c
  are based in whole or in part on Applied Statistics algorithms
  (C) Royal Statistical Society

src/nmath/stirlerr.c
src/nmath/dbinom.c
src/nmath/dpois.c
  are partly based on Catherine/Clive Loader's (1999) work,
  (C) 1999-2000 Lucent Technologies, Bell Laboratories.


src/main/RNG.c

  The Mersenne-Twister part is
  Copyright (C) 1997, 1999 Makoto Matsumoto and Takuji Nishimura.


src/main/xspline.c

 * Copyright (c) 1985-1988 by Supoj Sutanthavibul
 * Parts Copyright (c) 1989-2002 by Brian V. Smith
 * Parts Copyright (c) 1991 by Paul King
 * Parts Copyright (c) 1992 by James Tough
 * Parts Copyright (c) 1998 by Georg Stemmer
 * Parts Copyright (c) 1995 by C. Blanc and C. Schlick
  
 * Any party obtaining a copy of these files is granted, free of charge, a
 * full and unrestricted irrevocable, world-wide, paid up, royalty-free,
 * nonexclusive right and license to deal in this software and
 * documentation files (the "Software"), including without limitation the
 * rights to use, copy, modify, merge, publish and/or distribute copies of
 * the Software, and to permit persons who receive copies from any such 
 * party to do so, with the only requirement being that this copyright 
 * notice remain intact.


src/modules/nano{ftp,http}.c

 Copyright (C) 1998-2001 Daniel Veillard.  All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is fur-
nished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


src/modules/lapack/dlapack.f, cmplx.f, dlamc.f

  Extracted from
  *  -- LAPACK computational routine (version 3.9.0) --
  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  *     November 2017

  where the version number, providers and date vary by subroutine.
  For version 3.7.0, many of the copyright dates were updated
  even for routines which have not been changed for years.

  LAPACK 3.9.0 contains a LICENSE file, copied to src/modules/lapack
  (but many of these routines were originally copied from earlier
  versions of LAPACK).  For binary distributions it is reproduced here:

  --- src/modules/lapack/LICENSE ---
  Copyright (c) 1992-2017 The University of Tennessee and The University
                          of Tennessee Research Foundation.  All rights
                          reserved.
  Copyright (c) 2000-2017 The University of California Berkeley. All
                          rights reserved.
  Copyright (c) 2006-2017 The University of Colorado Denver.  All rights
                          reserved.

  $COPYRIGHT$

  Additional copyrights may follow

  $HEADER$

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are
  met:

  - Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  - Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer listed
    in this license in the documentation and/or other materials
    provided with the distribution.

  - Neither the name of the copyright holders nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.

  The copyright holders provide no reassurances that the source code
  provided does not infringe any patent, copyright, or any other
  intellectual property rights of third parties.  The copyright holders
  disclaim any liability to any recipient for claims brought against
  recipient by any third party for infringement of that parties
  intellectual property rights.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  --- end of src/modules/lapack/LICENSE ---

src/extra/xdr/*

	Copyright (undated) Sun Microsystems, Inc.

	See the file src/extra/xdr/copyrght.txt

src/main/connections.c, src/main/gzio.h

  Contain code derived from the zlib 1.2.3 distribution
  (C) 1995-2005 Jean-loup Gailly and Mark Adler

src/main/dounzip.c, unzip.h

  Contain code Copyright (C) 1998-2010 Gilles Vollant from contrib/minizip
  in the zlib 1.2.3 distribution with updates taken from 1.2.5.


src/main/valid_utf8.h

   Copyright (c) 1997-2012 University of Cambridge

For binary builds of R that requires us to include

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

      * Redistributions of source code must retain the above copyright
	notice, this list of conditions and the following disclaimer.

      * Redistributions in binary form must reproduce the above
	copyright notice, this list of conditions and the following
	disclaimer in the documentation and/or other materials
	provided with the distribution.

      * Neither the name of the University of Cambridge nor the name
	of Google Inc. nor the names of their contributors may be used
	to endorse or promote products derived from this software
	without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.


src/extra/tre/LICENSE
src/extra/tre/*.[ch]

Copyright (c) 2001-2009 Ville Laurikari <vl@iki.fi>
All rights reserved.

From tre-0.8.0 (http://laurikari.net/tre/).  See file
src/extra/tre/LICENSE.  For binary builds of R that requires us to
include

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    * Neither the name of the University of Cambridge nor the name of Google
      Inc. nor the names of their contributors may be used to endorse or
      promote products derived from this software without specific prior
      written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

src/extra/tzone/strftime.c
/*
  Based on code from tzcode, which is turn said to be
  'Based on the UCB version with the copyright notice appearing below.'

** Copyright (c) 1989 The Regents of the University of California.
** All rights reserved.
**
** Redistribution and use in source and binary forms are permitted
** provided that the above copyright notice and this paragraph are
** duplicated in all such forms and that any documentation,
** advertising materials, and other materials related to such
** distribution and use acknowledge that the software was developed
** by the University of California, Berkeley. The name of the
** University may not be used to endorse or promote products derived
** from this software without specific prior written permission.
** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/


src/library/tools/src/md5.[ch]

    Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.


src/extra/intl/*

Based on gettextize from gettext 0.17
   Copyright (C) various dates Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/include/vg/memcheck.h
src/include/vg/valgrind.h

From valgrind 3.10.1,

   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.


src/main/mkdtemp.c

From glibc via
http://lists.gnu.org/archive/html/bug-gnulib/2003-02/msg00019.html

   Copyright (C) 1999, 2001-2003 Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/main/Rstrptime.h

   Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
   Distributed under the GNU Library General Public License
   version 2 or later.

src/library/*/po/*.po

   Some of the translations are (C) the translator as marked in the files.

COPYING
doc/COPYING
doc/COPYING.LIB
m4/codeset.m4
m4/gettext.m4
m4/gettext-lib.m4
share/licenses/GPL-2
share/licenses/GPL-3
share/licenses/LGPL-2
share/licenses/LGPL-2.1
share/licenses/LGPL-3
src/main/strdup.c
tools/config.rpath
tools/help2man.pl
tools/ltmain.sh
tools/mdate-sh
tools/missing

   Copyright various dates Free Software Foundation

m4/openmp.m4
  Copyright (C) 2001-2012 Free Software Foundation, Inc.
  Copyright (C) 2015-2016 R Core Team

  Under GPL-3 with the Autoconf Configure Script Exception, version 3.0.

tools/config.quess
tools/config.sub

   Copyright 1992-2013 Free Software Foundation.  
   The Exception to GPL-3 applies.

tools/install-sh

   Copyright (C) 1994 X Consortium

m4/cxx_11.m4
#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>

m4/stat-time.m4

From GNU coreutils 8.12
# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2011 Free Software
# Foundation, Inc.

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

src/main/gram.y
src/main/gram.c

Portions of these files are based on the parser package,

   Copyright (C) 2009--2011  Romain Francois
   

Some of the files in src/appl were originally taken from the Netlib
archive now at www.netlib.org and do not clearly state their
copyright status.

src/appl/{dchdc,dpfa,dpbsl,dpoco,dpodi,dpofa,dposl,dqrdc,
          dqrsl,dsvdc,dtrco,dtrsl}.f 

are part of LINPACK, with authors J.J. Dongarra, Cleve Moler and
G.W. Stewart

src/appl/dqrdc2.f is based on dqrdc.f by G.W. Stewart.

src/appl/lbfgsb.c is based on the work of Zhu, Byrd, Lu-Chen and
Nocedal, which does not state any copyright.

src/main/radixsort.c is largely based on code from the data.table package,

   Copyright (C) 2006--2015  Matt Dowle and Arun Srinivasan

doc/html/Rlogo.svg
doc/html/Rlogo.pdf
doc/html/logo.jpg
doc/html/favicon.ico
src/modules/X11/rlogo_icon.h
src/gnuwin32/front-ends/R.ico
src/gnuwin32/installer/R.bmp

   Copyright (C) 2015-2016 The R Foundation
   
   You can distribute the logo under the terms of the Creative
   Commons Attribution-ShareAlike 4.0 International license (CC-BY-SA
   4.0) or (at your option) the GNU General Public License version 2
   (GPL-2).

   The design of the current logo is based on the previous logo that
   was included in the R source from 1998 to 2016.

	---------------------------------------------------

Binary distributions of R may include compiled code from the PCRE
library whose licence is:

  THE BASIC LIBRARY FUNCTIONS
  ---------------------------
  Written by:       Philip Hazel
  Email local part: ph10
  Email domain:     cam.ac.uk

  University of Cambridge Computing Service, Cambridge, England.

  Copyright (c) 1997-2015 University of Cambridge
  All rights reserved.

  PCRE JUST-IN-TIME COMPILATION SUPPORT
  -------------------------------------
  Written by:       Zoltan Herczeg
  Email local part: hzmester
  Emain domain:     freemail.hu

  Copyright(c) 2010-2015 Zoltan Herczeg
  All rights reserved.

  STACK-LESS JUST-IN-TIME COMPILER
  --------------------------------
  Written by:       Zoltan Herczeg
  Email local part: hzmester
  Emain domain:     freemail.hu

  Copyright(c) 2009-2015 Zoltan Herczeg
  All rights reserved.

  THE C++ WRAPPER FUNCTIONS
  -------------------------
  Contributed by:   Google Inc.

  Copyright (c) 2007-2012, Google Inc.
  All rights reserved.


  THE "BSD" LICENCE
  -----------------

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:

      * Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

      * Redistributions in binary form must reproduce the above
        copyright notice, this list of conditions and the following
        disclaimer in the documentation and/or other materials
        provided with the distribution.

      * Neither the name of the University of Cambridge nor the name
        of Google Inc. nor the names of their contributors may be used
        to endorse or promote products derived from this software
        without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  POSSIBILITY OF SUCH DAMAGE.

	---------------------------------------------------
