All rights reserved, whether the whole  or  part  of  the  program  is
concerned.  Permission  to use, copy, and modify this software and its
documentation is granted for academic use, provided that:


  i.  this copyright notice appears in all copies of the software  and
      related documentation;

 ii.  the reference given below (Frishman and  Argos,  1995)  must  be
      cited  in any publication of scientific results based in part or
      completely on the use of the program;

iii.  bugs will be reported to the authors.

The use of the  software  in  commercial  activities  is  not  allowed
without a prior written commercial license agreement.

WARNING: STRIDE is provided "as-is" and without warranty of any  kind,
express,  implied  or  otherwise,  including  without  limitation  any
warranty of merchantability or fitness for a particular purpose. In no
event will the authors be liable for any special, incidental, indirect
or consequential damages  of  any  kind,  or  any  damages  whatsoever
resulting  from loss of data or profits, whether or not advised of the
possibility of damage, and on any theory of liability, arising out  of
or in connection with the use or performance of this software.

For calculation of the residue solvent accessible area the program NSC
[3,4]   is   used   and   was  kindly  provided  by  Dr.  F.Eisenhaber
(EISENHABER@EMBL-HEIDELBERG.DE). Please direct to  him  all  questions
concerning specifically accessibility calculations.

---

program NSC
version 1.0  (April 1994)

Author: Frank Eisenhaber

Copyright Notice:
All rights reserved, whether the whole or part of the program is
concerned. The software may not be used without specific, prior
written permission of the author.

An academic licence agreement for the package ASC/GM or its parts is
granted if you make the following commitments:
1) In using this software, the user will respect the interests of
   the author.
2) The use of the software in commercial activities is not allowed
   without a prior written commercial licence agreement. The program
   will not be used in classified research.
3) Other interested research groups will be redirected to the author.
   The user will not redistribute the code outside his immediate
   research group.
4) The copyright messages will not be modified or suppressed.
5) The reference given below will be cited in any publication of
   scientific results based in part or completely on use of the
   program.
6) Bugs will be reported to the author.

Permission to use, copy, and modify this software and its
documentation is hereby granted without fee for academic use, provided
that the above copyright notices and this permission notice appear in
all copies of the software and related documentation.

THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT
ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
