mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
* Add initial fuzz target * Polish Integrated the existing targets from @Google-Autofuzz. Added a dictionary for smiles and a little corpora too. Cleanup cmake. * Fix Typo * Remove debugging oversight * Fail, when not building fuzzers statically * Don't build fuzzers by default * Add azure pipeline for fuzzing * Format files; catch all exceptions * Debugging pipeline * Fix format of corpora files * Add corpora for mol strings * Add dictionary for mol strings * Add README.md * Remove very similar fuzz target * Add mol pickle/deserialization fuzzer * Improve fuzz readme Co-authored-by: intrigus <abc123zeus@live.de>
This commit is contained in:
56
.azure-pipelines/linux_build_fuzzer.yml
Normal file
56
.azure-pipelines/linux_build_fuzzer.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
steps:
|
||||
- bash: |
|
||||
source ${CONDA}/etc/profile.d/conda.sh
|
||||
sudo apt-get install -y clang-9
|
||||
sudo chown -R ${USER} ${CONDA}
|
||||
conda config --set always_yes yes --set changeps1 no
|
||||
conda update -q conda
|
||||
conda info -a
|
||||
conda create --name rdkit_build cmake \
|
||||
boost-cpp=$(boost_version) boost=$(boost_version) \
|
||||
py-boost=$(boost_version) libboost=$(boost_version) \
|
||||
cairo eigen
|
||||
displayName: Setup build environment
|
||||
- bash: |
|
||||
source ${CONDA}/etc/profile.d/conda.sh
|
||||
conda activate rdkit_build
|
||||
|
||||
export CC="clang-8"
|
||||
export CXX="clang++-8"
|
||||
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
|
||||
export COVERAGE_FLAGS="-fsanitize=fuzzer-no-link"
|
||||
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
export LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
|
||||
|
||||
mkdir build && cd build && \
|
||||
cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DRDK_INSTALL_INTREE=ON \
|
||||
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
|
||||
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
|
||||
-DRDK_BUILD_FUZZ_TARGETS=ON \
|
||||
-DRDK_INSTALL_STATIC_LIBS=ON \
|
||||
-DBoost_USE_STATIC_LIBS=ON \
|
||||
-DRDK_BUILD_CPP_TESTS=OFF \
|
||||
-DBoost_NO_SYSTEM_PATHS=ON \
|
||||
-DCMAKE_INCLUDE_PATH="${CONDA_PREFIX}/include" \
|
||||
-DCMAKE_LIBRARY_PATH="${CONDA_PREFIX}/lib" \
|
||||
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX
|
||||
displayName: Configure build (Run CMake)
|
||||
- bash: |
|
||||
source ${CONDA}/etc/profile.d/conda.sh
|
||||
conda activate rdkit_build
|
||||
cd build
|
||||
make -j $( $(number_of_cores) ) install
|
||||
displayName: Build
|
||||
- bash: |
|
||||
source ${CONDA}/etc/profile.d/conda.sh
|
||||
conda activate rdkit_build
|
||||
corpora=$(find . -type d -name "*_fuzzer")
|
||||
for corpus in $corpora; do
|
||||
corpus_basename=$(basename $corpus)
|
||||
fuzzer_target=$(find . -type f -name "${corpus_basename}" -print -quit)
|
||||
${fuzzer_target} ${corpus}/*
|
||||
done
|
||||
displayName: Run fuzzer on existing corpora
|
||||
@@ -58,6 +58,7 @@ option(RDK_INSTALL_DEV_COMPONENT "install libraries and headers" ON)
|
||||
option(RDK_USE_BOOST_REGEX "use boost::regex instead of std::regex (needed for systems with g++-4.8)" OFF)
|
||||
option(RDK_USE_BOOST_IOSTREAMS "use boost::iostreams" ON)
|
||||
option(RDK_BUILD_MINIMAL_LIB "build the minimal RDKit wrapper (for the JS bindings)" OFF)
|
||||
option(RDK_BUILD_FUZZ_TARGETS "build the fuzz targets" OFF)
|
||||
|
||||
set(RDK_BOOST_VERSION "1.58.0")
|
||||
|
||||
|
||||
@@ -37,3 +37,8 @@ endif(RDK_BUILD_PGSQL)
|
||||
if(RDK_BUILD_MINIMAL_LIB)
|
||||
add_subdirectory(MinimalLib)
|
||||
endif(RDK_BUILD_MINIMAL_LIB)
|
||||
|
||||
|
||||
if(RDK_BUILD_FUZZ_TARGETS)
|
||||
add_subdirectory(Fuzz)
|
||||
endif(RDK_BUILD_FUZZ_TARGETS)
|
||||
|
||||
31
Code/Fuzz/CMakeLists.txt
Normal file
31
Code/Fuzz/CMakeLists.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
if(NOT LIB_FUZZING_ENGINE)
|
||||
message("LIB_FUZZING_ENGINE is not set, using standalone fuzz runner, no actual fuzzing will be done!")
|
||||
add_library(standalone_fuzz_runner STATIC standalone_fuzz_target_runner.cpp)
|
||||
set(LIB_FUZZING_ENGINE standalone_fuzz_runner)
|
||||
endif()
|
||||
|
||||
if(NOT RDK_INSTALL_STATIC_LIBS OR NOT Boost_USE_STATIC_LIBS)
|
||||
message(SEND_ERROR "Fuzzing requires static linking!")
|
||||
message(FATAL_ERROR "Compile with -DRDK_INSTALL_STATIC_LIBS=ON and -DBoost_USE_STATIC_LIBS=ON")
|
||||
endif()
|
||||
|
||||
include_directories ( "include" )
|
||||
|
||||
set(RDKit_LIBS
|
||||
ChemReactions_static FileParsers_static SmilesParse_static Depictor_static
|
||||
RDGeometryLib_static RDGeneral_static SubstructMatch_static Subgraphs_static
|
||||
MolDraw2D_static GraphMol_static RingDecomposerLib_static DistGeometry_static
|
||||
DistGeomHelpers_static MolAlign_static Optimizer_static ForceField_static
|
||||
ForceFieldHelpers_static Alignment_static ForceField_static MolTransforms_static
|
||||
EigenSolvers_static ForceFieldHelpers_static Alignment_static MolTransforms_static
|
||||
EigenSolvers_static
|
||||
)
|
||||
|
||||
macro(fuzzer name)
|
||||
add_executable(${name} ${name}.cc)
|
||||
target_link_libraries(${name} rdkit_base ${RDKit_LIBS} ${LIB_FUZZING_ENGINE})
|
||||
endmacro()
|
||||
|
||||
fuzzer(smiles_string_to_mol_fuzzer)
|
||||
fuzzer(mol_data_stream_to_mol_fuzzer)
|
||||
fuzzer(mol_deserialization_fuzzer)
|
||||
65
Code/Fuzz/README.md
Normal file
65
Code/Fuzz/README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
## Important Notice
|
||||
The files in the corpora folders (i.e. the folders ending in `_fuzzer`) can not be directly used for purposes other than fuzzing.
|
||||
This is because the fuzzer uses parts of the content for generating different information.
|
||||
Consider the example `[OH3+]0`.
|
||||
The first part `[OH3+]` will be used as a smiles formula, but the last part `0` will for example be used to determine
|
||||
whether the fuzzer should set a certain flag to `true` or it will be used to derive an integral value.
|
||||
|
||||
## Compiling
|
||||
To fuzz rdkit you need to have clang installed.
|
||||
If you have built the fuzzers you can invoke them like this:
|
||||
./smiles_string_to_mol_fuzzer -dict=smiles_string_to_mol_fuzzer.dict smiles_string_to_mol_fuzzer/
|
||||
For possible options that you can pass to the fuzzer see the libFuzzer [docs](https://llvm.org/docs/LibFuzzer.html).
|
||||
# Clang
|
||||
````shell
|
||||
export CC="clang"
|
||||
export CXX="clang++"
|
||||
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
|
||||
export COVERAGE_FLAGS="-fsanitize=fuzzer-no-link"
|
||||
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
export LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
|
||||
|
||||
mkdir build && cd build && \
|
||||
cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DRDK_INSTALL_INTREE=ON \
|
||||
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
|
||||
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
|
||||
-DRDK_BUILD_FUZZ_TARGETS=ON \
|
||||
-DRDK_INSTALL_STATIC_LIBS=ON \
|
||||
-DBoost_USE_STATIC_LIBS=ON \
|
||||
-DRDK_BUILD_CPP_TESTS=OFF \
|
||||
-DBoost_NO_SYSTEM_PATHS=ON \
|
||||
make
|
||||
````
|
||||
|
||||
# GCC (non-fuzzing mode)
|
||||
In this mode the resulting fuzzers take a list of files as argument
|
||||
and invoke the fuzz target on each file.
|
||||
No actual fuzzing will be done, since no new test cases are generated.
|
||||
````shell
|
||||
export CC="gcc"
|
||||
export CXX="g++"
|
||||
export SANITIZER_FLAGS_address="-fsanitize=address -fsanitize-address-use-after-scope"
|
||||
export COVERAGE_FLAGS=""
|
||||
export CFLAGS="-O1 -fno-omit-frame-pointer -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION $COVERAGE_FLAGS $SANITIZER_FLAGS_address"
|
||||
export CXXFLAGS="$CFLAGS"
|
||||
export LIB_FUZZING_ENGINE=""
|
||||
|
||||
mkdir build && cd build && \
|
||||
cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DRDK_INSTALL_INTREE=ON \
|
||||
-DRDK_BUILD_PYTHON_WRAPPERS=OFF \
|
||||
-DLIB_FUZZING_ENGINE=${LIB_FUZZING_ENGINE} \
|
||||
-DRDK_BUILD_FUZZ_TARGETS=ON \
|
||||
-DRDK_INSTALL_STATIC_LIBS=ON \
|
||||
-DBoost_USE_STATIC_LIBS=ON \
|
||||
-DRDK_BUILD_CPP_TESTS=OFF \
|
||||
-DBoost_NO_SYSTEM_PATHS=ON \
|
||||
make
|
||||
````
|
||||
|
||||
# GCC (fuzzing mode)
|
||||
This does not seem to be possible.
|
||||
387
Code/Fuzz/include/fuzzer/FuzzedDataProvider.h
Normal file
387
Code/Fuzz/include/fuzzer/FuzzedDataProvider.h
Normal file
@@ -0,0 +1,387 @@
|
||||
//===- FuzzedDataProvider.h - Utility header for fuzz targets ---*- C++ -* ===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
// A single header library providing an utility class to break up an array of
|
||||
// bytes. Whenever run on the same input, provides the same output, as long as
|
||||
// its methods are called in the same order, with the same arguments.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
|
||||
#define LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
|
||||
|
||||
#include <algorithm>
|
||||
#include <climits>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <initializer_list>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
// In addition to the comments below, the API is also briefly documented at
|
||||
// https://github.com/google/fuzzing/blob/master/docs/split-inputs.md#fuzzed-data-provider
|
||||
class FuzzedDataProvider {
|
||||
public:
|
||||
// |data| is an array of length |size| that the FuzzedDataProvider wraps to
|
||||
// provide more granular access. |data| must outlive the FuzzedDataProvider.
|
||||
FuzzedDataProvider(const uint8_t *data, size_t size)
|
||||
: data_ptr_(data), remaining_bytes_(size) {}
|
||||
~FuzzedDataProvider() = default;
|
||||
|
||||
// See the implementation below (after the class definition) for more verbose
|
||||
// comments for each of the methods.
|
||||
|
||||
// Methods returning std::vector of bytes. These are the most popular choice
|
||||
// when splitting fuzzing input into pieces, as every piece is put into a
|
||||
// separate buffer (i.e. ASan would catch any under-/overflow) and the memory
|
||||
// will be released automatically.
|
||||
template <typename T> std::vector<T> ConsumeBytes(size_t num_bytes);
|
||||
template <typename T>
|
||||
std::vector<T> ConsumeBytesWithTerminator(size_t num_bytes, T terminator = 0);
|
||||
template <typename T> std::vector<T> ConsumeRemainingBytes();
|
||||
|
||||
// Methods returning strings. Use only when you need a std::string or a null
|
||||
// terminated C-string. Otherwise, prefer the methods returning std::vector.
|
||||
std::string ConsumeBytesAsString(size_t num_bytes);
|
||||
std::string ConsumeRandomLengthString(size_t max_length);
|
||||
std::string ConsumeRandomLengthString();
|
||||
std::string ConsumeRemainingBytesAsString();
|
||||
|
||||
// Methods returning integer values.
|
||||
template <typename T> T ConsumeIntegral();
|
||||
template <typename T> T ConsumeIntegralInRange(T min, T max);
|
||||
|
||||
// Methods returning floating point values.
|
||||
template <typename T> T ConsumeFloatingPoint();
|
||||
template <typename T> T ConsumeFloatingPointInRange(T min, T max);
|
||||
|
||||
// 0 <= return value <= 1.
|
||||
template <typename T> T ConsumeProbability();
|
||||
|
||||
bool ConsumeBool();
|
||||
|
||||
// Returns a value chosen from the given enum.
|
||||
template <typename T> T ConsumeEnum();
|
||||
|
||||
// Returns a value from the given array.
|
||||
template <typename T, size_t size> T PickValueInArray(const T (&array)[size]);
|
||||
template <typename T> T PickValueInArray(std::initializer_list<const T> list);
|
||||
|
||||
// Writes data to the given destination and returns number of bytes written.
|
||||
size_t ConsumeData(void *destination, size_t num_bytes);
|
||||
|
||||
// Reports the remaining bytes available for fuzzed input.
|
||||
size_t remaining_bytes() { return remaining_bytes_; }
|
||||
|
||||
private:
|
||||
FuzzedDataProvider(const FuzzedDataProvider &) = delete;
|
||||
FuzzedDataProvider &operator=(const FuzzedDataProvider &) = delete;
|
||||
|
||||
void CopyAndAdvance(void *destination, size_t num_bytes);
|
||||
|
||||
void Advance(size_t num_bytes);
|
||||
|
||||
template <typename T>
|
||||
std::vector<T> ConsumeBytes(size_t size, size_t num_bytes);
|
||||
|
||||
template <typename TS, typename TU> TS ConvertUnsignedToSigned(TU value);
|
||||
|
||||
const uint8_t *data_ptr_;
|
||||
size_t remaining_bytes_;
|
||||
};
|
||||
|
||||
// Returns a std::vector containing |num_bytes| of input data. If fewer than
|
||||
// |num_bytes| of data remain, returns a shorter std::vector containing all
|
||||
// of the data that's left. Can be used with any byte sized type, such as
|
||||
// char, unsigned char, uint8_t, etc.
|
||||
template <typename T>
|
||||
std::vector<T> FuzzedDataProvider::ConsumeBytes(size_t num_bytes) {
|
||||
num_bytes = std::min(num_bytes, remaining_bytes_);
|
||||
return ConsumeBytes<T>(num_bytes, num_bytes);
|
||||
}
|
||||
|
||||
// Similar to |ConsumeBytes|, but also appends the terminator value at the end
|
||||
// of the resulting vector. Useful, when a mutable null-terminated C-string is
|
||||
// needed, for example. But that is a rare case. Better avoid it, if possible,
|
||||
// and prefer using |ConsumeBytes| or |ConsumeBytesAsString| methods.
|
||||
template <typename T>
|
||||
std::vector<T> FuzzedDataProvider::ConsumeBytesWithTerminator(size_t num_bytes,
|
||||
T terminator) {
|
||||
num_bytes = std::min(num_bytes, remaining_bytes_);
|
||||
std::vector<T> result = ConsumeBytes<T>(num_bytes + 1, num_bytes);
|
||||
result.back() = terminator;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Returns a std::vector containing all remaining bytes of the input data.
|
||||
template <typename T>
|
||||
std::vector<T> FuzzedDataProvider::ConsumeRemainingBytes() {
|
||||
return ConsumeBytes<T>(remaining_bytes_);
|
||||
}
|
||||
|
||||
// Returns a std::string containing |num_bytes| of input data. Using this and
|
||||
// |.c_str()| on the resulting string is the best way to get an immutable
|
||||
// null-terminated C string. If fewer than |num_bytes| of data remain, returns
|
||||
// a shorter std::string containing all of the data that's left.
|
||||
inline std::string FuzzedDataProvider::ConsumeBytesAsString(size_t num_bytes) {
|
||||
static_assert(sizeof(std::string::value_type) == sizeof(uint8_t),
|
||||
"ConsumeBytesAsString cannot convert the data to a string.");
|
||||
|
||||
num_bytes = std::min(num_bytes, remaining_bytes_);
|
||||
std::string result(
|
||||
reinterpret_cast<const std::string::value_type *>(data_ptr_), num_bytes);
|
||||
Advance(num_bytes);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Returns a std::string of length from 0 to |max_length|. When it runs out of
|
||||
// input data, returns what remains of the input. Designed to be more stable
|
||||
// with respect to a fuzzer inserting characters than just picking a random
|
||||
// length and then consuming that many bytes with |ConsumeBytes|.
|
||||
inline std::string
|
||||
FuzzedDataProvider::ConsumeRandomLengthString(size_t max_length) {
|
||||
// Reads bytes from the start of |data_ptr_|. Maps "\\" to "\", and maps "\"
|
||||
// followed by anything else to the end of the string. As a result of this
|
||||
// logic, a fuzzer can insert characters into the string, and the string
|
||||
// will be lengthened to include those new characters, resulting in a more
|
||||
// stable fuzzer than picking the length of a string independently from
|
||||
// picking its contents.
|
||||
std::string result;
|
||||
|
||||
// Reserve the anticipated capaticity to prevent several reallocations.
|
||||
result.reserve(std::min(max_length, remaining_bytes_));
|
||||
for (size_t i = 0; i < max_length && remaining_bytes_ != 0; ++i) {
|
||||
char next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
|
||||
Advance(1);
|
||||
if (next == '\\' && remaining_bytes_ != 0) {
|
||||
next = ConvertUnsignedToSigned<char>(data_ptr_[0]);
|
||||
Advance(1);
|
||||
if (next != '\\')
|
||||
break;
|
||||
}
|
||||
result += next;
|
||||
}
|
||||
|
||||
result.shrink_to_fit();
|
||||
return result;
|
||||
}
|
||||
|
||||
// Returns a std::string of length from 0 to |remaining_bytes_|.
|
||||
inline std::string FuzzedDataProvider::ConsumeRandomLengthString() {
|
||||
return ConsumeRandomLengthString(remaining_bytes_);
|
||||
}
|
||||
|
||||
// Returns a std::string containing all remaining bytes of the input data.
|
||||
// Prefer using |ConsumeRemainingBytes| unless you actually need a std::string
|
||||
// object.
|
||||
inline std::string FuzzedDataProvider::ConsumeRemainingBytesAsString() {
|
||||
return ConsumeBytesAsString(remaining_bytes_);
|
||||
}
|
||||
|
||||
// Returns a number in the range [Type's min, Type's max]. The value might
|
||||
// not be uniformly distributed in the given range. If there's no input data
|
||||
// left, always returns |min|.
|
||||
template <typename T> T FuzzedDataProvider::ConsumeIntegral() {
|
||||
return ConsumeIntegralInRange(std::numeric_limits<T>::min(),
|
||||
std::numeric_limits<T>::max());
|
||||
}
|
||||
|
||||
// Returns a number in the range [min, max] by consuming bytes from the
|
||||
// input data. The value might not be uniformly distributed in the given
|
||||
// range. If there's no input data left, always returns |min|. |min| must
|
||||
// be less than or equal to |max|.
|
||||
template <typename T>
|
||||
T FuzzedDataProvider::ConsumeIntegralInRange(T min, T max) {
|
||||
static_assert(std::is_integral<T>::value, "An integral type is required.");
|
||||
static_assert(sizeof(T) <= sizeof(uint64_t), "Unsupported integral type.");
|
||||
|
||||
if (min > max)
|
||||
abort();
|
||||
|
||||
// Use the biggest type possible to hold the range and the result.
|
||||
uint64_t range = static_cast<uint64_t>(max) - min;
|
||||
uint64_t result = 0;
|
||||
size_t offset = 0;
|
||||
|
||||
while (offset < sizeof(T) * CHAR_BIT && (range >> offset) > 0 &&
|
||||
remaining_bytes_ != 0) {
|
||||
// Pull bytes off the end of the seed data. Experimentally, this seems to
|
||||
// allow the fuzzer to more easily explore the input space. This makes
|
||||
// sense, since it works by modifying inputs that caused new code to run,
|
||||
// and this data is often used to encode length of data read by
|
||||
// |ConsumeBytes|. Separating out read lengths makes it easier modify the
|
||||
// contents of the data that is actually read.
|
||||
--remaining_bytes_;
|
||||
result = (result << CHAR_BIT) | data_ptr_[remaining_bytes_];
|
||||
offset += CHAR_BIT;
|
||||
}
|
||||
|
||||
// Avoid division by 0, in case |range + 1| results in overflow.
|
||||
if (range != std::numeric_limits<decltype(range)>::max())
|
||||
result = result % (range + 1);
|
||||
|
||||
return static_cast<T>(min + result);
|
||||
}
|
||||
|
||||
// Returns a floating point value in the range [Type's lowest, Type's max] by
|
||||
// consuming bytes from the input data. If there's no input data left, always
|
||||
// returns approximately 0.
|
||||
template <typename T> T FuzzedDataProvider::ConsumeFloatingPoint() {
|
||||
return ConsumeFloatingPointInRange<T>(std::numeric_limits<T>::lowest(),
|
||||
std::numeric_limits<T>::max());
|
||||
}
|
||||
|
||||
// Returns a floating point value in the given range by consuming bytes from
|
||||
// the input data. If there's no input data left, returns |min|. Note that
|
||||
// |min| must be less than or equal to |max|.
|
||||
template <typename T>
|
||||
T FuzzedDataProvider::ConsumeFloatingPointInRange(T min, T max) {
|
||||
if (min > max)
|
||||
abort();
|
||||
|
||||
T range = .0;
|
||||
T result = min;
|
||||
constexpr T zero(.0);
|
||||
if (max > zero && min < zero && max > min + std::numeric_limits<T>::max()) {
|
||||
// The diff |max - min| would overflow the given floating point type. Use
|
||||
// the half of the diff as the range and consume a bool to decide whether
|
||||
// the result is in the first of the second part of the diff.
|
||||
range = (max / 2.0) - (min / 2.0);
|
||||
if (ConsumeBool()) {
|
||||
result += range;
|
||||
}
|
||||
} else {
|
||||
range = max - min;
|
||||
}
|
||||
|
||||
return result + range * ConsumeProbability<T>();
|
||||
}
|
||||
|
||||
// Returns a floating point number in the range [0.0, 1.0]. If there's no
|
||||
// input data left, always returns 0.
|
||||
template <typename T> T FuzzedDataProvider::ConsumeProbability() {
|
||||
static_assert(std::is_floating_point<T>::value,
|
||||
"A floating point type is required.");
|
||||
|
||||
// Use different integral types for different floating point types in order
|
||||
// to provide better density of the resulting values.
|
||||
using IntegralType =
|
||||
typename std::conditional<(sizeof(T) <= sizeof(uint32_t)), uint32_t,
|
||||
uint64_t>::type;
|
||||
|
||||
T result = static_cast<T>(ConsumeIntegral<IntegralType>());
|
||||
result /= static_cast<T>(std::numeric_limits<IntegralType>::max());
|
||||
return result;
|
||||
}
|
||||
|
||||
// Reads one byte and returns a bool, or false when no data remains.
|
||||
inline bool FuzzedDataProvider::ConsumeBool() {
|
||||
return 1 & ConsumeIntegral<uint8_t>();
|
||||
}
|
||||
|
||||
// Returns an enum value. The enum must start at 0 and be contiguous. It must
|
||||
// also contain |kMaxValue| aliased to its largest (inclusive) value. Such as:
|
||||
// enum class Foo { SomeValue, OtherValue, kMaxValue = OtherValue };
|
||||
template <typename T> T FuzzedDataProvider::ConsumeEnum() {
|
||||
static_assert(std::is_enum<T>::value, "|T| must be an enum type.");
|
||||
return static_cast<T>(
|
||||
ConsumeIntegralInRange<uint32_t>(0, static_cast<uint32_t>(T::kMaxValue)));
|
||||
}
|
||||
|
||||
// Returns a copy of the value selected from the given fixed-size |array|.
|
||||
template <typename T, size_t size>
|
||||
T FuzzedDataProvider::PickValueInArray(const T (&array)[size]) {
|
||||
static_assert(size > 0, "The array must be non empty.");
|
||||
return array[ConsumeIntegralInRange<size_t>(0, size - 1)];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T FuzzedDataProvider::PickValueInArray(std::initializer_list<const T> list) {
|
||||
// TODO(Dor1s): switch to static_assert once C++14 is allowed.
|
||||
if (!list.size())
|
||||
abort();
|
||||
|
||||
return *(list.begin() + ConsumeIntegralInRange<size_t>(0, list.size() - 1));
|
||||
}
|
||||
|
||||
// Writes |num_bytes| of input data to the given destination pointer. If there
|
||||
// is not enough data left, writes all remaining bytes. Return value is the
|
||||
// number of bytes written.
|
||||
// In general, it's better to avoid using this function, but it may be useful
|
||||
// in cases when it's necessary to fill a certain buffer or object with
|
||||
// fuzzing data.
|
||||
inline size_t FuzzedDataProvider::ConsumeData(void *destination,
|
||||
size_t num_bytes) {
|
||||
num_bytes = std::min(num_bytes, remaining_bytes_);
|
||||
CopyAndAdvance(destination, num_bytes);
|
||||
return num_bytes;
|
||||
}
|
||||
|
||||
// Private methods.
|
||||
inline void FuzzedDataProvider::CopyAndAdvance(void *destination,
|
||||
size_t num_bytes) {
|
||||
std::memcpy(destination, data_ptr_, num_bytes);
|
||||
Advance(num_bytes);
|
||||
}
|
||||
|
||||
inline void FuzzedDataProvider::Advance(size_t num_bytes) {
|
||||
if (num_bytes > remaining_bytes_)
|
||||
abort();
|
||||
|
||||
data_ptr_ += num_bytes;
|
||||
remaining_bytes_ -= num_bytes;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::vector<T> FuzzedDataProvider::ConsumeBytes(size_t size, size_t num_bytes) {
|
||||
static_assert(sizeof(T) == sizeof(uint8_t), "Incompatible data type.");
|
||||
|
||||
// The point of using the size-based constructor below is to increase the
|
||||
// odds of having a vector object with capacity being equal to the length.
|
||||
// That part is always implementation specific, but at least both libc++ and
|
||||
// libstdc++ allocate the requested number of bytes in that constructor,
|
||||
// which seems to be a natural choice for other implementations as well.
|
||||
// To increase the odds even more, we also call |shrink_to_fit| below.
|
||||
std::vector<T> result(size);
|
||||
if (size == 0) {
|
||||
if (num_bytes != 0)
|
||||
abort();
|
||||
return result;
|
||||
}
|
||||
|
||||
CopyAndAdvance(result.data(), num_bytes);
|
||||
|
||||
// Even though |shrink_to_fit| is also implementation specific, we expect it
|
||||
// to provide an additional assurance in case vector's constructor allocated
|
||||
// a buffer which is larger than the actual amount of data we put inside it.
|
||||
result.shrink_to_fit();
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename TS, typename TU>
|
||||
TS FuzzedDataProvider::ConvertUnsignedToSigned(TU value) {
|
||||
static_assert(sizeof(TS) == sizeof(TU), "Incompatible data types.");
|
||||
static_assert(!std::numeric_limits<TU>::is_signed,
|
||||
"Source type must be unsigned.");
|
||||
|
||||
// TODO(Dor1s): change to `if constexpr` once C++17 becomes mainstream.
|
||||
if (std::numeric_limits<TS>::is_modulo)
|
||||
return static_cast<TS>(value);
|
||||
|
||||
// Avoid using implementation-defined unsigned to signed conversions.
|
||||
// To learn more, see https://stackoverflow.com/questions/13150449.
|
||||
if (value <= std::numeric_limits<TS>::max()) {
|
||||
return static_cast<TS>(value);
|
||||
} else {
|
||||
constexpr auto TS_min = std::numeric_limits<TS>::min();
|
||||
return TS_min + static_cast<char>(value - TS_min);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // LLVM_FUZZER_FUZZED_DATA_PROVIDER_H_
|
||||
41
Code/Fuzz/mol_data_stream_to_mol_fuzzer.cc
Normal file
41
Code/Fuzz/mol_data_stream_to_mol_fuzzer.cc
Normal file
@@ -0,0 +1,41 @@
|
||||
// Copyright 2020 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <fuzzer/FuzzedDataProvider.h>
|
||||
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include "GraphMol/FileParsers/FileParsers.h"
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
FuzzedDataProvider fdp(data, size);
|
||||
|
||||
const bool sanitize = fdp.ConsumeIntegralInRange(0, 1);
|
||||
const bool remove_hs = fdp.ConsumeIntegralInRange(0, 1);
|
||||
const bool strict_parsing = fdp.ConsumeIntegralInRange(0, 1);
|
||||
std::istringstream data_stream(fdp.ConsumeRemainingBytesAsString());
|
||||
unsigned int num_lines = 0; // output parameter.
|
||||
|
||||
std::unique_ptr<RDKit::RWMol> result = nullptr;
|
||||
|
||||
try {
|
||||
result.reset(RDKit::MolDataStreamToMol(&data_stream, num_lines, sanitize,
|
||||
remove_hs, strict_parsing));
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
94
Code/Fuzz/mol_data_stream_to_mol_fuzzer.dict
Normal file
94
Code/Fuzz/mol_data_stream_to_mol_fuzzer.dict
Normal file
@@ -0,0 +1,94 @@
|
||||
# Mixture of V2000 and V3000 MDL Mofile/Chemical table file strings
|
||||
# Taken from https://www.daylight.com/meetings/mug05/Kappler/ctfile.pdf
|
||||
|
||||
"0"
|
||||
"1"
|
||||
"2"
|
||||
"3"
|
||||
"4"
|
||||
"5"
|
||||
"6"
|
||||
"7"
|
||||
"8"
|
||||
"9"
|
||||
"+"
|
||||
"-"
|
||||
"."
|
||||
","
|
||||
" "
|
||||
" "
|
||||
" "
|
||||
" "
|
||||
" "
|
||||
|
||||
"V2000"
|
||||
"V3000"
|
||||
"M"
|
||||
"CHG"
|
||||
"ISO"
|
||||
"END"
|
||||
"RAD"
|
||||
"H0"
|
||||
"H1"
|
||||
"H2"
|
||||
"H3"
|
||||
"SUP"
|
||||
"MUL"
|
||||
"SRU"
|
||||
"MON"
|
||||
"MER"
|
||||
"COP"
|
||||
"CRO"
|
||||
"MOD"
|
||||
"GRA"
|
||||
"COM"
|
||||
"MIX"
|
||||
"FOR"
|
||||
"DAT"
|
||||
"ANY"
|
||||
"GEN"
|
||||
"HH"
|
||||
"HT"
|
||||
"EU"
|
||||
"SBV"
|
||||
"SCD"
|
||||
"SED"
|
||||
"MPA"
|
||||
"SAP"
|
||||
"SCL"
|
||||
"REG"
|
||||
"SBT"
|
||||
"$3D"
|
||||
"M $3D"
|
||||
"M $3D -1 0 POINT_1"
|
||||
"M $3D -4 1 N_TO_AROM"
|
||||
"M $3D -5 2 PLANE_2"
|
||||
"M $3D -6 3 PLANE_1"
|
||||
"M $3D -7 4 ARO_CENTER"
|
||||
"M $3D -8 5 ARO_NORMAL"
|
||||
"M $3D -9 6 L"
|
||||
"M $3D-12 7 THETA1"
|
||||
"M $3D-13 8 THETA2"
|
||||
"M $3D-15 9 DIHED1"
|
||||
"M $3D-16 10 EXCL_SPHERE"
|
||||
"M $3D-17"
|
||||
"M $3D 4"
|
||||
"M $3D 1 2 3 4"
|
||||
"M $3D 7 0 CNDO.CHARGE"
|
||||
"M $3D 9 0 BOND.LENGTH"
|
||||
"M $3D 12 0 CHARGE"
|
||||
|
||||
# V3000
|
||||
"M V30 "
|
||||
"V30 BEGIN CTAB"
|
||||
"V30"
|
||||
"COUNTS 6 5 0 0 1"
|
||||
"BEGIN"
|
||||
"ATOM"
|
||||
"CTAB"
|
||||
"BOND"
|
||||
"END"
|
||||
"CFG="
|
||||
"CFG"
|
||||
"MASS"
|
||||
"="
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.1445 -1.2214 0.5097 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.3720 0.0109 0.4789 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1805 1.0431 -0.2688 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8608 -0.2831 -0.3176 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8362 0.4504 -0.4022 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
4 3 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.0000 -1.5000 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.2990 0.7500 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,78 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
37 36 0 0 0 0 0 0 0 0999 V2000
|
||||
-6.7500 -3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.2500 -3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.5000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.0000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.2500 -3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.2500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.2500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.7500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.2500 9.0933 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.2500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.7500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.5000 10.3923 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.5000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.7500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
20.2500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
22.5000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.2500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
24.0000 18.1865 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
24.7500 19.4856 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
25.5000 20.7846 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
26.2500 22.0836 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
27.7500 22.0836 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
28.5000 23.3827 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 6
|
||||
4 6 1 0
|
||||
6 7 1 0
|
||||
7 8 1 0
|
||||
8 9 2 0
|
||||
9 10 1 0
|
||||
10 11 2 0
|
||||
11 12 1 0
|
||||
12 13 3 0
|
||||
13 14 1 0
|
||||
14 15 3 0
|
||||
15 16 1 0
|
||||
16 17 2 0
|
||||
17 18 1 0
|
||||
18 19 1 0
|
||||
19 20 1 0
|
||||
20 21 1 0
|
||||
21 22 1 0
|
||||
22 23 1 0
|
||||
23 24 1 6
|
||||
23 25 1 0
|
||||
25 26 1 0
|
||||
26 27 1 0
|
||||
27 28 2 0
|
||||
28 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 3 0
|
||||
32 33 1 0
|
||||
33 34 3 0
|
||||
34 35 1 0
|
||||
35 36 2 0
|
||||
36 37 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
4 3 0 0 0 0 0 0 0 0999 V2000
|
||||
1.7753 -0.0194 0.4524 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.5599 0.5333 -0.2486 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5973 -0.3417 0.1003 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.7379 -0.1723 -0.3042 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
22 23 0 0 0 0 0 0 0 0999 V2000
|
||||
-0.4580 0.8239 -2.5509 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1258 1.5627 -1.8455 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.0321 1.1050 -0.7861 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.8537 2.0932 -0.2474 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.7734 1.7609 0.7413 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.8579 0.4453 1.1843 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.8093 0.1482 2.1162 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.0167 -0.5453 0.6681 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.1053 -1.8579 1.0474 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.8463 -1.9334 2.4469 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.0960 -0.2204 -0.3356 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1954 -1.2760 -0.8938 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0154 -1.2667 -0.1472 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.0607 -1.4390 -1.0943 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3143 -0.8701 -0.5223 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.6219 0.4752 -0.7185 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7960 0.9874 -0.1786 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.0775 2.4019 -0.4035 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.0634 2.9736 0.0328 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.6718 0.1873 0.5487 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.3619 -1.1568 0.7365 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.1870 -1.6849 0.2015 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 2 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
4 5 1 0
|
||||
5 6 2 0
|
||||
6 7 1 0
|
||||
6 8 1 0
|
||||
8 9 1 0
|
||||
9 10 1 0
|
||||
8 11 2 0
|
||||
11 12 1 0
|
||||
12 13 1 0
|
||||
13 14 1 0
|
||||
14 15 1 0
|
||||
15 16 2 0
|
||||
16 17 1 0
|
||||
17 18 1 0
|
||||
18 19 2 0
|
||||
17 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
11 3 1 0
|
||||
22 15 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.2566 0.8761 0.8454 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4081 -0.2156 0.3935 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0868 -0.8693 -0.7855 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8641 0.4094 -0.0877 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8874 -0.2006 -0.3657 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
2.0118 -0.0152 -0.0957 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7095 -0.6718 0.0293 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
-0.5315 0.1117 0.0151 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.6221 1.3217 -0.0949 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5677 -0.7463 0.1463 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M RAD 1 2 2
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.4068 -1.0279 0.1601 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4312 0.0177 0.4262 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.9222 1.2845 -0.2314 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8340 -0.4017 -0.2550 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9262 0.1273 -0.1000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 2 0
|
||||
2 4 1 0
|
||||
4 5 1 0
|
||||
M RAD 1 4 2
|
||||
M END000
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
4 3 0 0 0 0 0 0 0 0999 V2000
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.8123 0.1545 -0.4246 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8564 -0.0316 0.6582 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5175 -0.1102 0.0645 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1018 -1.1433 -0.2310 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0493 1.1306 -0.0671 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,78 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
37 36 0 0 0 0 0 0 0 0999 V2000
|
||||
-8.7137 5.4457 -5.9371 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-9.4199 4.1321 -6.1599 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.5534 3.9932 -5.1698 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.3078 2.6862 -5.3032 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
-11.6727 2.4754 -6.6571 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.4784 1.5084 -4.8485 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.3065 1.5274 -3.3489 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-9.4115 0.4210 -2.9336 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-8.3101 0.6287 -2.2106 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-7.4544 -0.4485 -1.8168 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.3527 -0.2409 -1.0940 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.5095 -1.3105 -0.7060 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.7899 -2.2118 -0.3730 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.8666 -3.3679 0.0545 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.1467 -4.2690 0.3874 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.3045 -5.3376 0.7790 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0005 -5.1549 0.9893 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.1047 -6.2642 1.3918 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.5952 -5.8798 2.5666 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.6607 -6.7965 2.7556 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.9013 -6.3533 2.0100 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.2044 -4.8887 2.2309 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.3724 -4.4284 1.3917 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
4.1213 -4.7027 0.0226 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.5794 -2.9454 1.5850 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.7460 -2.4455 0.7671 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.9972 -1.0180 1.0792 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.1919 -0.5740 1.4724 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.4193 0.8064 1.7726 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.6137 1.2512 2.1660 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.8324 2.6184 2.4632 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.0246 3.7758 2.7170 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.2710 5.2605 3.0429 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.4633 6.4178 3.2971 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.6817 7.7845 3.5955 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.8906 8.2390 3.9271 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.1369 9.6659 4.2424 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 6
|
||||
4 6 1 0
|
||||
6 7 1 0
|
||||
7 8 1 0
|
||||
8 9 2 0
|
||||
9 10 1 0
|
||||
10 11 2 0
|
||||
11 12 1 0
|
||||
12 13 3 0
|
||||
13 14 1 0
|
||||
14 15 3 0
|
||||
15 16 1 0
|
||||
16 17 2 0
|
||||
17 18 1 0
|
||||
18 19 1 0
|
||||
19 20 1 0
|
||||
20 21 1 0
|
||||
21 22 1 0
|
||||
22 23 1 0
|
||||
23 24 1 6
|
||||
23 25 1 0
|
||||
25 26 1 0
|
||||
26 27 1 0
|
||||
27 28 2 0
|
||||
28 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 3 0
|
||||
32 33 1 0
|
||||
33 34 3 0
|
||||
34 35 1 0
|
||||
35 36 2 0
|
||||
36 37 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-0.7839 1.0001 -0.5745 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5596 -0.1794 0.0438 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.4278 -0.9729 0.3733 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8711 -0.4048 0.2794 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
1.9003 0.5570 -0.1221 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 2 0
|
||||
2 4 1 0
|
||||
4 5 1 0
|
||||
M RAD 1 4 2
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2 1 1 6
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
4 3 0 0 0 0 0 0 0 0999 V2000
|
||||
1.7317 0.4612 0.3814 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.4788 0.4698 -0.4579 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5391 -0.3645 0.2449 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.6713 -0.5665 -0.1683 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
0.5490 2.0490 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 1.5000 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0490 -0.5490 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
2 5 1 0
|
||||
M ISO 1 1 2
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M RAD 1 2 2
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.5490 2.0490 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0490 -0.5490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 B 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
1 3 1 0
|
||||
1 4 1 0
|
||||
1 5 1 0
|
||||
M END000
|
||||
@@ -0,0 +1 @@
|
||||
000
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
17 18 0 0 0 0 0 0 0 0999 V2000
|
||||
-0.6546 -10.1364 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8113 -8.6446 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.4022 -7.7629 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.2454 -6.2711 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.3601 -5.2674 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.8273 -5.5793 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 -3.8971 0.0000 N 0 0 0 0 0 4 0 0 0 0 0 0
|
||||
-0.7418 -4.0539 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0537 -5.5211 0.0000 S 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 -2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 1.2990 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 2 0
|
||||
5 6 1 0
|
||||
5 7 1 0
|
||||
7 8 2 0
|
||||
8 9 1 0
|
||||
7 10 1 0
|
||||
10 11 1 0
|
||||
11 12 2 0
|
||||
12 13 1 0
|
||||
13 14 2 0
|
||||
14 15 1 0
|
||||
14 16 1 0
|
||||
16 17 2 0
|
||||
9 4 1 0
|
||||
17 11 1 0
|
||||
M CHG 1 7 1
|
||||
M END000
|
||||
@@ -0,0 +1,147 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
65 77 0 0 0 0 0 0 0 0999 V2000
|
||||
2.3907 1.0037 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2760 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.3907 -1.0037 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.3943 1.2135 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.3943 -1.2135 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0323 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.0196 -1.6707 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0323 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8755 2.2418 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.4026 0.1399 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.7063 -1.1755 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.6161 1.0216 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.0834 0.7097 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.8334 2.0087 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.8297 3.1235 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.4593 2.5134 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.0890 3.1235 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.8853 3.6797 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.9803 3.1892 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.9689 4.4754 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.7729 5.4969 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.9864 4.6152 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.3568 5.2253 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.5136 6.7171 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.3000 7.5988 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.4568 9.0906 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.9297 6.9887 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.5594 6.3786 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.7162 7.8704 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.8730 9.3622 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.6595 10.2438 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.2433 9.9723 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.4001 11.4641 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.1866 12.3457 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.3434 13.8375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.1298 14.7192 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.5002 15.3293 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8162 11.7356 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.6027 12.6173 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7595 14.1091 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.4540 14.9908 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.2972 16.4825 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0731 17.0927 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.2866 16.2110 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.6569 16.8211 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.8137 18.3129 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.1841 18.9230 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.6002 19.1945 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.8429 19.7220 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.2299 18.5844 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.2262 19.6992 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.9762 20.9982 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8194 22.4900 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.4434 20.6863 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.7883 20.5687 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.1934 21.9854 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.6852 22.1422 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.1897 23.1001 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.5600 23.7102 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.1860 24.2148 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.3058 24.0580 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.9360 25.5138 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.4033 25.2020 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.9033 25.2020 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.5600 26.6937 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
2 5 1 0
|
||||
5 6 1 0
|
||||
6 7 1 1
|
||||
6 8 1 0
|
||||
8 9 1 6
|
||||
8 10 1 0
|
||||
10 11 1 1
|
||||
10 12 1 0
|
||||
12 13 1 6
|
||||
13 14 1 0
|
||||
14 15 2 0
|
||||
15 16 1 0
|
||||
16 17 1 1
|
||||
16 18 1 0
|
||||
18 19 2 0
|
||||
18 20 1 0
|
||||
21 20 1 1
|
||||
21 22 1 0
|
||||
22 23 1 6
|
||||
23 24 1 0
|
||||
25 24 1 1
|
||||
25 26 1 0
|
||||
25 27 1 0
|
||||
27 28 1 1
|
||||
27 29 1 0
|
||||
29 30 1 0
|
||||
30 31 1 0
|
||||
30 32 2 0
|
||||
32 33 1 0
|
||||
33 34 2 0
|
||||
34 35 1 0
|
||||
35 36 1 0
|
||||
36 37 1 1
|
||||
34 38 1 0
|
||||
38 39 1 0
|
||||
40 39 1 1
|
||||
40 41 1 0
|
||||
41 42 1 0
|
||||
43 42 1 6
|
||||
43 44 1 0
|
||||
44 45 1 1
|
||||
45 46 1 0
|
||||
46 47 1 1
|
||||
46 48 1 0
|
||||
48 49 1 1
|
||||
48 50 1 0
|
||||
50 51 2 0
|
||||
52 51 1 1
|
||||
52 53 1 0
|
||||
52 54 1 0
|
||||
54 55 1 6
|
||||
54 56 1 0
|
||||
56 57 1 6
|
||||
56 58 1 0
|
||||
58 59 1 1
|
||||
58 60 1 0
|
||||
60 61 1 1
|
||||
60 62 1 0
|
||||
62 63 1 0
|
||||
63 64 1 0
|
||||
63 65 1 0
|
||||
8 4 1 0
|
||||
17 9 1 0
|
||||
16 12 1 0
|
||||
22 15 1 0
|
||||
27 21 1 0
|
||||
32 26 1 0
|
||||
38 31 2 0
|
||||
40 36 1 0
|
||||
44 36 1 0
|
||||
50 43 1 0
|
||||
54 48 1 0
|
||||
58 53 1 0
|
||||
63 59 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 6
|
||||
1 3 1 0
|
||||
1 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.3765 0.9720 0.4711 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4691 0.1767 -0.3415 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.9439 -1.2554 -0.2952 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8683 0.2469 0.3270 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.9211 -0.1402 -0.1614 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
0 0 0 0 0 0 0 0 0 0999 V2000
|
||||
M END000
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
3 2 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.2990 0.7500 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
0.5490 2.0490 0.0000 Br 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 1.5000 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0490 -0.5490 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
2 4 1 0
|
||||
2 5 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.8044 -0.0235 -0.4818 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.8533 -0.3203 0.5803 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5271 -0.0428 0.0669 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.2764 -0.8720 -0.4301 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8543 1.2586 0.2647 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,78 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
37 36 0 0 0 0 0 0 0 0999 V2000
|
||||
17.4748 -1.4516 0.6801 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.3763 -1.7332 -0.3138 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.0330 -0.4652 -1.0612 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.9315 -0.6526 -2.0806 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
15.1920 -1.7863 -2.8901 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.5905 -0.7985 -1.3996 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.4794 -0.9662 -2.4080 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.1739 -1.0152 -1.7062 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.1655 -0.1986 -2.0186 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.8938 -0.2220 -1.3597 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.0545 -1.2588 -1.4098 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.8059 -1.2317 -0.7421 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.7454 -1.2153 -0.1798 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.3844 -1.1937 0.5404 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.3230 -1.1769 1.1011 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0751 -1.1536 1.7694 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.9534 -1.5433 1.1627 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.3594 -1.5283 1.8498 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.2777 -0.7893 1.0606 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.4869 -0.7172 1.7972 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.5176 -0.0329 0.9329 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.8048 0.1515 1.7005 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-5.7774 -0.9731 1.4184 C 0 0 1 0 0 0 0 0 0 0 0 0
|
||||
-5.3019 -2.1481 2.0599 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-7.1373 -0.6551 1.9965 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-7.8260 0.4447 1.2219 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-8.5494 -0.1104 0.0516 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-8.3227 0.3148 -1.1930 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-9.0185 -0.2021 -2.3344 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.2660 0.0774 -2.7216 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.1425 0.9751 -2.0626 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.8870 1.7343 -1.5055 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-12.8387 2.7083 -0.7871 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-13.5802 3.4678 -0.2264 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-14.4618 4.3614 0.4284 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-14.0930 5.0226 1.5260 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-15.0039 5.9613 2.2229 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 1
|
||||
4 6 1 0
|
||||
6 7 1 0
|
||||
7 8 1 0
|
||||
8 9 2 0
|
||||
9 10 1 0
|
||||
10 11 2 0
|
||||
11 12 1 0
|
||||
12 13 3 0
|
||||
13 14 1 0
|
||||
14 15 3 0
|
||||
15 16 1 0
|
||||
16 17 2 0
|
||||
17 18 1 0
|
||||
18 19 1 0
|
||||
19 20 1 0
|
||||
20 21 1 0
|
||||
21 22 1 0
|
||||
22 23 1 0
|
||||
23 24 1 1
|
||||
23 25 1 0
|
||||
25 26 1 0
|
||||
26 27 1 0
|
||||
27 28 2 0
|
||||
28 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 3 0
|
||||
32 33 1 0
|
||||
33 34 3 0
|
||||
34 35 1 0
|
||||
35 36 2 0
|
||||
36 37 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
2.0042 0.0964 -0.1742 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7518 -0.6210 0.0694 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
-0.5368 0.0803 0.0249 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7086 1.2646 -0.2047 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5107 -0.8203 0.2846 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M RAD 1 2 2
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 1
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -1.5000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 2 0
|
||||
2 4 1 0
|
||||
4 5 1 6
|
||||
M END000
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
22 23 0 0 0 0 0 0 0 0999 V2000
|
||||
3.7500 -1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.2500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 2 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
4 5 1 0
|
||||
5 6 2 0
|
||||
6 7 1 0
|
||||
6 8 1 0
|
||||
8 9 1 0
|
||||
9 10 1 0
|
||||
8 11 2 0
|
||||
11 12 1 0
|
||||
12 13 1 0
|
||||
13 14 1 0
|
||||
14 15 1 0
|
||||
15 16 2 0
|
||||
16 17 1 0
|
||||
17 18 1 0
|
||||
18 19 2 0
|
||||
17 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
11 3 1 0
|
||||
22 15 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
22 23 0 0 0 0 0 0 0 0999 V2000
|
||||
-3.7646 0.6326 -2.9889 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-3.0141 0.1972 -2.1301 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.2591 1.0489 -1.2025 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.2239 2.4220 -1.4385 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.4992 3.2449 -0.5860 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8336 2.6915 0.5038 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.0922 3.5409 1.2739 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.8900 1.3174 0.7703 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.2429 0.7170 1.8206 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4392 1.4672 3.0170 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5881 0.4755 -0.1119 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.6348 -1.0028 0.1378 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.0823 -1.6866 -0.9843 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.2777 -2.7554 -0.4938 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.1372 -2.2927 -0.3858 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.4880 -1.4515 0.6638 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.7597 -0.9026 0.7230 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0556 0.1042 1.7376 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.1970 0.5556 2.4827 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7233 -1.2259 -0.2216 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.3875 -2.1111 -1.2467 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.0933 -2.6313 -1.3405 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 2 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
4 5 1 0
|
||||
5 6 2 0
|
||||
6 7 1 0
|
||||
6 8 1 0
|
||||
8 9 1 0
|
||||
9 10 1 0
|
||||
8 11 2 0
|
||||
11 12 1 0
|
||||
12 13 1 0
|
||||
13 14 1 0
|
||||
14 15 1 0
|
||||
15 16 2 0
|
||||
16 17 1 0
|
||||
17 18 1 0
|
||||
18 19 2 0
|
||||
17 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
11 3 1 0
|
||||
22 15 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.4663 0.7934 0.5063 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.5415 -0.0358 -0.0267 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7786 -1.0371 -0.6791 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7864 0.4846 0.3200 C 0 0 0 0 0 3 0 0 0 0 0 0
|
||||
2.0000 -0.2051 -0.1205 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 2 0
|
||||
2 4 1 0
|
||||
4 5 1 0
|
||||
M RAD 1 4 2
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
-1.2990 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 2 0
|
||||
3 5 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,82 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
38 39 0 0 0 0 0 0 0 0999 V2000
|
||||
-11.2932 -1.8023 1.3473 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.4584 -0.8987 0.1419 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-12.9377 -0.5641 0.0413 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-13.2031 0.7673 -0.6213 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-12.4469 1.8640 0.0979 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.9891 1.5506 0.1952 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.1062 2.7517 0.2530 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.5255 0.2859 0.1990 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-9.1004 0.0409 0.1971 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-8.4909 -1.1366 0.0345 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-7.0674 -1.3403 0.0395 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.6424 -2.6487 0.6085 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.2106 -0.4517 -0.4773 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.7879 -0.6053 -0.5282 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.0014 0.3338 -1.0592 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.5674 0.2667 -1.1490 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.0029 0.9594 -2.3402 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8119 -0.3194 -0.2116 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.3811 -0.3993 -0.1932 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.3975 0.6310 0.1436 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8257 0.5299 0.1420 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.6696 1.5158 0.4688 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.2185 2.8821 0.8525 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.0989 1.3642 0.4142 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.7677 0.2423 0.6912 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.1958 0.1796 0.6087 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.9390 -0.9030 0.8662 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.3639 -2.2002 1.3167 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.3751 -0.8916 0.7935 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.0962 -0.2027 -0.0967 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.5408 -0.1972 -0.1577 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3266 0.2080 0.8594 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.8050 0.6448 2.1868 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.8150 0.2892 0.7365 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.2704 0.4200 -0.7016 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.6264 -0.6520 -1.5493 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.1099 -0.5894 -1.4972 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.5824 -1.9249 -1.9791 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 0
|
||||
5 6 1 0
|
||||
6 7 1 0
|
||||
6 8 2 0
|
||||
8 9 1 0
|
||||
9 10 2 0
|
||||
10 11 1 0
|
||||
11 12 1 0
|
||||
11 13 2 0
|
||||
13 14 1 0
|
||||
14 15 2 0
|
||||
15 16 1 0
|
||||
16 17 1 0
|
||||
16 18 2 0
|
||||
18 19 1 0
|
||||
19 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
22 23 1 0
|
||||
22 24 1 0
|
||||
24 25 2 0
|
||||
25 26 1 0
|
||||
26 27 2 0
|
||||
27 28 1 0
|
||||
27 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 2 0
|
||||
32 33 1 0
|
||||
32 34 1 0
|
||||
34 35 1 0
|
||||
35 36 1 0
|
||||
36 37 1 0
|
||||
37 38 1 0
|
||||
8 2 1 0
|
||||
37 31 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
5 4 0 0 0 0 0 0 0 0999 V2000
|
||||
1.2990 2.2500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.5981 -0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.8971 0.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 6
|
||||
2 4 1 0
|
||||
4 5 2 0
|
||||
M END000
|
||||
@@ -0,0 +1,82 @@
|
||||
|
||||
RDKit 3D
|
||||
|
||||
38 39 0 0 0 0 0 0 0 0999 V2000
|
||||
-10.3953 2.3305 -0.8809 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.0424 1.2388 -0.0542 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-12.5407 1.4868 -0.0599 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-13.3228 0.2567 0.3380 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-13.0059 -0.8881 -0.6013 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.5350 -1.1042 -0.7658 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-11.1714 -2.4701 -1.2416 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-10.6311 -0.1410 -0.4996 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-9.2025 -0.3404 -0.5957 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-8.5130 -1.2304 0.1249 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-7.0929 -1.4422 0.0435 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.6739 -2.8492 0.2908 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-6.2262 -0.4463 -0.1750 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.8026 -0.5874 -0.2375 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-4.0031 0.4588 -0.4587 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-2.5677 0.4065 -0.5372 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.9763 1.4015 -1.4738 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.8343 -0.4295 0.2087 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.4050 -0.5317 0.2283 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.3797 0.3570 0.8412 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.8060 0.2302 0.8376 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.6593 1.0766 1.4262 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
2.2205 2.2649 2.2089 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.0839 0.8779 1.4119 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
4.7779 0.3376 0.4074 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.1993 0.1777 0.4757 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.9638 -0.3586 -0.4829 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.4151 -0.9030 -1.7553 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.3858 -0.5184 -0.3408 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.1988 0.3376 0.2844 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.6295 0.2088 0.4500 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.3443 1.2399 0.9405 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.7335 2.5226 1.3955 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.8345 1.1987 1.0424 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
13.4357 0.2711 0.0080 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.8077 -1.0986 0.1144 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
11.2917 -1.0724 0.0060 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.7750 -2.2689 0.7795 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 0
|
||||
5 6 1 0
|
||||
6 7 1 0
|
||||
6 8 2 0
|
||||
8 9 1 0
|
||||
9 10 2 0
|
||||
10 11 1 0
|
||||
11 12 1 0
|
||||
11 13 2 0
|
||||
13 14 1 0
|
||||
14 15 2 0
|
||||
15 16 1 0
|
||||
16 17 1 0
|
||||
16 18 2 0
|
||||
18 19 1 0
|
||||
19 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
22 23 1 0
|
||||
22 24 1 0
|
||||
24 25 2 0
|
||||
25 26 1 0
|
||||
26 27 2 0
|
||||
27 28 1 0
|
||||
27 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 2 0
|
||||
32 33 1 0
|
||||
32 34 1 0
|
||||
34 35 1 0
|
||||
35 36 1 0
|
||||
36 37 1 0
|
||||
37 38 1 0
|
||||
8 2 1 0
|
||||
37 31 1 0
|
||||
M END000
|
||||
@@ -0,0 +1,82 @@
|
||||
|
||||
RDKit 2D
|
||||
|
||||
38 39 0 0 0 0 0 0 0 0999 V2000
|
||||
3.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 -1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
-1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.7500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
3.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
5.2500 3.8971 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
6.0000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 5.1962 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
8.2500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
7.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
9.7500 6.4952 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
10.5000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
12.7500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
14.2500 9.0933 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.0000 7.7942 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
15.0000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
16.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
17.2500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
18.7500 11.6913 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.5000 10.3923 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.5000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.7500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.2500 14.2894 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
24.0000 12.9904 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
24.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
23.2500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.7500 16.8875 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
21.0000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
19.5000 15.5885 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
1 2 1 0
|
||||
2 3 1 0
|
||||
3 4 1 0
|
||||
4 5 1 0
|
||||
5 6 1 0
|
||||
6 7 1 0
|
||||
6 8 2 0
|
||||
8 9 1 0
|
||||
9 10 2 0
|
||||
10 11 1 0
|
||||
11 12 1 0
|
||||
11 13 2 0
|
||||
13 14 1 0
|
||||
14 15 2 0
|
||||
15 16 1 0
|
||||
16 17 1 0
|
||||
16 18 2 0
|
||||
18 19 1 0
|
||||
19 20 2 0
|
||||
20 21 1 0
|
||||
21 22 2 0
|
||||
22 23 1 0
|
||||
22 24 1 0
|
||||
24 25 2 0
|
||||
25 26 1 0
|
||||
26 27 2 0
|
||||
27 28 1 0
|
||||
27 29 1 0
|
||||
29 30 2 0
|
||||
30 31 1 0
|
||||
31 32 2 0
|
||||
32 33 1 0
|
||||
32 34 1 0
|
||||
34 35 1 0
|
||||
35 36 1 0
|
||||
36 37 1 0
|
||||
37 38 1 0
|
||||
8 2 1 0
|
||||
37 31 1 0
|
||||
M END000
|
||||
35
Code/Fuzz/mol_deserialization_fuzzer.cc
Normal file
35
Code/Fuzz/mol_deserialization_fuzzer.cc
Normal file
@@ -0,0 +1,35 @@
|
||||
// Copyright 2020 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <fuzzer/FuzzedDataProvider.h>
|
||||
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include <GraphMol/MolPickler.h>
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
FuzzedDataProvider fdp(data, size);
|
||||
|
||||
std::string serializedMolString = fdp.ConsumeRemainingBytesAsString();
|
||||
|
||||
try {
|
||||
RDKit::ROMol result;
|
||||
RDKit::MolPickler::molFromPickle(serializedMolString, result);
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
35
Code/Fuzz/smiles_string_to_mol_fuzzer.cc
Normal file
35
Code/Fuzz/smiles_string_to_mol_fuzzer.cc
Normal file
@@ -0,0 +1,35 @@
|
||||
// Copyright 2020 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <fuzzer/FuzzedDataProvider.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <GraphMol/GraphMol.h>
|
||||
#include <GraphMol/SmilesParse/SmilesParse.h>
|
||||
|
||||
// fuzz_target.cc
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
|
||||
FuzzedDataProvider fdp(Data, Size);
|
||||
|
||||
const bool sanitize = fdp.ConsumeIntegralInRange(0, 1);
|
||||
std::string smiles_string = fdp.ConsumeRemainingBytesAsString();
|
||||
try {
|
||||
std::shared_ptr<RDKit::ROMol> mol3(
|
||||
RDKit::SmilesToMol(smiles_string, 0, sanitize));
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
return 0; // Non-zero return values are reserved for future use.
|
||||
}
|
||||
354
Code/Fuzz/smiles_string_to_mol_fuzzer.dict
Normal file
354
Code/Fuzz/smiles_string_to_mol_fuzzer.dict
Normal file
@@ -0,0 +1,354 @@
|
||||
# Dictionary for the SMILES format
|
||||
# https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system
|
||||
# Entries are taken from the examples on the wikipedia page
|
||||
|
||||
# Bonds
|
||||
"."
|
||||
"-"
|
||||
"="
|
||||
"#"
|
||||
"$"
|
||||
":"
|
||||
"/"
|
||||
"\\"
|
||||
|
||||
# Some molecules
|
||||
"[H]O[H]"
|
||||
"O"
|
||||
"[OH2]"
|
||||
"[NH4+]"
|
||||
"[Ti+4]"
|
||||
"[Ti++++]"
|
||||
"[OH-]"
|
||||
"[OH3+]"
|
||||
"[Co+3]"
|
||||
"[Co+++]"
|
||||
|
||||
# Molecules with special bonds
|
||||
"O=C=O"
|
||||
"C#N"
|
||||
"[Ga-]$[As+]"
|
||||
"[Na+].[Cl-]"
|
||||
|
||||
# Molecules with rings
|
||||
"C1CCCCC1"
|
||||
"O1CCOCC1"
|
||||
"C1CCCC2C1CCCC2"
|
||||
"C1CCCC2CCCCC12"
|
||||
"C1=CC1"
|
||||
"C=1CC1"
|
||||
"C1CC=1"
|
||||
"C=1CC=1"
|
||||
# Not a ring, but can nevertheless be used
|
||||
"C1.C2.C12"
|
||||
|
||||
# Aromatic molecules
|
||||
"C1=CC=CC=C1"
|
||||
"C:1:C:C:C:C:C1"
|
||||
"c1ccccc1"
|
||||
"n1ccccc1"
|
||||
"o1cccc1"
|
||||
"n1c[nH]cc1"
|
||||
"c1ccccc1-c2ccccc2"
|
||||
|
||||
# Branching
|
||||
"CCC(=O)O"
|
||||
"FC(F)F"
|
||||
"COc(c1)cccc1C#N"
|
||||
"COc(cc1)ccc1C#N"
|
||||
"FC(Br)(Cl)F"
|
||||
"BrC(F)(F)Cl"
|
||||
"C(F)(Cl)(F)Br"
|
||||
|
||||
# Stereochemistry
|
||||
"F/C=C/F"
|
||||
"F/C=C\\F"
|
||||
"C/C=C/C=C/C"
|
||||
"CC1CCC/C(C)=C1/C=C/C(C)=C/C=C/C(C)=C/C=C/C=C(C)/C=C/C=C(C)/C=C/C2=C(C)/CCCC2(C)C"
|
||||
"NC(C)C(=O)O"
|
||||
"N[CH](C)C(=O)O"
|
||||
"N[C@@H](C)C(=O)O"
|
||||
"N[C@H](C)C(=O)O"
|
||||
"NC(C(=O)O)C"
|
||||
"N[C@H](C(=O)O)C"
|
||||
"C[C@H](N)C(=O)O"
|
||||
"OC(=O)[C@@H](N)C"
|
||||
"OC(=O)[C@H](C)N"
|
||||
"[C@@H](C)(N)C(=O)O"
|
||||
|
||||
# Isotopes
|
||||
"[14c]1ccccc1"
|
||||
"[2H]C(Cl)(Cl)Cl"
|
||||
"[1H]"
|
||||
"[2H]"
|
||||
"[3H]"
|
||||
|
||||
|
||||
|
||||
# Invalid molecules
|
||||
"C=1CC-1"
|
||||
"CCC=(O)O"
|
||||
"[4H]"
|
||||
"[4.5H]"
|
||||
"[4,5H]"
|
||||
"[0H]"
|
||||
"[-1H]"
|
||||
|
||||
# Other examples
|
||||
"N#N"
|
||||
"[Cu+2].[O-]S(=O)(=O)[O-]"
|
||||
"CN=C=O"
|
||||
"O=Cc1ccc(O)c(OC)c1COCc1cc(C=O)ccc1O"
|
||||
"CC(=O)NCCC1=CNc2c1cc(OC)cc2CC(=O)NCCc1c[nH]c2ccc(OC)cc12"
|
||||
"CCc(c1)ccc2[n+]1ccc3c2[nH]c4c3cccc4CCc1c[n+]2ccc3c4ccccc4[nH]c3c2cc1"
|
||||
"CN1CCC[C@H]1c2cccnc2"
|
||||
"CCC[C@@H](O)CC\\C=C\\C=C\\C#CC#C\\C=C\\COCCC[C@@H](O)CC/C=C/C=C/C#CC#C/C=C/CO"
|
||||
"CC1=C(C(=O)C[C@@H]1OC(=O)[C@@H]2[C@H](C2(C)C)/C=C(\\C)/C(=O)OC)C/C=C\\C=C"
|
||||
"O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)5"
|
||||
"OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H](O)[C@@H](O)1"
|
||||
"OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H]2[C@@H]1c3c(O)c(OC)c(O)cc3C(=O)O2"
|
||||
"CC(=O)OCCC(/C)=C\\C[C@H](C(C)=C)CCC=C"
|
||||
"CC[C@H](O1)CC[C@@]12CCCO2"
|
||||
"CC(C)[C@@]12C[C@@H]1[C@@H](C)C(=O)C2"
|
||||
"OCCc1c(C)[n+](cs1)Cc2cnc(C)nc2N"
|
||||
"CC(C)(O1)C[C@@H](O)[C@@]1(O2)[C@@H](C)[C@@H]3CC=C4[C@]3(C2)C(=O)C[C@H]5[C@H]4CC[C@@H](C6)[C@]5(C)Cc(n7)c6nc(C[C@@]89(C))c7C[C@@H]8CC[C@@H]%10[C@@H]9C[C@@H](O)[C@@]%11(C)C%10=C[C@H](O%12)[C@]%11(O)[C@H](C)[C@]%12(O%13)[C@H](O)C[C@@]%13(C)CO"
|
||||
|
||||
# Elements
|
||||
"H "
|
||||
"He "
|
||||
"Li "
|
||||
"Be "
|
||||
"B "
|
||||
"C "
|
||||
"N "
|
||||
"O "
|
||||
"F "
|
||||
"Ne "
|
||||
"Na "
|
||||
"Mg "
|
||||
"Al "
|
||||
"Si "
|
||||
"P "
|
||||
"S "
|
||||
"Cl "
|
||||
"Ar "
|
||||
"K "
|
||||
"Ca "
|
||||
"Sc "
|
||||
"Ti "
|
||||
"V "
|
||||
"Cr "
|
||||
"Mn "
|
||||
"Fe "
|
||||
"Co "
|
||||
"Ni "
|
||||
"Cu "
|
||||
"Zn "
|
||||
"Ga "
|
||||
"Ge "
|
||||
"As "
|
||||
"Se "
|
||||
"Br "
|
||||
"Kr "
|
||||
"Rb "
|
||||
"Sr "
|
||||
"Y "
|
||||
"Zr "
|
||||
"Nb "
|
||||
"Mo "
|
||||
"Tc "
|
||||
"Ru "
|
||||
"Rh "
|
||||
"Pd "
|
||||
"Ag "
|
||||
"Cd "
|
||||
"In "
|
||||
"Sn "
|
||||
"Sb "
|
||||
"Te "
|
||||
"I "
|
||||
"Xe "
|
||||
"Cs "
|
||||
"Ba "
|
||||
"La "
|
||||
"Ce "
|
||||
"Pr "
|
||||
"Nd "
|
||||
"Pm "
|
||||
"Sm "
|
||||
"Eu "
|
||||
"Gd "
|
||||
"Tb "
|
||||
"Dy "
|
||||
"Ho "
|
||||
"Er "
|
||||
"Tm "
|
||||
"Yb "
|
||||
"Lu "
|
||||
"Hf "
|
||||
"Ta "
|
||||
"W "
|
||||
"Re "
|
||||
"Os "
|
||||
"Ir "
|
||||
"Pt "
|
||||
"Au "
|
||||
"Hg "
|
||||
"Tl "
|
||||
"Pb "
|
||||
"Bi "
|
||||
"Po "
|
||||
"At "
|
||||
"Rn "
|
||||
"Fr "
|
||||
"Ra "
|
||||
"Ac "
|
||||
"Th "
|
||||
"Pa "
|
||||
"U "
|
||||
"Np "
|
||||
"Pu "
|
||||
"Am "
|
||||
"Cm "
|
||||
"Bk "
|
||||
"Cf "
|
||||
"Es "
|
||||
"Fm "
|
||||
"Md "
|
||||
"No "
|
||||
"Lr "
|
||||
"Rf "
|
||||
"Db "
|
||||
"Sg "
|
||||
"Bh "
|
||||
"Hs "
|
||||
"Mt "
|
||||
"Ds "
|
||||
"Rg "
|
||||
"Cn "
|
||||
"Nh "
|
||||
"Fl "
|
||||
"Mc "
|
||||
"Lv "
|
||||
"Ts "
|
||||
"Og "
|
||||
"Uue"
|
||||
"[H] "
|
||||
"[He] "
|
||||
"[Li] "
|
||||
"[Be] "
|
||||
"[B] "
|
||||
"[C] "
|
||||
"[N] "
|
||||
"[O] "
|
||||
"[F] "
|
||||
"[Ne] "
|
||||
"[Na] "
|
||||
"[Mg] "
|
||||
"[Al] "
|
||||
"[Si] "
|
||||
"[P] "
|
||||
"[S] "
|
||||
"[Cl] "
|
||||
"[Ar] "
|
||||
"[K] "
|
||||
"[Ca] "
|
||||
"[Sc] "
|
||||
"[Ti] "
|
||||
"[V] "
|
||||
"[Cr] "
|
||||
"[Mn] "
|
||||
"[Fe] "
|
||||
"[Co] "
|
||||
"[Ni] "
|
||||
"[Cu] "
|
||||
"[Zn] "
|
||||
"[Ga] "
|
||||
"[Ge] "
|
||||
"[As] "
|
||||
"[Se] "
|
||||
"[Br] "
|
||||
"[Kr] "
|
||||
"[Rb] "
|
||||
"[Sr] "
|
||||
"[Y] "
|
||||
"[Zr] "
|
||||
"[Nb] "
|
||||
"[Mo] "
|
||||
"[Tc] "
|
||||
"[Ru] "
|
||||
"[Rh] "
|
||||
"[Pd] "
|
||||
"[Ag] "
|
||||
"[Cd] "
|
||||
"[In] "
|
||||
"[Sn] "
|
||||
"[Sb] "
|
||||
"[Te] "
|
||||
"[I] "
|
||||
"[Xe] "
|
||||
"[Cs] "
|
||||
"[Ba] "
|
||||
"[La] "
|
||||
"[Ce] "
|
||||
"[Pr] "
|
||||
"[Nd] "
|
||||
"[Pm] "
|
||||
"[Sm] "
|
||||
"[Eu] "
|
||||
"[Gd] "
|
||||
"[Tb] "
|
||||
"[Dy] "
|
||||
"[Ho] "
|
||||
"[Er] "
|
||||
"[Tm] "
|
||||
"[Yb] "
|
||||
"[Lu] "
|
||||
"[Hf] "
|
||||
"[Ta] "
|
||||
"[W] "
|
||||
"[Re] "
|
||||
"[Os] "
|
||||
"[Ir] "
|
||||
"[Pt] "
|
||||
"[Au] "
|
||||
"[Hg] "
|
||||
"[Tl] "
|
||||
"[Pb] "
|
||||
"[Bi] "
|
||||
"[Po] "
|
||||
"[At] "
|
||||
"[Rn] "
|
||||
"[Fr] "
|
||||
"[Ra] "
|
||||
"[Ac] "
|
||||
"[Th] "
|
||||
"[Pa] "
|
||||
"[U] "
|
||||
"[Np] "
|
||||
"[Pu] "
|
||||
"[Am] "
|
||||
"[Cm] "
|
||||
"[Bk] "
|
||||
"[Cf] "
|
||||
"[Es] "
|
||||
"[Fm] "
|
||||
"[Md] "
|
||||
"[No] "
|
||||
"[Lr] "
|
||||
"[Rf] "
|
||||
"[Db] "
|
||||
"[Sg] "
|
||||
"[Bh] "
|
||||
"[Hs] "
|
||||
"[Mt] "
|
||||
"[Ds] "
|
||||
"[Rg] "
|
||||
"[Cn] "
|
||||
"[Nh] "
|
||||
"[Fl] "
|
||||
"[Mc] "
|
||||
"[Lv] "
|
||||
"[Ts] "
|
||||
"[Og] "
|
||||
"[Uue]"
|
||||
@@ -0,0 +1 @@
|
||||
C=1CC=10
|
||||
@@ -0,0 +1 @@
|
||||
[Ti+4]0
|
||||
@@ -0,0 +1 @@
|
||||
[OH-]0
|
||||
@@ -0,0 +1 @@
|
||||
CCC=(O)O0
|
||||
@@ -0,0 +1 @@
|
||||
c1ccccc1-c2ccccc20
|
||||
@@ -0,0 +1 @@
|
||||
FC(Br)(Cl)F0
|
||||
@@ -0,0 +1 @@
|
||||
C=1CC-10
|
||||
@@ -0,0 +1 @@
|
||||
C1=CC=CC=C10
|
||||
@@ -0,0 +1 @@
|
||||
CN=C=O0
|
||||
@@ -0,0 +1 @@
|
||||
NC(C)C(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
[0H]0
|
||||
@@ -0,0 +1 @@
|
||||
F/C=C\\F0
|
||||
@@ -0,0 +1 @@
|
||||
OC(=O)[C@H](C)N0
|
||||
@@ -0,0 +1 @@
|
||||
[Cu+2].[O-]S(=O)(=O)[O-]0
|
||||
@@ -0,0 +1 @@
|
||||
[OH2]0
|
||||
@@ -0,0 +1 @@
|
||||
OC(=O)[C@@H](N)C0
|
||||
@@ -0,0 +1 @@
|
||||
CC(=O)OCCC(/C)=C\\C[C@H](C(C)=C)CCC=C0
|
||||
@@ -0,0 +1 @@
|
||||
C[C@H](N)C(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
[4.5H]0
|
||||
@@ -0,0 +1 @@
|
||||
[NH4+]0
|
||||
@@ -0,0 +1 @@
|
||||
C#N0
|
||||
@@ -0,0 +1 @@
|
||||
o1cccc10
|
||||
@@ -0,0 +1 @@
|
||||
C1CCCC2C1CCCC20
|
||||
@@ -0,0 +1 @@
|
||||
C1CC=10
|
||||
@@ -0,0 +1 @@
|
||||
CC(C)(O1)C[C@@H](O)[C@@]1(O2)[C@@H](C)[C@@H]3CC=C4[C@]3(C2)C(=O)C[C@H]5[C@H]4CC[C@@H](C6)[C@]5(C)Cc(n7)c6nc(C[C@@]89(C))c7C[C@@H]8CC[C@@H]%10[C@@H]9C[C@@H](O)[C@@]%11(C)C%10=C[C@H](O%12)[C@]%11(O)[C@H](C)[C@]%12(O%13)[C@H](O)C[C@@]%13(C)CO0
|
||||
@@ -0,0 +1 @@
|
||||
O0
|
||||
@@ -0,0 +1 @@
|
||||
[4H]0
|
||||
@@ -0,0 +1 @@
|
||||
[C@@H](C)(N)C(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
n1ccccc10
|
||||
@@ -0,0 +1 @@
|
||||
O1C=C[C@H]([C@H]1O2)c3c2cc(OC)c4c3OC(=O)C5=C4CCC(=O)50
|
||||
@@ -0,0 +1 @@
|
||||
N#N0
|
||||
@@ -0,0 +1 @@
|
||||
[14c]1ccccc10
|
||||
@@ -0,0 +1 @@
|
||||
CC1=C(C(=O)C[C@@H]1OC(=O)[C@@H]2[C@H](C2(C)C)/C=C(\\C)/C(=O)OC)C/C=C\\C=C0
|
||||
@@ -0,0 +1 @@
|
||||
NC(C(=O)O)C0
|
||||
@@ -0,0 +1 @@
|
||||
[Ga-]$[As+]0
|
||||
@@ -0,0 +1 @@
|
||||
[Ti++++]0
|
||||
@@ -0,0 +1 @@
|
||||
N[C@H](C(=O)O)C0
|
||||
@@ -0,0 +1 @@
|
||||
C1CCCCC10
|
||||
@@ -0,0 +1 @@
|
||||
FC(F)F0
|
||||
@@ -0,0 +1 @@
|
||||
N[C@@H](C)C(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
O=C=O0
|
||||
@@ -0,0 +1 @@
|
||||
OC[C@@H](O1)[C@@H](O)[C@H](O)[C@@H]2[C@@H]1c3c(O)c(OC)c(O)cc3C(=O)O20
|
||||
@@ -0,0 +1 @@
|
||||
CC(=O)NCCC1=CNc2c1cc(OC)cc2CC(=O)NCCc1c[nH]c2ccc(OC)cc120
|
||||
@@ -0,0 +1 @@
|
||||
C/C=C/C=C/C0
|
||||
@@ -0,0 +1 @@
|
||||
CCC(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
F/C=C/F0
|
||||
@@ -0,0 +1 @@
|
||||
N[CH](C)C(=O)O0
|
||||
@@ -0,0 +1 @@
|
||||
[OH3+]0
|
||||
@@ -0,0 +1 @@
|
||||
[3H]0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user