Compare commits
62 Commits
v0.0.6
...
2646d5eaf1
Author | SHA1 | Date | |
---|---|---|---|
2646d5eaf1 | |||
0367ba9856 | |||
9dec45317e | |||
a68ad5dd17 | |||
8e3eacb54f | |||
0184e1d7f6 | |||
c52d50f4f9 | |||
447da11d59 | |||
daa8e02d4f | |||
fd3ea2c2a8 | |||
0b839b9d7e | |||
11a022dcf7 | |||
94da4c72a5 | |||
461e07822a | |||
75499543e7 | |||
81f44d352f | |||
45da8fb996 | |||
4958a4cced | |||
587874841f | |||
648b0b9238 | |||
d3f4afa167 | |||
f762add4d6 | |||
b311e5f1f0 | |||
ff81890921 | |||
0e96177f5c | |||
efb0e52a0a | |||
2df7000090 | |||
5378a06c39 | |||
12c6ed2568 | |||
a2bf839b19 | |||
c065b185ae | |||
639518bed4 | |||
7de983cc15 | |||
1b4b61ddc6 | |||
bff7b85de2 | |||
9108ee209a | |||
f8bf1c6eb4 | |||
4da2a01614 | |||
bb0e654040 | |||
cce7d29410 | |||
13f8d3fa8a | |||
02866a8cae | |||
fa86d3e707 | |||
7d1d1d7b2a | |||
789ecc29b3 | |||
08f2998a85 | |||
c882d7663d | |||
bfea4384ba | |||
6520e3d734 | |||
23ace8aac5 | |||
62e35de320 | |||
22e4ab01a1 | |||
b3aeed0caa | |||
5f3833e965 | |||
8b1cd9c052 | |||
bb9bc3d7b5 | |||
89b3354a80 | |||
488c723726 | |||
76d0785b33 | |||
add0af11ad | |||
2c0adf4a8b | |||
e8ac78cce6 |
105
Bench.cpp
105
Bench.cpp
@@ -258,4 +258,107 @@ void benchConflictSet() {
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) { benchConflictSet(); }
|
||||
constexpr int kKeyLenForWorstCase = 50;
|
||||
|
||||
ConflictSet worstCaseConflictSetForRadixRangeRead(int cardinality) {
|
||||
ConflictSet cs{0};
|
||||
|
||||
for (int i = 0; i < kKeyLenForWorstCase; ++i) {
|
||||
for (int j = 0; j < cardinality; ++j) {
|
||||
auto b = std::vector<uint8_t>(i, 0);
|
||||
b.push_back(j);
|
||||
auto e = std::vector<uint8_t>(i, 255);
|
||||
e.push_back(255 - j);
|
||||
weaselab::ConflictSet::WriteRange w[] = {{
|
||||
{b.data(), int(b.size())},
|
||||
{nullptr, 0},
|
||||
},
|
||||
{
|
||||
{e.data(), int(e.size())},
|
||||
{nullptr, 0},
|
||||
}};
|
||||
std::sort(std::begin(w), std::end(w),
|
||||
[](const auto &lhs, const auto &rhs) {
|
||||
int cl = std::min(lhs.begin.len, rhs.begin.len);
|
||||
if (cl > 0) {
|
||||
int c = memcmp(lhs.begin.p, rhs.begin.p, cl);
|
||||
if (c != 0) {
|
||||
return c < 0;
|
||||
}
|
||||
}
|
||||
return lhs.begin.len < rhs.begin.len;
|
||||
});
|
||||
cs.addWrites(w, sizeof(w) / sizeof(w[0]), 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Defeat short-circuiting on the left
|
||||
{
|
||||
auto k = std::vector<uint8_t>(kKeyLenForWorstCase, 0);
|
||||
weaselab::ConflictSet::WriteRange w[] = {
|
||||
{
|
||||
{k.data(), int(k.size())},
|
||||
{nullptr, 0},
|
||||
},
|
||||
};
|
||||
cs.addWrites(w, sizeof(w) / sizeof(w[0]), 1);
|
||||
}
|
||||
|
||||
// Defeat short-circuiting on the right
|
||||
{
|
||||
auto k = std::vector<uint8_t>(kKeyLenForWorstCase, 255);
|
||||
weaselab::ConflictSet::WriteRange w[] = {
|
||||
{
|
||||
{k.data(), int(k.size())},
|
||||
{nullptr, 0},
|
||||
},
|
||||
};
|
||||
cs.addWrites(w, sizeof(w) / sizeof(w[0]), 1);
|
||||
}
|
||||
|
||||
return cs;
|
||||
}
|
||||
|
||||
void benchWorstCaseForRadixRangeRead() {
|
||||
ankerl::nanobench::Bench bench;
|
||||
|
||||
std::unique_ptr<ConflictSet> cs[256];
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
cs[i] =
|
||||
std::make_unique<ConflictSet>(worstCaseConflictSetForRadixRangeRead(i));
|
||||
}
|
||||
|
||||
auto begin = std::vector<uint8_t>(kKeyLenForWorstCase - 1, 0);
|
||||
begin.push_back(1);
|
||||
auto end = std::vector<uint8_t>(kKeyLenForWorstCase - 1, 255);
|
||||
end.push_back(254);
|
||||
|
||||
weaselab::ConflictSet::Result result;
|
||||
weaselab::ConflictSet::ReadRange r{
|
||||
{begin.data(), int(begin.size())}, {end.data(), int(end.size())}, 0};
|
||||
|
||||
bench.run("worst case for radix tree", [&]() {
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
result = weaselab::ConflictSet::TooOld;
|
||||
cs[i]->check(&r, &result, 1);
|
||||
if (result != weaselab::ConflictSet::Commit) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// for (int i = 0; i < 256; ++i) {
|
||||
// bench.run("worst case for radix tree, span " + std::to_string(i), [&]() {
|
||||
// result = weaselab::ConflictSet::TooOld;
|
||||
// cs[i]->check(&r, &result, 1);
|
||||
// if (result != weaselab::ConflictSet::Commit) {
|
||||
// abort();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
benchConflictSet();
|
||||
benchWorstCaseForRadixRangeRead();
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.18)
|
||||
project(
|
||||
conflict-set
|
||||
VERSION 0.0.6
|
||||
VERSION 0.0.7
|
||||
DESCRIPTION
|
||||
"A data structure for optimistic concurrency control on ranges of bitwise-lexicographically-ordered keys."
|
||||
HOMEPAGE_URL "https://git.weaselab.dev/weaselab/conflict-set"
|
||||
@@ -59,6 +59,10 @@ cmake_pop_check_state()
|
||||
|
||||
option(USE_SIMD_FALLBACK
|
||||
"Use fallback implementations of functions that use SIMD" OFF)
|
||||
option(
|
||||
USE_32_BIT_VERSIONS
|
||||
"Store 32 bit versions internally, and rely on versions never being different by more than 2e9"
|
||||
OFF)
|
||||
|
||||
# This is encouraged according to
|
||||
# https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq
|
||||
@@ -103,6 +107,10 @@ if(NOT USE_SIMD_FALLBACK)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(USE_32_BIT_VERSIONS)
|
||||
add_compile_definitions(INTERNAL_VERSION_32_BIT=1)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
|
||||
|
||||
add_library(${PROJECT_NAME}-object OBJECT ConflictSet.cpp)
|
||||
|
1304
ConflictSet.cpp
1304
ConflictSet.cpp
File diff suppressed because it is too large
Load Diff
@@ -578,8 +578,8 @@ template <class ConflictSetImpl> struct TestDriver {
|
||||
explicit TestDriver(const uint8_t *data, size_t size)
|
||||
: arbitrary({data, size}) {}
|
||||
|
||||
int64_t writeVersion = 100;
|
||||
int64_t oldestVersion = 0;
|
||||
int64_t oldestVersion = arbitrary.bounded(2) ? 0 : 0xfffffff0;
|
||||
int64_t writeVersion = oldestVersion + 100;
|
||||
ConflictSetImpl cs{oldestVersion};
|
||||
ReferenceImpl refImpl{oldestVersion};
|
||||
|
||||
|
13
Jenkinsfile
vendored
13
Jenkinsfile
vendored
@@ -59,6 +59,17 @@ pipeline {
|
||||
CleanBuildAndTest("-DUSE_SIMD_FALLBACK=ON")
|
||||
}
|
||||
}
|
||||
stage('32-bit versions') {
|
||||
agent {
|
||||
dockerfile {
|
||||
args '-v /home/jenkins/ccache:/ccache'
|
||||
reuseNode true
|
||||
}
|
||||
}
|
||||
steps {
|
||||
CleanBuildAndTest("-DUSE_32_BIT_VERSIONS=ON")
|
||||
}
|
||||
}
|
||||
stage('Release [gcc]') {
|
||||
agent {
|
||||
dockerfile {
|
||||
@@ -110,7 +121,7 @@ pipeline {
|
||||
sh '''
|
||||
gcovr -f ConflictSet.cpp --cobertura > build/coverage.xml
|
||||
'''
|
||||
cobertura autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: 'build/coverage.xml', conditionalCoverageTargets: '70, 0, 0', failUnhealthy: false, failUnstable: false, lineCoverageTargets: '80, 0, 0', maxNumberOfBuilds: 0, methodCoverageTargets: '80, 0, 0', onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false
|
||||
recordCoverage qualityGates: [[criticality: 'NOTE', metric: 'MODULE']], tools: [[parser: 'COBERTURA', pattern: 'build/coverage.xml']]
|
||||
sh '''
|
||||
gcovr -f ConflictSet.cpp --fail-under-line 100 > /dev/null
|
||||
'''
|
||||
|
38
README.md
38
README.md
@@ -58,27 +58,29 @@ Performance counters:
|
||||
|
||||
## Skip list
|
||||
|
||||
| ns/op | op/s | err% | total | benchmark |
|
||||
| -----: | -----------: | ---: | ----: | :---------------------------------- |
|
||||
| 246.99 | 4,048,700.59 | 0.2% | 0.01 | `point reads` |
|
||||
| 260.16 | 3,843,784.65 | 0.1% | 0.01 | `prefix reads` |
|
||||
| 493.35 | 2,026,953.19 | 0.1% | 0.01 | `range reads` |
|
||||
| 462.05 | 2,164,289.23 | 0.6% | 0.01 | `point writes` |
|
||||
| 448.19 | 2,231,205.25 | 0.9% | 0.01 | `prefix writes` |
|
||||
| 255.83 | 3,908,845.72 | 1.5% | 0.02 | `range writes` |
|
||||
| 582.63 | 1,716,349.02 | 1.3% | 0.01 | `monotonic increasing point writes` |
|
||||
| ns/op | op/s | err% | total | benchmark
|
||||
|--------------------:|--------------------:|--------:|----------:|:----------
|
||||
| 256.89 | 3,892,784.92 | 0.3% | 0.01 | `point reads`
|
||||
| 272.90 | 3,664,395.04 | 0.2% | 0.01 | `prefix reads`
|
||||
| 507.22 | 1,971,549.50 | 0.7% | 0.01 | `range reads`
|
||||
| 452.66 | 2,209,181.91 | 0.5% | 0.01 | `point writes`
|
||||
| 438.09 | 2,282,619.96 | 0.4% | 0.01 | `prefix writes`
|
||||
| 253.33 | 3,947,420.36 | 2.5% | 0.02 | `range writes`
|
||||
| 574.07 | 1,741,936.71 | 0.3% | 0.01 | `monotonic increasing point writes`
|
||||
| 151,562.50 | 6,597.94 | 1.5% | 0.01 | `worst case for radix tree`
|
||||
|
||||
## Radix tree (this implementation)
|
||||
|
||||
| ns/op | op/s | err% | total | benchmark |
|
||||
| -----: | ------------: | ---: | ----: | :---------------------------------- |
|
||||
| 19.42 | 51,483,206.67 | 0.3% | 0.01 | `point reads` |
|
||||
| 58.43 | 17,115,612.57 | 0.1% | 0.01 | `prefix reads` |
|
||||
| 216.09 | 4,627,766.60 | 0.2% | 0.01 | `range reads` |
|
||||
| 28.35 | 35,267,567.72 | 0.2% | 0.01 | `point writes` |
|
||||
| 43.43 | 23,026,226.17 | 0.2% | 0.01 | `prefix writes` |
|
||||
| 50.00 | 20,000,000.00 | 0.0% | 0.01 | `range writes` |
|
||||
| 92.38 | 10,824,863.69 | 4.1% | 0.01 | `monotonic increasing point writes` |
|
||||
| ns/op | op/s | err% | total | benchmark
|
||||
|--------------------:|--------------------:|--------:|----------:|:----------
|
||||
| 19.83 | 50,420,955.28 | 0.1% | 0.01 | `point reads`
|
||||
| 55.95 | 17,872,542.40 | 0.5% | 0.01 | `prefix reads`
|
||||
| 88.28 | 11,327,709.50 | 0.4% | 0.01 | `range reads`
|
||||
| 29.15 | 34,309,531.64 | 0.5% | 0.01 | `point writes`
|
||||
| 42.36 | 23,607,424.27 | 1.1% | 0.01 | `prefix writes`
|
||||
| 50.00 | 20,000,000.00 | 0.0% | 0.01 | `range writes`
|
||||
| 93.52 | 10,692,413.79 | 3.3% | 0.01 | `monotonic increasing point writes`
|
||||
| 2,388,417.00 | 418.69 | 0.4% | 0.03 | `worst case for radix tree`
|
||||
|
||||
# "Real data" test
|
||||
|
||||
|
10
SkipList.cpp
10
SkipList.cpp
@@ -577,7 +577,8 @@ struct SkipListConflictSet {};
|
||||
|
||||
struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
Impl(int64_t oldestVersion)
|
||||
: oldestVersion(oldestVersion), skipList(oldestVersion) {}
|
||||
: oldestVersion(oldestVersion), newestVersion(oldestVersion),
|
||||
skipList(oldestVersion) {}
|
||||
void check(const ConflictSet::ReadRange *reads, ConflictSet::Result *results,
|
||||
int count) const {
|
||||
Arena arena;
|
||||
@@ -592,7 +593,8 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
}
|
||||
skipList.detectConflicts(ranges, count, results);
|
||||
for (int i = 0; i < count; ++i) {
|
||||
if (reads[i].readVersion < oldestVersion) {
|
||||
if (reads[i].readVersion < oldestVersion ||
|
||||
reads[i].readVersion < newestVersion - 2e9) {
|
||||
results[i] = TooOld;
|
||||
}
|
||||
}
|
||||
@@ -600,6 +602,8 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
|
||||
void addWrites(const ConflictSet::WriteRange *writes, int count,
|
||||
int64_t writeVersion) {
|
||||
assert(writeVersion >= newestVersion);
|
||||
newestVersion = writeVersion;
|
||||
Arena arena;
|
||||
const int stringCount = count * 2;
|
||||
|
||||
@@ -630,6 +634,7 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
}
|
||||
|
||||
void setOldestVersion(int64_t oldestVersion) {
|
||||
assert(oldestVersion >= this->oldestVersion);
|
||||
this->oldestVersion = oldestVersion;
|
||||
SkipList::Finger finger;
|
||||
int temp;
|
||||
@@ -648,6 +653,7 @@ private:
|
||||
Arena removalArena;
|
||||
std::span<const uint8_t> removalKey;
|
||||
int64_t oldestVersion;
|
||||
int64_t newestVersion;
|
||||
SkipList skipList;
|
||||
};
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
___stack_chk_fail
|
||||
___stack_chk_guard
|
||||
__tlv_bootstrap
|
||||
_abort
|
||||
_bzero
|
||||
|
@@ -115,7 +115,9 @@ class ConflictSet:
|
||||
|
||||
def check(self, *reads: ReadRange) -> list[Result]:
|
||||
r = (ctypes.c_int * len(reads))()
|
||||
self._lib.ConflictSet_check(self.p, *reads, r, 1)
|
||||
self._lib.ConflictSet_check(
|
||||
self.p, (ReadRange * len(reads))(*reads), r, len(reads)
|
||||
)
|
||||
return [Result(x) for x in r]
|
||||
|
||||
def setOldestVersion(self, version: int) -> None:
|
||||
|
Binary file not shown.
BIN
corpus/0020a3ab4a0de649bf7b8966c9065405b64229e8
Normal file
BIN
corpus/0020a3ab4a0de649bf7b8966c9065405b64229e8
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/0133cf3a9984eb4e45fd166cdcc136619fcfda32
Normal file
BIN
corpus/0133cf3a9984eb4e45fd166cdcc136619fcfda32
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/0185228b4b3455b1a542009007ceb974db6d98af
Normal file
BIN
corpus/0185228b4b3455b1a542009007ceb974db6d98af
Normal file
Binary file not shown.
BIN
corpus/01fbab54a0d97fb88b0ed4863892e56db715656f
Normal file
BIN
corpus/01fbab54a0d97fb88b0ed4863892e56db715656f
Normal file
Binary file not shown.
BIN
corpus/0208b56e9abfd4f37d871dc89e4801a2eb90fae5
Normal file
BIN
corpus/0208b56e9abfd4f37d871dc89e4801a2eb90fae5
Normal file
Binary file not shown.
BIN
corpus/020f1d7a4ef05f035b7edf9e2bdbf99c4ba038b8
Normal file
BIN
corpus/020f1d7a4ef05f035b7edf9e2bdbf99c4ba038b8
Normal file
Binary file not shown.
BIN
corpus/0242543101d75ef9e557d1c7eeebe639a10620b9
Normal file
BIN
corpus/0242543101d75ef9e557d1c7eeebe639a10620b9
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/02abc409ed03c67e3da635f9db83cbb6b9bd7f3c
Normal file
BIN
corpus/02abc409ed03c67e3da635f9db83cbb6b9bd7f3c
Normal file
Binary file not shown.
BIN
corpus/02c7e951a4ab7f63e1ec1003f4865b93c8f90721
Normal file
BIN
corpus/02c7e951a4ab7f63e1ec1003f4865b93c8f90721
Normal file
Binary file not shown.
BIN
corpus/03452330deff47b3363f1019379c65b21908b43f
Normal file
BIN
corpus/03452330deff47b3363f1019379c65b21908b43f
Normal file
Binary file not shown.
BIN
corpus/03b588ed7a235250157891230af6de1e04bf006d
Normal file
BIN
corpus/03b588ed7a235250157891230af6de1e04bf006d
Normal file
Binary file not shown.
BIN
corpus/042799793e7c063b20e0e55bbcc96f01f91bdd04
Normal file
BIN
corpus/042799793e7c063b20e0e55bbcc96f01f91bdd04
Normal file
Binary file not shown.
BIN
corpus/04afb73ee2885691dd2dd62d5b04704b49a90a54
Normal file
BIN
corpus/04afb73ee2885691dd2dd62d5b04704b49a90a54
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/06b483dbba432b8972f9fc89222a41a27f3b8e96
Normal file
BIN
corpus/06b483dbba432b8972f9fc89222a41a27f3b8e96
Normal file
Binary file not shown.
BIN
corpus/07b6e1f5e080bbcb96f3556ee0162e6289e3c9bc
Normal file
BIN
corpus/07b6e1f5e080bbcb96f3556ee0162e6289e3c9bc
Normal file
Binary file not shown.
BIN
corpus/07b7709b720312478bc91ebc568e035644b006f6
Normal file
BIN
corpus/07b7709b720312478bc91ebc568e035644b006f6
Normal file
Binary file not shown.
BIN
corpus/08732f5857874285c5bceeb686b33687408ee4af
Normal file
BIN
corpus/08732f5857874285c5bceeb686b33687408ee4af
Normal file
Binary file not shown.
BIN
corpus/093362f8fc387e49a1b0f31a0fe5e82416aeed5b
Normal file
BIN
corpus/093362f8fc387e49a1b0f31a0fe5e82416aeed5b
Normal file
Binary file not shown.
BIN
corpus/09e2d3949b7c2c68b582a58b69a1fe719fc93edf
Normal file
BIN
corpus/09e2d3949b7c2c68b582a58b69a1fe719fc93edf
Normal file
Binary file not shown.
BIN
corpus/0a0f24698c6b6b548e01b69142e4fe2d248890ba
Normal file
BIN
corpus/0a0f24698c6b6b548e01b69142e4fe2d248890ba
Normal file
Binary file not shown.
BIN
corpus/0b12266d8a7e1a094fd38f2a98bc578d09c418ab
Normal file
BIN
corpus/0b12266d8a7e1a094fd38f2a98bc578d09c418ab
Normal file
Binary file not shown.
BIN
corpus/0c941ffcc53038e5db60a1cad7a3ad77c5d88fb9
Normal file
BIN
corpus/0c941ffcc53038e5db60a1cad7a3ad77c5d88fb9
Normal file
Binary file not shown.
BIN
corpus/0d0078bad6b47befd6f8723fcc4babe36b453a4b
Normal file
BIN
corpus/0d0078bad6b47befd6f8723fcc4babe36b453a4b
Normal file
Binary file not shown.
BIN
corpus/0d7e8c09fd026b7cceb559fe5344183c89a550bc
Normal file
BIN
corpus/0d7e8c09fd026b7cceb559fe5344183c89a550bc
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/0f4ecf072e9ae7a01ff27513e770363b0ba926ce
Normal file
BIN
corpus/0f4ecf072e9ae7a01ff27513e770363b0ba926ce
Normal file
Binary file not shown.
BIN
corpus/0fa39cd3837e6f0d85a67595933336b68f67248a
Normal file
BIN
corpus/0fa39cd3837e6f0d85a67595933336b68f67248a
Normal file
Binary file not shown.
BIN
corpus/0fc04cdbefc601dee20fbf5039669187497ab61e
Normal file
BIN
corpus/0fc04cdbefc601dee20fbf5039669187497ab61e
Normal file
Binary file not shown.
BIN
corpus/10e5d27ffe9630f39a1d4bbf81dfe0186734eebd
Normal file
BIN
corpus/10e5d27ffe9630f39a1d4bbf81dfe0186734eebd
Normal file
Binary file not shown.
BIN
corpus/11516b06b08b92cd3c5eb268fca2c0cb90e825da
Normal file
BIN
corpus/11516b06b08b92cd3c5eb268fca2c0cb90e825da
Normal file
Binary file not shown.
BIN
corpus/1171677231c97f3e153065a460c75176a4dc1efe
Normal file
BIN
corpus/1171677231c97f3e153065a460c75176a4dc1efe
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/134de1b68774dbf7169eebc2b1256adf1f4ddf37
Normal file
BIN
corpus/134de1b68774dbf7169eebc2b1256adf1f4ddf37
Normal file
Binary file not shown.
BIN
corpus/1382d742e726802ad6507a0254ea296ed75b0150
Normal file
BIN
corpus/1382d742e726802ad6507a0254ea296ed75b0150
Normal file
Binary file not shown.
BIN
corpus/13a6bd032172db55ad35c19227c0a1e492dc7ed3
Normal file
BIN
corpus/13a6bd032172db55ad35c19227c0a1e492dc7ed3
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/14b2daeea15b6e7cfe4f28f695ace1cffd8bb6d7
Normal file
BIN
corpus/14b2daeea15b6e7cfe4f28f695ace1cffd8bb6d7
Normal file
Binary file not shown.
BIN
corpus/15023dd585a975308d45533e2876d8ca60e48162
Normal file
BIN
corpus/15023dd585a975308d45533e2876d8ca60e48162
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/15efe922dec96e9dc6860a3b5ce45d44a100fef6
Normal file
BIN
corpus/15efe922dec96e9dc6860a3b5ce45d44a100fef6
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/16fd756ed15f1437f143d7b3e8f100be25281649
Normal file
BIN
corpus/16fd756ed15f1437f143d7b3e8f100be25281649
Normal file
Binary file not shown.
BIN
corpus/1796920e2eaaef618eb2100d6db5ac980b9b20a9
Normal file
BIN
corpus/1796920e2eaaef618eb2100d6db5ac980b9b20a9
Normal file
Binary file not shown.
BIN
corpus/17d924f6a27697c66a3fc7ac002b58f78f3e992a
Normal file
BIN
corpus/17d924f6a27697c66a3fc7ac002b58f78f3e992a
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/1a314b8298de08b8988d0bb8b6b1935377c4419f
Normal file
BIN
corpus/1a314b8298de08b8988d0bb8b6b1935377c4419f
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/1aa0ac37b1c3e50dc0202951722ce494d0d069c1
Normal file
BIN
corpus/1aa0ac37b1c3e50dc0202951722ce494d0d069c1
Normal file
Binary file not shown.
BIN
corpus/1afad57db40839ad3aa9b9414fc4b3b71886edc8
Normal file
BIN
corpus/1afad57db40839ad3aa9b9414fc4b3b71886edc8
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/1b8be6892fe5c22d64283aab813b5bcaf8ad9e75
Normal file
BIN
corpus/1b8be6892fe5c22d64283aab813b5bcaf8ad9e75
Normal file
Binary file not shown.
BIN
corpus/1ba958676d3e09b4cb15e8792bd72b7707a0f9c2
Normal file
BIN
corpus/1ba958676d3e09b4cb15e8792bd72b7707a0f9c2
Normal file
Binary file not shown.
BIN
corpus/1bbe78e37c9747b7ccd095f78a4419f52e8bc1bf
Normal file
BIN
corpus/1bbe78e37c9747b7ccd095f78a4419f52e8bc1bf
Normal file
Binary file not shown.
BIN
corpus/1c1614a264e5453ce36fd9f6d42a0ae071c08846
Normal file
BIN
corpus/1c1614a264e5453ce36fd9f6d42a0ae071c08846
Normal file
Binary file not shown.
BIN
corpus/1cb0626d22445fb81a0d80d4c54cbe3b18f72c4f
Normal file
BIN
corpus/1cb0626d22445fb81a0d80d4c54cbe3b18f72c4f
Normal file
Binary file not shown.
BIN
corpus/1d3b21afa6d9f9cc613a4555501d6422f74b23d5
Normal file
BIN
corpus/1d3b21afa6d9f9cc613a4555501d6422f74b23d5
Normal file
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 1.6 KiB |
BIN
corpus/1dc2879a3704ee419af89db050328c4a07631ec8
Normal file
BIN
corpus/1dc2879a3704ee419af89db050328c4a07631ec8
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/1dfeee6660b5b0016a6e57135ad11d0e1c16857b
Normal file
BIN
corpus/1dfeee6660b5b0016a6e57135ad11d0e1c16857b
Normal file
Binary file not shown.
Binary file not shown.
BIN
corpus/1edd234c122a4138ceec329ee719429aaaeb7997
Normal file
BIN
corpus/1edd234c122a4138ceec329ee719429aaaeb7997
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/20abddb7bc6dbd7fad96b6051841f4d0164ecade
Normal file
BIN
corpus/20abddb7bc6dbd7fad96b6051841f4d0164ecade
Normal file
Binary file not shown.
BIN
corpus/20b85f850510b18de432a5f2d6ea361e943ea073
Normal file
BIN
corpus/20b85f850510b18de432a5f2d6ea361e943ea073
Normal file
Binary file not shown.
BIN
corpus/20cfdb6e4aaf3ae7bfdbc53af64175b7e1da2647
Normal file
BIN
corpus/20cfdb6e4aaf3ae7bfdbc53af64175b7e1da2647
Normal file
Binary file not shown.
BIN
corpus/210c204006f12e92ed7d9f95f46484423bf691b1
Normal file
BIN
corpus/210c204006f12e92ed7d9f95f46484423bf691b1
Normal file
Binary file not shown.
BIN
corpus/2119a97d287cf47033ce519e15a2e8d2af7f2395
Normal file
BIN
corpus/2119a97d287cf47033ce519e15a2e8d2af7f2395
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/228c25fa18d6c8f173ae3dd2016a6f285ef1a721
Normal file
BIN
corpus/228c25fa18d6c8f173ae3dd2016a6f285ef1a721
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
corpus/23904e25f22dee307d5a0aca79e704bf841c12c5
Normal file
BIN
corpus/23904e25f22dee307d5a0aca79e704bf841c12c5
Normal file
Binary file not shown.
BIN
corpus/2391885c56a4b29e39bf1cb607edaa355aa163a5
Normal file
BIN
corpus/2391885c56a4b29e39bf1cb607edaa355aa163a5
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user