mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-10-09 07:42:21 +03:00
Merge branch develop into master
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -30,6 +30,8 @@ bin
|
||||
|
||||
# sigs dir is handled externally
|
||||
signatures
|
||||
# but not the regression tests
|
||||
!tools/hscollider/test_cases/signatures
|
||||
|
||||
# ignore pcre symlink if it exists
|
||||
pcre
|
||||
|
12
CHANGELOG.md
12
CHANGELOG.md
@@ -2,6 +2,18 @@
|
||||
|
||||
This is a list of notable changes to Hyperscan, in reverse chronological order.
|
||||
|
||||
## [4.7.0] 2018-01-24
|
||||
- Introduced hscollider pattern testing tool, for validating Hyperscan match
|
||||
behaviour against PCRE.
|
||||
- Introduced hscheck pattern compilation tool.
|
||||
- Introduced hsdump development tool for producing information about Hyperscan
|
||||
pattern compilation.
|
||||
- New API feature: extended approximate matching support for Hamming distance.
|
||||
- Bugfix for issue #69: Force C++ linkage in Xcode.
|
||||
- Bugfix for issue #73: More documentation for `hs_close_stream()`.
|
||||
- Bugfix for issue #78: Fix for fat runtime initialisation when used as a
|
||||
shared library.
|
||||
|
||||
## [4.6.0] 2017-09-22
|
||||
- New API feature: stream state compression. This allows the user to compress
|
||||
and restore state for streams to reduce memory usage.
|
||||
|
@@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 2.8.11)
|
||||
project (hyperscan C CXX)
|
||||
|
||||
set (HS_MAJOR_VERSION 4)
|
||||
set (HS_MINOR_VERSION 6)
|
||||
set (HS_MINOR_VERSION 7)
|
||||
set (HS_PATCH_VERSION 0)
|
||||
set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION})
|
||||
|
||||
@@ -30,7 +30,7 @@ else()
|
||||
message(STATUS "Build type ${CMAKE_BUILD_TYPE}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_BUILD_TYPE MATCHES RELEASE|RELWITHDEBINFO)
|
||||
if(CMAKE_BUILD_TYPE MATCHES RELEASE|RELWITHDEBINFO|MINSIZEREL)
|
||||
set(RELEASE_BUILD TRUE)
|
||||
else()
|
||||
set(RELEASE_BUILD FALSE)
|
||||
@@ -218,8 +218,13 @@ else()
|
||||
endif()
|
||||
|
||||
if(OPTIMISE)
|
||||
set(OPT_C_FLAG "-O3")
|
||||
set(OPT_CXX_FLAG "-O2")
|
||||
if (NOT CMAKE_BUILD_TYPE MATCHES MINSIZEREL)
|
||||
set(OPT_C_FLAG "-O3")
|
||||
set(OPT_CXX_FLAG "-O2")
|
||||
else ()
|
||||
set(OPT_C_FLAG "-Os")
|
||||
set(OPT_CXX_FLAG "-Os")
|
||||
endif ()
|
||||
else()
|
||||
set(OPT_C_FLAG "-O0")
|
||||
set(OPT_CXX_FLAG "-O0")
|
||||
@@ -423,10 +428,10 @@ endif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||
|
||||
if(NOT WIN32)
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -diag-error 10006 -diag-disable 68 -diag-disable 177 -diag-disable 186 -diag-disable 2304 -diag-disable 2305 -diag-disable 2338 -diag-disable 1418 -diag-disable=remark")
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -diag-error 10006 -diag-disable 68 -diag-disable 177 -diag-disable 186 -diag-disable 2304 -diag-disable 2305 -diag-disable 2338 -diag-disable 1418 -diag-disable 279 -diag-disable=remark")
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-error 10006 -diag-disable 68 -diag-disable 177 -diag-disable 186 -diag-disable 2304 -diag-disable 2305 -diag-disable 2338 -diag-disable 1418 -diag-disable 1170 -diag-disable 3373 -diag-disable=remark")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-error 10006 -diag-disable 68 -diag-disable 177 -diag-disable 186 -diag-disable 2304 -diag-disable 2305 -diag-disable 2338 -diag-disable 1418 -diag-disable 1170 -diag-disable 3373 -diag-disable 279 -diag-disable=remark")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -1271,25 +1276,42 @@ if (NOT BUILD_SHARED_LIBS)
|
||||
endif()
|
||||
|
||||
if (BUILD_STATIC_AND_SHARED OR BUILD_SHARED_LIBS)
|
||||
if (NOT FAT_RUNTIME)
|
||||
add_library(hs_shared SHARED src/hs_version.c src/hs_valid_platform.c
|
||||
$<TARGET_OBJECTS:hs_compile_shared> $<TARGET_OBJECTS:hs_exec_shared>)
|
||||
else()
|
||||
add_library(hs_shared SHARED src/hs_version.c src/hs_valid_platform.c
|
||||
$<TARGET_OBJECTS:hs_compile_shared> $<TARGET_OBJECTS:hs_exec_common_shared>
|
||||
${RUNTIME_SHLIBS})
|
||||
set(hs_shared_SRCS
|
||||
src/hs_version.c
|
||||
src/hs_valid_platform.c
|
||||
$<TARGET_OBJECTS:hs_compile_shared>)
|
||||
|
||||
if (XCODE)
|
||||
# force this lib to use C++ linkage
|
||||
add_custom_command(OUTPUT empty.cxx
|
||||
COMMAND ${CMAKE_COMMAND} -E touch empty.cxx)
|
||||
set (hs_shared_SRCS ${hs_shared_SRCS} empty.cxx)
|
||||
endif (XCODE)
|
||||
|
||||
if (NOT FAT_RUNTIME)
|
||||
set(hs_shared_SRCS
|
||||
${hs_shared_SRCS}
|
||||
$<TARGET_OBJECTS:hs_exec_shared>)
|
||||
else ()
|
||||
set(hs_shared_SRCS
|
||||
${hs_shared_SRCS}
|
||||
$<TARGET_OBJECTS:hs_exec_common_shared>
|
||||
${RUNTIME_SHLIBS})
|
||||
endif ()
|
||||
|
||||
add_library(hs_shared SHARED ${hs_shared_SRCS})
|
||||
|
||||
endif()
|
||||
add_dependencies(hs_shared ragel_Parser)
|
||||
set_target_properties(hs_shared PROPERTIES
|
||||
OUTPUT_NAME hs
|
||||
VERSION ${LIB_VERSION}
|
||||
SOVERSION ${LIB_SOVERSION}
|
||||
MACOSX_RPATH ON)
|
||||
install(TARGETS hs_shared
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
|
||||
install(TARGETS hs_shared
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||
endif()
|
||||
|
||||
# used by tools and other targets
|
||||
|
64
cmake/pcre.cmake
Normal file
64
cmake/pcre.cmake
Normal file
@@ -0,0 +1,64 @@
|
||||
# first look in pcre-$version or pcre subdirs
|
||||
if (PCRE_SOURCE)
|
||||
# either provided on cmdline or we've seen it already
|
||||
set (PCRE_BUILD_SOURCE TRUE)
|
||||
elseif (EXISTS ${PROJECT_SOURCE_DIR}/pcre-${PCRE_REQUIRED_VERSION})
|
||||
set (PCRE_SOURCE ${PROJECT_SOURCE_DIR}/pcre-${PCRE_REQUIRED_VERSION})
|
||||
set (PCRE_BUILD_SOURCE TRUE)
|
||||
elseif (EXISTS ${PROJECT_SOURCE_DIR}/pcre)
|
||||
set (PCRE_SOURCE ${PROJECT_SOURCE_DIR}/pcre)
|
||||
set (PCRE_BUILD_SOURCE TRUE)
|
||||
endif()
|
||||
|
||||
if (PCRE_BUILD_SOURCE)
|
||||
if (NOT IS_ABSOLUTE ${PCRE_SOURCE})
|
||||
set(PCRE_SOURCE "${CMAKE_BINARY_DIR}/${PCRE_SOURCE}")
|
||||
endif ()
|
||||
set (saved_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
|
||||
set (CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${PCRE_SOURCE}")
|
||||
|
||||
if (PCRE_CHECKED)
|
||||
set(PCRE_INCLUDE_DIRS ${PCRE_SOURCE} ${PROJECT_BINARY_DIR}/pcre)
|
||||
set(PCRE_LDFLAGS -L"${LIBDIR}" -lpcre)
|
||||
|
||||
# already processed this file and set up pcre building
|
||||
return()
|
||||
endif ()
|
||||
|
||||
# first, check version number
|
||||
CHECK_C_SOURCE_COMPILES("#include <pcre.h.generic>
|
||||
#if PCRE_MAJOR != ${PCRE_REQUIRED_MAJOR_VERSION} || PCRE_MINOR != ${PCRE_REQUIRED_MINOR_VERSION}
|
||||
#error Incorrect pcre version
|
||||
#endif
|
||||
main() {}" CORRECT_PCRE_VERSION)
|
||||
set (CMAKE_REQUIRED_INCLUDES "${saved_INCLUDES}")
|
||||
|
||||
if (NOT CORRECT_PCRE_VERSION)
|
||||
unset(CORRECT_PCRE_VERSION CACHE)
|
||||
message(STATUS "Incorrect version of pcre - version ${PCRE_REQUIRED_VERSION} is required")
|
||||
return ()
|
||||
else()
|
||||
message(STATUS "PCRE version ${PCRE_REQUIRED_VERSION} - building from source.")
|
||||
endif()
|
||||
|
||||
# PCRE compile options
|
||||
option(PCRE_BUILD_PCRECPP OFF)
|
||||
option(PCRE_BUILD_PCREGREP OFF)
|
||||
option(PCRE_SHOW_REPORT OFF)
|
||||
set(PCRE_SUPPORT_UNICODE_PROPERTIES ON CACHE BOOL "Build pcre with unicode")
|
||||
add_subdirectory(${PCRE_SOURCE} ${PROJECT_BINARY_DIR}/pcre EXCLUDE_FROM_ALL)
|
||||
set(PCRE_INCLUDE_DIRS ${PCRE_SOURCE} ${PROJECT_BINARY_DIR}/pcre)
|
||||
set(PCRE_LDFLAGS -L"${LIBDIR}" -lpcre)
|
||||
else ()
|
||||
# pkgconf should save us
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PCRE libpcre=${PCRE_REQUIRED_VERSION})
|
||||
if (PCRE_FOUND)
|
||||
message(STATUS "PCRE version ${PCRE_REQUIRED_VERSION}")
|
||||
else ()
|
||||
message(STATUS "PCRE version ${PCRE_REQUIRED_VERSION} not found")
|
||||
return ()
|
||||
endif ()
|
||||
endif (PCRE_BUILD_SOURCE)
|
||||
|
||||
set (PCRE_CHECKED TRUE PARENT_SCOPE)
|
@@ -44,7 +44,7 @@ else()
|
||||
# build sqlite as a static lib to compile into our test programs
|
||||
add_library(sqlite3_static STATIC "${PROJECT_SOURCE_DIR}/sqlite3/sqlite3.c")
|
||||
if (NOT WIN32)
|
||||
set_target_properties(sqlite3_static PROPERTIES COMPILE_FLAGS "-Wno-unused -Wno-cast-qual -DSQLITE_OMIT_LOAD_EXTENSION")
|
||||
set_target_properties(sqlite3_static PROPERTIES COMPILE_FLAGS "-Wno-error -Wno-extra -Wno-unused -Wno-cast-qual -DSQLITE_OMIT_LOAD_EXTENSION")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
@@ -2,3 +2,9 @@
|
||||
.regexp {
|
||||
color: darkred !important;
|
||||
}
|
||||
|
||||
/* Avoid (the alabaster theme default) Goudy Old Style, which renders in
|
||||
* italics on some Mac/Safari systems. */
|
||||
body {
|
||||
font-family: 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
|
||||
}
|
||||
|
@@ -287,6 +287,7 @@ which provides the following fields:
|
||||
* ``min_length``: The minimum match length (from start to end) required to
|
||||
successfully match this expression.
|
||||
* ``edit_distance``: Match this expression within a given Levenshtein distance.
|
||||
* ``hamming_distance``: Match this expression within a given Hamming distance.
|
||||
|
||||
These parameters either allow the set of matches produced by a pattern to be
|
||||
constrained at compile time (rather than relying on the application to process
|
||||
@@ -299,10 +300,15 @@ and a ``max_offset`` of 15 will not produce matches when scanned against
|
||||
streams ``foo0123bar`` or ``foo0123456bar``.
|
||||
|
||||
Similarly, the pattern :regexp:`/foobar/` when given an ``edit_distance`` of 2
|
||||
will produce matches when scanned against ``foobar``, ``fooba``, ``fobr``,
|
||||
``fo_baz``, ``foooobar``, and anything else that lies within edit distance of 2
|
||||
(as defined by Levenshtein distance). For more details, see the
|
||||
:ref:`approximate_matching` section.
|
||||
will produce matches when scanned against ``foobar``, ``f00bar``, ``fooba``,
|
||||
``fobr``, ``fo_baz``, ``foooobar``, and anything else that lies within edit
|
||||
distance of 2 (as defined by Levenshtein distance).
|
||||
|
||||
When the same pattern :regexp:`/foobar/` is given a ``hamming_distance`` of 2,
|
||||
it will produce matches when scanned against ``foobar``, ``boofar``,
|
||||
``f00bar``, and anything else with at most two characters substituted from the
|
||||
original pattern. For more details, see the :ref:`approximate_matching`
|
||||
section.
|
||||
|
||||
=================
|
||||
Prefiltering Mode
|
||||
@@ -377,7 +383,7 @@ The :c:type:`hs_platform_info_t` structure has two fields:
|
||||
#. ``cpu_features``: This allows the application to specify a mask of CPU
|
||||
features that may be used on the target platform. For example,
|
||||
:c:member:`HS_CPU_FEATURES_AVX2` can be specified for Intel\ |reg| Advanced
|
||||
Vector Extensions +2 (Intel\ |reg| AVX2) instruction set support. If a flag
|
||||
Vector Extensions 2 (Intel\ |reg| AVX2) instruction set support. If a flag
|
||||
for a particular CPU feature is specified, the database will not be usable on
|
||||
a CPU without that feature.
|
||||
|
||||
@@ -398,13 +404,20 @@ follows:
|
||||
|
||||
#. **Edit distance** is defined as Levenshtein distance. That is, there are
|
||||
three possible edit types considered: insertion, removal and substitution.
|
||||
More formal description can be found on
|
||||
`Wikipedia <https://en.wikipedia.org/wiki/Levenshtein_distance>`_.
|
||||
A more formal description can be found on
|
||||
`Wikipedia <https://en.wikipedia.org/wiki/Levenshtein_distance>`__.
|
||||
|
||||
#. **Approximate matching** will match all *corpora* within a given edit
|
||||
distance. That is, given a pattern, approximate matching will match anything
|
||||
that can be edited to arrive at a corpus that exactly matches the original
|
||||
pattern.
|
||||
#. **Hamming distance** is the number of positions by which two strings of
|
||||
equal length differ. That is, it is the number of substitutions required to
|
||||
convert one string to the other. There are no insertions or removals when
|
||||
approximate matching using a Hamming distance. A more formal description can
|
||||
be found on
|
||||
`Wikipedia <https://en.wikipedia.org/wiki/Hamming_distance>`__.
|
||||
|
||||
#. **Approximate matching** will match all *corpora* within a given edit or
|
||||
Hamming distance. That is, given a pattern, approximate matching will match
|
||||
anything that can be edited to arrive at a corpus that exactly matches the
|
||||
original pattern.
|
||||
|
||||
#. **Matching semantics** are exactly the same as described in :ref:`semantics`.
|
||||
|
||||
@@ -437,7 +450,9 @@ matching support. Here they are, in a nutshell:
|
||||
reduce to so-called "vacuous" patterns (patterns that match everything). For
|
||||
example, pattern :regexp:`/foo/` with edit distance 3, if implemented,
|
||||
would reduce to matching zero-length buffers. Such patterns will result in a
|
||||
"Pattern cannot be approximately matched" compile error.
|
||||
"Pattern cannot be approximately matched" compile error. Approximate
|
||||
matching within a Hamming distance does not remove symbols, so will not
|
||||
reduce to a vacuous pattern.
|
||||
* Finally, due to the inherent complexities of defining matching behavior,
|
||||
approximate matching implements a reduced subset of regular expression
|
||||
syntax. Approximate matching does not support UTF-8 (and other
|
||||
|
@@ -44,7 +44,7 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Hyperscan'
|
||||
copyright = u'2015-2017, Intel Corporation'
|
||||
copyright = u'2015-2018, Intel Corporation'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
|
@@ -30,4 +30,4 @@ and/or other countries.
|
||||
|
||||
\*Other names and brands may be claimed as the property of others.
|
||||
|
||||
Copyright |copy| 2015-2017, Intel Corporation. All rights reserved.
|
||||
Copyright |copy| 2015-2018, Intel Corporation. All rights reserved.
|
||||
|
@@ -820,7 +820,7 @@ EXCLUDE_PATTERNS =
|
||||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories use the pattern */test/*
|
||||
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXCLUDE_SYMBOLS = "HS_CDECL"
|
||||
|
||||
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
|
||||
# that contain example code fragments that are included (see the \include
|
||||
@@ -1959,7 +1959,7 @@ ENABLE_PREPROCESSING = YES
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
MACRO_EXPANSION = NO
|
||||
MACRO_EXPANSION = YES
|
||||
|
||||
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
|
||||
# the macro expansion is limited to the macros specified with the PREDEFINED and
|
||||
@@ -1967,7 +1967,7 @@ MACRO_EXPANSION = NO
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
EXPAND_ONLY_PREDEF = YES
|
||||
|
||||
# If the SEARCH_INCLUDES tag is set to YES, the include files in the
|
||||
# INCLUDE_PATH will be searched if a #include is found.
|
||||
@@ -1999,7 +1999,7 @@ INCLUDE_FILE_PATTERNS =
|
||||
# recursively expanded use the := operator instead of the = operator.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
PREDEFINED =
|
||||
PREDEFINED = "HS_CDECL="
|
||||
|
||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
||||
# tag can be used to specify a list of macro names that should be expanded. The
|
||||
|
@@ -33,11 +33,21 @@ See :c:type:`match_event_handler` for more information.
|
||||
Streaming Mode
|
||||
**************
|
||||
|
||||
The streaming runtime API consists of functions to open, scan, and close
|
||||
Hyperscan data streams -- these functions being :c:func:`hs_open_stream`,
|
||||
:c:func:`hs_scan_stream`, and :c:func:`hs_close_stream`. Any matches detected
|
||||
in the written data are returned to the calling application via a function
|
||||
pointer callback.
|
||||
The core of the Hyperscan streaming runtime API consists of functions to open,
|
||||
scan, and close Hyperscan data streams:
|
||||
|
||||
* :c:func:`hs_open_stream`: allocates and initializes a new stream for scanning.
|
||||
|
||||
* :c:func:`hs_scan_stream`: scans a block of data in a given stream, raising
|
||||
matches as they are detected.
|
||||
|
||||
* :c:func:`hs_close_stream`: completes scanning of a given stream (raising any
|
||||
matches that occur at the end of the stream) and frees the stream state. After
|
||||
a call to :c:func:`hs_close_stream`, the stream handle is invalid and should
|
||||
not be used again for any purpose.
|
||||
|
||||
Any matches detected in the data as it is scanned are returned to the calling
|
||||
application via a function pointer callback.
|
||||
|
||||
The match callback function has the capability to halt scanning of the current
|
||||
data stream by returning a non-zero value. In streaming mode, the result of
|
||||
|
@@ -6,6 +6,30 @@ Tools
|
||||
|
||||
This section describes the set of utilities included with the Hyperscan library.
|
||||
|
||||
********************
|
||||
Quick Check: hscheck
|
||||
********************
|
||||
|
||||
The ``hscheck`` tool allows the user to quickly check whether Hyperscan supports
|
||||
a group of patterns. If a pattern is rejected by Hyperscan's compiler, the
|
||||
compile error is provided on standard output.
|
||||
|
||||
For example, given the following three patterns (the last of which contains a
|
||||
syntax error) in a file called ``/tmp/test``::
|
||||
|
||||
1:/foo.*bar/
|
||||
2:/abc|def|ghi/
|
||||
3:/((foo|bar)/
|
||||
|
||||
... the ``hscheck`` tool will produce the following output::
|
||||
|
||||
$ bin/hscheck -e /tmp/test
|
||||
|
||||
OK: 1:/foo.*bar/
|
||||
OK: 2:/abc|def|ghi/
|
||||
FAIL (compile): 3:/((foo|bar)/: Missing close parenthesis for group started at index 0.
|
||||
SUMMARY: 1 of 3 failed.
|
||||
|
||||
********************
|
||||
Benchmarker: hsbench
|
||||
********************
|
||||
@@ -62,6 +86,129 @@ to complete all of them.
|
||||
using a utility like ``taskset`` to lock the hsbench process to one core and
|
||||
minimize jitter due to the operating system's scheduler.
|
||||
|
||||
*******************************
|
||||
Correctness Testing: hscollider
|
||||
*******************************
|
||||
|
||||
The ``hscollider`` tool, or Pattern Collider, provides a way to verify
|
||||
Hyperscan's matching behaviour. It does this by compiling and scanning patterns
|
||||
(either singly or in groups) against known corpora and comparing the results
|
||||
against another engine (the "ground truth"). Two sources of ground truth for
|
||||
comparison are available:
|
||||
|
||||
* The PCRE library (http://pcre.org/).
|
||||
* An NFA simulation run on Hyperscan's compile-time graph representation. This
|
||||
is used if PCRE cannot support the pattern or if PCRE execution fails due to
|
||||
a resource limit.
|
||||
|
||||
Much of Hyperscan's testing infrastructure is built on ``hscollider``, and the
|
||||
tool is designed to take advantage of multiple cores and provide considerable
|
||||
flexibility in controlling the test. These options are described in the help
|
||||
(``hscollider -h``) and include:
|
||||
|
||||
* Testing in streaming, block or vectored mode.
|
||||
* Testing corpora at different alignments in memory.
|
||||
* Testing patterns in groups of varying size.
|
||||
* Manipulating stream state or scratch space between tests.
|
||||
* Cross-compilation and serialization/deserialization of databases.
|
||||
* Synthetic generation of corpora given a pattern set.
|
||||
|
||||
Using hscollider to debug a pattern
|
||||
===================================
|
||||
|
||||
One common use-case for ``hscollider`` is to determine whether Hyperscan will
|
||||
match a pattern in the expected location, and whether this accords with PCRE's
|
||||
behaviour for the same case.
|
||||
|
||||
Here is an example. We put our pattern in a file in Hyperscan's pattern
|
||||
format::
|
||||
|
||||
$ cat /tmp/pat
|
||||
1:/hatstand.*badgerbrush/
|
||||
|
||||
We put the corpus to be scanned in another file, with the same numeric
|
||||
identifier at the start to indicate that it should match pattern 1::
|
||||
|
||||
$ cat /tmp/corpus
|
||||
1:__hatstand__hatstand__badgerbrush_badgerbrush
|
||||
|
||||
Then we can run ``hscollider`` with its verbosity turned up (``-vv``) so that
|
||||
individual matches are displayed in the output::
|
||||
|
||||
$ bin/ue2collider -e /tmp/pat -c /tmp/corpus -Z 0 -T 1 -vv
|
||||
ue2collider: The Pattern Collider Mark II
|
||||
|
||||
Number of threads: 1 (1 scanner, 1 generator)
|
||||
Expression path: /tmp/pat
|
||||
Signature files: none
|
||||
Mode of operation: block mode
|
||||
UE2 scan alignment: 0
|
||||
Corpora read from file: /tmp/corpus
|
||||
|
||||
Running single-pattern/single-compile test for 1 expressions.
|
||||
|
||||
PCRE Match @ (2,45)
|
||||
PCRE Match @ (2,33)
|
||||
PCRE Match @ (12,45)
|
||||
PCRE Match @ (12,33)
|
||||
UE2 Match @ (0,33) for 1
|
||||
UE2 Match @ (0,45) for 1
|
||||
Scan call returned 0
|
||||
PASSED: id 1, alignment 0, corpus 0 (matched pcre:2, ue2:2)
|
||||
Thread 0 processed 1 units.
|
||||
|
||||
Summary:
|
||||
Mode: Single/Block
|
||||
=========
|
||||
Expressions processed: 1
|
||||
Corpora processed: 1
|
||||
Expressions with failures: 0
|
||||
Corpora generation failures: 0
|
||||
Compilation failures: pcre:0, ng:0, ue2:0
|
||||
Matching failures: pcre:0, ng:0, ue2:0
|
||||
Match differences: 0
|
||||
No ground truth: 0
|
||||
Total match differences: 0
|
||||
|
||||
Total elapsed time: 0.00522815 secs.
|
||||
|
||||
We can see from this output that both PCRE and Hyperscan find matches ending at
|
||||
offset 33 and 45, and so ``hscollider`` considers this test case to have
|
||||
passed.
|
||||
|
||||
(In the example command line above, ``-Z 0`` instructs us to only test at
|
||||
corpus alignment 0, and ``-T 1`` instructs us to only use one thread.)
|
||||
|
||||
.. note:: In default operation, PCRE produces only one match for a scan, unlike
|
||||
Hyperscan's automata semantics. The ``hscollider`` tool uses libpcre's
|
||||
"callout" functionality to match Hyperscan's semantics.
|
||||
|
||||
Running a larger scan test
|
||||
==========================
|
||||
|
||||
A set of patterns for testing purposes are distributed with Hyperscan, and these
|
||||
can be tested via ``hscollider`` on an in-tree build. Two CMake targets are
|
||||
provided to do this easily:
|
||||
|
||||
================================= =====================================
|
||||
Make Target Description
|
||||
================================= =====================================
|
||||
``make collide_quick_test`` Tests all patterns in streaming mode.
|
||||
``make collide_quick_test_block`` Tests all patterns in block mode.
|
||||
================================= =====================================
|
||||
|
||||
*****************
|
||||
Debugging: hsdump
|
||||
*****************
|
||||
|
||||
When built in debug mode (using the CMake directive ``CMAKE_BUILD_TYPE`` set to
|
||||
``Debug``), Hyperscan includes support for dumping information about its
|
||||
internals during pattern compilation with the ``hsdump`` tool.
|
||||
|
||||
This information is mostly of use to Hyperscan developers familiar with the
|
||||
library's internal structure, but can be used to diagnose issues with patterns
|
||||
and provide more information in bug reports.
|
||||
|
||||
.. _tools_pattern_format:
|
||||
|
||||
**************
|
||||
|
@@ -78,7 +78,8 @@ void validateExt(const hs_expr_ext &ext) {
|
||||
static const unsigned long long ALL_EXT_FLAGS = HS_EXT_FLAG_MIN_OFFSET |
|
||||
HS_EXT_FLAG_MAX_OFFSET |
|
||||
HS_EXT_FLAG_MIN_LENGTH |
|
||||
HS_EXT_FLAG_EDIT_DISTANCE;
|
||||
HS_EXT_FLAG_EDIT_DISTANCE |
|
||||
HS_EXT_FLAG_HAMMING_DISTANCE;
|
||||
if (ext.flags & ~ALL_EXT_FLAGS) {
|
||||
throw CompileError("Invalid hs_expr_ext flag set.");
|
||||
}
|
||||
@@ -96,6 +97,13 @@ void validateExt(const hs_expr_ext &ext) {
|
||||
throw CompileError("In hs_expr_ext, min_length must be less than or "
|
||||
"equal to max_offset.");
|
||||
}
|
||||
|
||||
if ((ext.flags & HS_EXT_FLAG_EDIT_DISTANCE) &&
|
||||
(ext.flags & HS_EXT_FLAG_HAMMING_DISTANCE)) {
|
||||
throw CompileError("In hs_expr_ext, cannot have both edit distance and "
|
||||
"Hamming distance.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ParsedExpression::ParsedExpression(unsigned index_in, const char *expression,
|
||||
@@ -103,7 +111,7 @@ ParsedExpression::ParsedExpression(unsigned index_in, const char *expression,
|
||||
const hs_expr_ext *ext)
|
||||
: expr(index_in, flags & HS_FLAG_ALLOWEMPTY, flags & HS_FLAG_SINGLEMATCH,
|
||||
false, flags & HS_FLAG_PREFILTER, SOM_NONE, report, 0, MAX_OFFSET,
|
||||
0, 0) {
|
||||
0, 0, 0) {
|
||||
ParseMode mode(flags);
|
||||
|
||||
component = parse(expression, mode);
|
||||
@@ -158,6 +166,9 @@ ParsedExpression::ParsedExpression(unsigned index_in, const char *expression,
|
||||
if (ext->flags & HS_EXT_FLAG_EDIT_DISTANCE) {
|
||||
expr.edit_distance = ext->edit_distance;
|
||||
}
|
||||
if (ext->flags & HS_EXT_FLAG_HAMMING_DISTANCE) {
|
||||
expr.hamm_distance = ext->hamming_distance;
|
||||
}
|
||||
}
|
||||
|
||||
// These are validated in validateExt, so an error will already have been
|
||||
|
@@ -45,11 +45,13 @@ public:
|
||||
ExpressionInfo(unsigned int index_in, bool allow_vacuous_in,
|
||||
bool highlander_in, bool utf8_in, bool prefilter_in,
|
||||
som_type som_in, ReportID report_in, u64a min_offset_in,
|
||||
u64a max_offset_in, u64a min_length_in, u32 edit_distance_in)
|
||||
u64a max_offset_in, u64a min_length_in, u32 edit_distance_in,
|
||||
u32 hamm_distance_in)
|
||||
: index(index_in), report(report_in), allow_vacuous(allow_vacuous_in),
|
||||
highlander(highlander_in), utf8(utf8_in), prefilter(prefilter_in),
|
||||
som(som_in), min_offset(min_offset_in), max_offset(max_offset_in),
|
||||
min_length(min_length_in), edit_distance(edit_distance_in) {}
|
||||
min_length(min_length_in), edit_distance(edit_distance_in),
|
||||
hamm_distance(hamm_distance_in) {}
|
||||
|
||||
/**
|
||||
* \brief Index of the expression represented by this graph.
|
||||
@@ -95,6 +97,7 @@ public:
|
||||
* 0 if not used.
|
||||
*/
|
||||
u32 edit_distance;
|
||||
u32 hamm_distance;
|
||||
};
|
||||
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@
|
||||
#include "hs_common.h"
|
||||
#include "hs_runtime.h"
|
||||
#include "ue2common.h"
|
||||
#include "util/cpuid_flags.h"
|
||||
#include "util/cpuid_inline.h"
|
||||
#include "util/join.h"
|
||||
|
||||
#if defined(DISABLE_AVX512_DISPATCH)
|
||||
|
@@ -45,6 +45,7 @@
|
||||
#include "parser/unsupported.h"
|
||||
#include "util/compile_error.h"
|
||||
#include "util/cpuid_flags.h"
|
||||
#include "util/cpuid_inline.h"
|
||||
#include "util/depth.h"
|
||||
#include "util/popcount.h"
|
||||
#include "util/target_info.h"
|
||||
|
@@ -143,7 +143,7 @@ hs_error_t HS_CDECL hs_deserialize_database(const char *bytes,
|
||||
* by @ref hs_serialize_database() at a given memory location.
|
||||
*
|
||||
* This function (unlike @ref hs_deserialize_database()) will write the
|
||||
* reconstructed database to the memory location given in the @a db parameter.
|
||||
* reconstructed database to the memory location given in the @p db parameter.
|
||||
* The amount of space required at this location can be determined with the
|
||||
* @ref hs_serialized_database_size() function.
|
||||
*
|
||||
@@ -479,6 +479,10 @@ hs_error_t HS_CDECL hs_valid_platform(void);
|
||||
|
||||
/**
|
||||
* A parameter passed to this function was invalid.
|
||||
*
|
||||
* This error is only returned in cases where the function can detect an
|
||||
* invalid parameter -- it cannot be relied upon to detect (for example)
|
||||
* pointers to freed memory or other invalid data.
|
||||
*/
|
||||
#define HS_INVALID (-1)
|
||||
|
||||
|
@@ -258,6 +258,13 @@ typedef struct hs_expr_ext {
|
||||
* hs_expr_ext::flags field.
|
||||
*/
|
||||
unsigned edit_distance;
|
||||
|
||||
/**
|
||||
* Allow patterns to approximately match within this Hamming distance. To
|
||||
* use this parameter, set the @ref HS_EXT_FLAG_HAMMING_DISTANCE flag in the
|
||||
* hs_expr_ext::flags field.
|
||||
*/
|
||||
unsigned hamming_distance;
|
||||
} hs_expr_ext_t;
|
||||
|
||||
/**
|
||||
@@ -281,6 +288,9 @@ typedef struct hs_expr_ext {
|
||||
/** Flag indicating that the hs_expr_ext::edit_distance field is used. */
|
||||
#define HS_EXT_FLAG_EDIT_DISTANCE 8ULL
|
||||
|
||||
/** Flag indicating that the hs_expr_ext::hamming_distance field is used. */
|
||||
#define HS_EXT_FLAG_HAMMING_DISTANCE 16ULL
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
@@ -293,9 +303,9 @@ typedef struct hs_expr_ext {
|
||||
* @param expression
|
||||
* The NULL-terminated expression to parse. Note that this string must
|
||||
* represent ONLY the pattern to be matched, with no delimiters or flags;
|
||||
* any global flags should be specified with the @a flags argument. For
|
||||
* any global flags should be specified with the @p flags argument. For
|
||||
* example, the expression `/abc?def/i` should be compiled by providing
|
||||
* `abc?def` as the @a expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* `abc?def` as the @p expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* flags.
|
||||
*
|
||||
* @param flags
|
||||
@@ -362,8 +372,8 @@ hs_error_t HS_CDECL hs_compile(const char *expression, unsigned int flags,
|
||||
* hs_compile()) these strings must contain only the pattern to be
|
||||
* matched, with no delimiters or flags. For example, the expression
|
||||
* `/abc?def/i` should be compiled by providing `abc?def` as the first
|
||||
* string in the @a expressions array, and @ref HS_FLAG_CASELESS as the
|
||||
* first value in the @a flags array.
|
||||
* string in the @p expressions array, and @ref HS_FLAG_CASELESS as the
|
||||
* first value in the @p flags array.
|
||||
*
|
||||
* @param flags
|
||||
* Array of flags which modify the behaviour of each expression. Multiple
|
||||
@@ -418,7 +428,7 @@ hs_error_t HS_CDECL hs_compile(const char *expression, unsigned int flags,
|
||||
*
|
||||
* @return
|
||||
* @ref HS_SUCCESS is returned on successful compilation; @ref
|
||||
* HS_COMPILER_ERROR on failure, with details provided in the @a error
|
||||
* HS_COMPILER_ERROR on failure, with details provided in the @p error
|
||||
* parameter.
|
||||
*
|
||||
*/
|
||||
@@ -442,8 +452,8 @@ hs_error_t HS_CDECL hs_compile_multi(const char *const *expressions,
|
||||
* hs_compile()) these strings must contain only the pattern to be
|
||||
* matched, with no delimiters or flags. For example, the expression
|
||||
* `/abc?def/i` should be compiled by providing `abc?def` as the first
|
||||
* string in the @a expressions array, and @ref HS_FLAG_CASELESS as the
|
||||
* first value in the @a flags array.
|
||||
* string in the @p expressions array, and @ref HS_FLAG_CASELESS as the
|
||||
* first value in the @p flags array.
|
||||
*
|
||||
* @param flags
|
||||
* Array of flags which modify the behaviour of each expression. Multiple
|
||||
@@ -505,7 +515,7 @@ hs_error_t HS_CDECL hs_compile_multi(const char *const *expressions,
|
||||
*
|
||||
* @return
|
||||
* @ref HS_SUCCESS is returned on successful compilation; @ref
|
||||
* HS_COMPILER_ERROR on failure, with details provided in the @a error
|
||||
* HS_COMPILER_ERROR on failure, with details provided in the @p error
|
||||
* parameter.
|
||||
*
|
||||
*/
|
||||
@@ -549,9 +559,9 @@ hs_error_t HS_CDECL hs_free_compile_error(hs_compile_error_t *error);
|
||||
* @param expression
|
||||
* The NULL-terminated expression to parse. Note that this string must
|
||||
* represent ONLY the pattern to be matched, with no delimiters or flags;
|
||||
* any global flags should be specified with the @a flags argument. For
|
||||
* any global flags should be specified with the @p flags argument. For
|
||||
* example, the expression `/abc?def/i` should be compiled by providing
|
||||
* `abc?def` as the @a expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* `abc?def` as the @p expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* flags.
|
||||
*
|
||||
* @param flags
|
||||
@@ -611,9 +621,9 @@ hs_error_t HS_CDECL hs_expression_info(const char *expression,
|
||||
* @param expression
|
||||
* The NULL-terminated expression to parse. Note that this string must
|
||||
* represent ONLY the pattern to be matched, with no delimiters or flags;
|
||||
* any global flags should be specified with the @a flags argument. For
|
||||
* any global flags should be specified with the @p flags argument. For
|
||||
* example, the expression `/abc?def/i` should be compiled by providing
|
||||
* `abc?def` as the @a expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* `abc?def` as the @p expression, and @ref HS_FLAG_CASELESS as the @a
|
||||
* flags.
|
||||
*
|
||||
* @param flags
|
||||
|
@@ -101,7 +101,7 @@ typedef struct hs_scratch hs_scratch_t;
|
||||
|
||||
* - If the start of match value lies outside this horizon (possible only
|
||||
* when the SOM_HORIZON value is not @ref HS_MODE_SOM_HORIZON_LARGE),
|
||||
* the @a from value will be set to @ref HS_OFFSET_PAST_HORIZON.
|
||||
* the @p from value will be set to @ref HS_OFFSET_PAST_HORIZON.
|
||||
|
||||
* - This argument will be set to zero if the Start of Match flag is not
|
||||
* enabled for the given pattern.
|
||||
@@ -193,6 +193,12 @@ hs_error_t HS_CDECL hs_scan_stream(hs_stream_t *id, const char *data,
|
||||
/**
|
||||
* Close a stream.
|
||||
*
|
||||
* This function completes matching on the given stream and frees the memory
|
||||
* associated with the stream state. After this call, the stream pointed to by
|
||||
* @p id is invalid and can no longer be used. To reuse the stream state after
|
||||
* completion, rather than closing it, the @ref hs_reset_stream function can be
|
||||
* used.
|
||||
*
|
||||
* This function must be called for any stream created with @ref
|
||||
* hs_open_stream(), even if scanning has been terminated by a non-zero return
|
||||
* from the match callback function.
|
||||
@@ -210,7 +216,7 @@ hs_error_t HS_CDECL hs_scan_stream(hs_stream_t *id, const char *data,
|
||||
*
|
||||
* @param scratch
|
||||
* A per-thread scratch space allocated by @ref hs_alloc_scratch(). This is
|
||||
* allowed to be NULL only if the @a onEvent callback is also NULL.
|
||||
* allowed to be NULL only if the @p onEvent callback is also NULL.
|
||||
*
|
||||
* @param onEvent
|
||||
* Pointer to a match event callback function. If a NULL pointer is given,
|
||||
@@ -251,7 +257,7 @@ hs_error_t HS_CDECL hs_close_stream(hs_stream_t *id, hs_scratch_t *scratch,
|
||||
*
|
||||
* @param scratch
|
||||
* A per-thread scratch space allocated by @ref hs_alloc_scratch(). This is
|
||||
* allowed to be NULL only if the @a onEvent callback is also NULL.
|
||||
* allowed to be NULL only if the @p onEvent callback is also NULL.
|
||||
*
|
||||
* @param onEvent
|
||||
* Pointer to a match event callback function. If a NULL pointer is given,
|
||||
@@ -287,7 +293,7 @@ hs_error_t HS_CDECL hs_copy_stream(hs_stream_t **to_id,
|
||||
|
||||
/**
|
||||
* Duplicate the given 'from' stream state onto the 'to' stream. The 'to' stream
|
||||
* will first be reset (reporting any EOD matches if a non-NULL @a onEvent
|
||||
* will first be reset (reporting any EOD matches if a non-NULL @p onEvent
|
||||
* callback handler is provided).
|
||||
*
|
||||
* Note: the 'to' stream and the 'from' stream must be open against the same
|
||||
@@ -302,7 +308,7 @@ hs_error_t HS_CDECL hs_copy_stream(hs_stream_t **to_id,
|
||||
*
|
||||
* @param scratch
|
||||
* A per-thread scratch space allocated by @ref hs_alloc_scratch(). This is
|
||||
* allowed to be NULL only if the @a onEvent callback is also NULL.
|
||||
* allowed to be NULL only if the @p onEvent callback is also NULL.
|
||||
*
|
||||
* @param onEvent
|
||||
* Pointer to a match event callback function. If a NULL pointer is given,
|
||||
@@ -325,10 +331,10 @@ hs_error_t HS_CDECL hs_reset_and_copy_stream(hs_stream_t *to_id,
|
||||
* Creates a compressed representation of the provided stream in the buffer
|
||||
* provided. This compressed representation can be converted back into a stream
|
||||
* state by using @ref hs_expand_stream() or @ref hs_reset_and_expand_stream().
|
||||
* The size of the compressed representation will be placed into @a used_space.
|
||||
* The size of the compressed representation will be placed into @p used_space.
|
||||
*
|
||||
* If there is not sufficient space in the buffer to hold the compressed
|
||||
* represention, @ref HS_INSUFFICIENT_SPACE will be returned and @a used_space
|
||||
* representation, @ref HS_INSUFFICIENT_SPACE will be returned and @p used_space
|
||||
* will be populated with the amount of space required.
|
||||
*
|
||||
* Note: this function does not close the provided stream, you may continue to
|
||||
@@ -340,15 +346,15 @@ hs_error_t HS_CDECL hs_reset_and_copy_stream(hs_stream_t *to_id,
|
||||
* @param buf
|
||||
* Buffer to write the compressed representation into. Note: if the call is
|
||||
* just being used to determine the amount of space required, it is allowed
|
||||
* to pass NULL here and @a buf_space as 0.
|
||||
* to pass NULL here and @p buf_space as 0.
|
||||
*
|
||||
* @param buf_space
|
||||
* The number of bytes in @a buf. If buf_space is too small, the call will
|
||||
* The number of bytes in @p buf. If buf_space is too small, the call will
|
||||
* fail with @ref HS_INSUFFICIENT_SPACE.
|
||||
*
|
||||
* @param used_space
|
||||
* Pointer to where the amount of used space will be written to. The used
|
||||
* buffer space is always less than or equal to @a buf_space. If the call
|
||||
* buffer space is always less than or equal to @p buf_space. If the call
|
||||
* fails with @ref HS_INSUFFICIENT_SPACE, this pointer will be used to
|
||||
* write out the amount of buffer space required.
|
||||
*
|
||||
@@ -363,8 +369,8 @@ hs_error_t HS_CDECL hs_compress_stream(const hs_stream_t *stream, char *buf,
|
||||
* Decompresses a compressed representation created by @ref hs_compress_stream()
|
||||
* into a new stream.
|
||||
*
|
||||
* Note: @a buf must correspond to a complete compressed representation created
|
||||
* by @ref hs_compress_stream() of a stream that was opened against @a db. It is
|
||||
* Note: @p buf must correspond to a complete compressed representation created
|
||||
* by @ref hs_compress_stream() of a stream that was opened against @p db. It is
|
||||
* not always possible to detect misuse of this API and behaviour is undefined
|
||||
* if these properties are not satisfied.
|
||||
*
|
||||
@@ -393,19 +399,19 @@ hs_error_t HS_CDECL hs_expand_stream(const hs_database_t *db,
|
||||
/**
|
||||
* Decompresses a compressed representation created by @ref hs_compress_stream()
|
||||
* on top of the 'to' stream. The 'to' stream will first be reset (reporting
|
||||
* any EOD matches if a non-NULL @a onEvent callback handler is provided).
|
||||
* any EOD matches if a non-NULL @p onEvent callback handler is provided).
|
||||
*
|
||||
* Note: the 'to' stream must be opened against the same database as the
|
||||
* compressed stream.
|
||||
*
|
||||
* Note: @a buf must correspond to a complete compressed representation created
|
||||
* by @ref hs_compress_stream() of a stream that was opened against @a db. It is
|
||||
* Note: @p buf must correspond to a complete compressed representation created
|
||||
* by @ref hs_compress_stream() of a stream that was opened against @p db. It is
|
||||
* not always possible to detect misuse of this API and behaviour is undefined
|
||||
* if these properties are not satisfied.
|
||||
*
|
||||
* @param to_stream
|
||||
* A pointer to the generated @ref hs_stream_t will be
|
||||
* returned; NULL on failure.
|
||||
* A pointer to a valid stream state. A pointer to the expanded @ref
|
||||
* hs_stream_t will be returned; NULL on failure.
|
||||
*
|
||||
* @param buf
|
||||
* A compressed representation of a stream. These compressed forms are
|
||||
@@ -416,7 +422,7 @@ hs_error_t HS_CDECL hs_expand_stream(const hs_database_t *db,
|
||||
*
|
||||
* @param scratch
|
||||
* A per-thread scratch space allocated by @ref hs_alloc_scratch(). This is
|
||||
* allowed to be NULL only if the @a onEvent callback is also NULL.
|
||||
* allowed to be NULL only if the @p onEvent callback is also NULL.
|
||||
*
|
||||
* @param onEvent
|
||||
* Pointer to a match event callback function. If a NULL pointer is given,
|
||||
@@ -492,7 +498,7 @@ hs_error_t HS_CDECL hs_scan(const hs_database_t *db, const char *data,
|
||||
*
|
||||
* @param count
|
||||
* Number of data blocks to scan. This should correspond to the size of
|
||||
* of the @a data and @a length arrays.
|
||||
* of the @p data and @p length arrays.
|
||||
*
|
||||
* @param flags
|
||||
* Flags modifying the behaviour of this function. This parameter is
|
||||
|
@@ -28,6 +28,7 @@
|
||||
|
||||
#include "hs_common.h"
|
||||
#include "util/cpuid_flags.h"
|
||||
#include "util/cpuid_inline.h"
|
||||
|
||||
HS_PUBLIC_API
|
||||
hs_error_t HS_CDECL hs_valid_platform(void) {
|
||||
|
@@ -347,14 +347,19 @@ bool NG::addGraph(ExpressionInfo &expr, unique_ptr<NGHolder> g_ptr) {
|
||||
throw CompileError(expr.index, "Pattern can never match.");
|
||||
}
|
||||
|
||||
bool hamming = expr.hamm_distance > 0;
|
||||
u32 e_dist = hamming ? expr.hamm_distance : expr.edit_distance;
|
||||
|
||||
DEBUG_PRINTF("edit distance = %u hamming = %s\n", e_dist, hamming ? "true" : "false");
|
||||
|
||||
// validate graph's suitability for fuzzing before resolving asserts
|
||||
validate_fuzzy_compile(g, expr.edit_distance, expr.utf8, cc.grey);
|
||||
validate_fuzzy_compile(g, e_dist, hamming, expr.utf8, cc.grey);
|
||||
|
||||
resolveAsserts(rm, g, expr);
|
||||
dumpDotWrapper(g, expr, "02_post_assert_resolve", cc.grey);
|
||||
assert(allMatchStatesHaveReports(g));
|
||||
|
||||
make_fuzzy(g, expr.edit_distance, cc.grey);
|
||||
make_fuzzy(g, e_dist, hamming, cc.grey);
|
||||
dumpDotWrapper(g, expr, "02a_post_fuzz", cc.grey);
|
||||
|
||||
pruneUseless(g);
|
||||
|
@@ -161,14 +161,17 @@ void fillExpressionInfo(ReportManager &rm, const CompileContext &cc,
|
||||
throw CompileError(expr.index, "Pattern can never match.");
|
||||
}
|
||||
|
||||
bool hamming = expr.hamm_distance > 0;
|
||||
u32 e_dist = hamming ? expr.hamm_distance : expr.edit_distance;
|
||||
|
||||
// validate graph's suitability for fuzzing
|
||||
validate_fuzzy_compile(g, expr.edit_distance, expr.utf8, cc.grey);
|
||||
validate_fuzzy_compile(g, e_dist, hamming, expr.utf8, cc.grey);
|
||||
|
||||
resolveAsserts(rm, g, expr);
|
||||
assert(allMatchStatesHaveReports(g));
|
||||
|
||||
// fuzz graph - this must happen before any transformations are made
|
||||
make_fuzzy(g, expr.edit_distance, cc.grey);
|
||||
make_fuzzy(g, e_dist, hamming, cc.grey);
|
||||
|
||||
pruneUseless(g);
|
||||
pruneEmptyVertices(g);
|
||||
|
@@ -629,15 +629,6 @@ bool hasExtParams(const ExpressionInfo &expr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template<class VertexDepth>
|
||||
depth maxDistFromStart(const VertexDepth &d) {
|
||||
if (!d.fromStartDotStar.max.is_unreachable()) {
|
||||
// A path from startDs, any path, implies we can match at any offset.
|
||||
return depth::infinity();
|
||||
}
|
||||
return d.fromStart.max;
|
||||
}
|
||||
|
||||
static
|
||||
const depth& maxDistToAccept(const NFAVertexBidiDepth &d) {
|
||||
if (d.toAccept.max.is_unreachable()) {
|
||||
@@ -689,7 +680,7 @@ bool isEdgePrunable(const NGHolder &g, const Report &report,
|
||||
const NFAVertexBidiDepth &dv = depths.at(v_idx);
|
||||
|
||||
if (report.minOffset) {
|
||||
depth max_offset = maxDistFromStart(du) + maxDistToAccept(dv);
|
||||
depth max_offset = maxDistFromStartOfData(du) + maxDistToAccept(dv);
|
||||
if (max_offset.is_finite() && max_offset < report.minOffset) {
|
||||
DEBUG_PRINTF("max_offset=%s too small\n", max_offset.str().c_str());
|
||||
return true;
|
||||
@@ -709,7 +700,7 @@ bool isEdgePrunable(const NGHolder &g, const Report &report,
|
||||
if (report.minLength && is_any_accept(v, g)) {
|
||||
// Simple take on min_length. If we're an edge to accept and our max
|
||||
// dist from start is too small, we can be pruned.
|
||||
const depth &width = du.fromStart.max;
|
||||
const depth &width = maxDistFromInit(du);
|
||||
if (width.is_finite() && width < report.minLength) {
|
||||
DEBUG_PRINTF("max width %s from start too small for min_length\n",
|
||||
width.str().c_str());
|
||||
@@ -961,7 +952,7 @@ void removeUnneededOffsetBounds(NGHolder &g, ReportManager &rm) {
|
||||
replaceReports(g, [&](NFAVertex v, ReportID id) {
|
||||
const auto &d = depths.at(g[v].index);
|
||||
const depth &min_depth = min(d.fromStartDotStar.min, d.fromStart.min);
|
||||
const depth &max_depth = maxDistFromStart(d);
|
||||
const depth &max_depth = maxDistFromStartOfData(d);
|
||||
|
||||
DEBUG_PRINTF("vertex %zu has min_depth=%s, max_depth=%s\n", g[v].index,
|
||||
min_depth.str().c_str(), max_depth.str().c_str());
|
||||
|
@@ -144,6 +144,7 @@ vector<flat_set<NFAVertex>> gatherPredecessorsByDepth(const NGHolder &g,
|
||||
struct ShadowGraph {
|
||||
NGHolder &g;
|
||||
u32 edit_distance;
|
||||
bool hamming;
|
||||
map<pair<NFAVertex, u32>, NFAVertex> shadow_map;
|
||||
map<pair<NFAVertex, u32>, NFAVertex> helper_map;
|
||||
map<NFAVertex, NFAVertex> clones;
|
||||
@@ -151,13 +152,17 @@ struct ShadowGraph {
|
||||
vector<pair<NFAVertex, NFAVertex>> edges_to_be_added;
|
||||
flat_set<NFAVertex> orig;
|
||||
|
||||
ShadowGraph(NGHolder &g_in, u32 ed_in) : g(g_in), edit_distance(ed_in) {}
|
||||
ShadowGraph(NGHolder &g_in, u32 ed_in, bool hamm_in)
|
||||
: g(g_in), edit_distance(ed_in), hamming(hamm_in) {}
|
||||
|
||||
void fuzz_graph() {
|
||||
if (edit_distance == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG_PRINTF("edit distance = %u hamming = %s\n", edit_distance,
|
||||
hamming ? "true" : "false");
|
||||
|
||||
// step 1: prepare the vertices, helpers and shadows according to
|
||||
// the original graph
|
||||
prepare_graph();
|
||||
@@ -167,7 +172,9 @@ struct ShadowGraph {
|
||||
|
||||
// step 3: set up reports for newly created vertices (and make clones
|
||||
// if necessary)
|
||||
create_reports();
|
||||
if (!hamming) {
|
||||
create_reports();
|
||||
}
|
||||
|
||||
// step 4: wire up shadow graph and helpers for insert/replace/remove
|
||||
connect_shadow_graph();
|
||||
@@ -244,6 +251,16 @@ private:
|
||||
|
||||
// if there's nowhere to go from this vertex, no helper needed
|
||||
if (proper_out_degree(v, g) < 1) {
|
||||
DEBUG_PRINTF("No helper for node ID: %zu (level %u)\n",
|
||||
g[shadow_v].index, dist);
|
||||
helper_map[make_pair(v, dist)] = shadow_v;
|
||||
continue;
|
||||
}
|
||||
|
||||
// start and startDs only have helpers for insert, so not Hamming
|
||||
if (hamming && is_any_start(v, g)) {
|
||||
DEBUG_PRINTF("No helper for node ID: %zu (level %u)\n",
|
||||
g[shadow_v].index, dist);
|
||||
helper_map[make_pair(v, dist)] = shadow_v;
|
||||
continue;
|
||||
}
|
||||
@@ -256,6 +273,8 @@ private:
|
||||
g[helper_v].char_reach = CharReach::dot();
|
||||
// do not copy virtual start's assert flags
|
||||
if (is_virtual_start(v, g)) {
|
||||
DEBUG_PRINTF("Helper node ID is virtual start: %zu (level %u)\n",
|
||||
g[helper_v].index, dist);
|
||||
g[helper_v].assert_flags = 0;
|
||||
}
|
||||
helper_map[make_pair(v, dist)] = helper_v;
|
||||
@@ -272,7 +291,7 @@ private:
|
||||
const auto &cur_shadow_helper = helper_map[make_pair(v, dist)];
|
||||
|
||||
// multiple insert
|
||||
if (dist > 1) {
|
||||
if (!hamming && dist > 1) {
|
||||
const auto &prev_level_helper = helper_map[make_pair(v, dist - 1)];
|
||||
connect_to_clones(prev_level_helper, cur_shadow_helper);
|
||||
}
|
||||
@@ -429,13 +448,15 @@ private:
|
||||
connect_preds(v, dist);
|
||||
|
||||
// handle helpers
|
||||
if (dist > 0) {
|
||||
if (!hamming && dist > 0) {
|
||||
connect_helpers(v, dist);
|
||||
}
|
||||
}
|
||||
|
||||
// handle removals
|
||||
connect_removals(v);
|
||||
if (!hamming) {
|
||||
connect_removals(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,8 +657,8 @@ bool will_turn_vacuous(const NGHolder &g, u32 edit_distance) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool utf8,
|
||||
const Grey &grey) {
|
||||
void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool hamming,
|
||||
bool utf8, const Grey &grey) {
|
||||
if (edit_distance == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -657,13 +678,14 @@ void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool utf8,
|
||||
"approximate matching.");
|
||||
}
|
||||
}
|
||||
if (will_turn_vacuous(g, edit_distance)) {
|
||||
if (!hamming && will_turn_vacuous(g, edit_distance)) {
|
||||
throw CompileError("Approximate matching patterns that reduce to "
|
||||
"vacuous patterns are disallowed.");
|
||||
}
|
||||
}
|
||||
|
||||
void make_fuzzy(NGHolder &g, u32 edit_distance, const Grey &grey) {
|
||||
void make_fuzzy(NGHolder &g, u32 edit_distance, bool hamming,
|
||||
const Grey &grey) {
|
||||
if (edit_distance == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -671,7 +693,7 @@ void make_fuzzy(NGHolder &g, u32 edit_distance, const Grey &grey) {
|
||||
assert(grey.allowApproximateMatching);
|
||||
assert(grey.maxEditDistance >= edit_distance);
|
||||
|
||||
ShadowGraph sg(g, edit_distance);
|
||||
ShadowGraph sg(g, edit_distance, hamming);
|
||||
sg.fuzz_graph();
|
||||
|
||||
// For safety, enforce limit on actual vertex count.
|
||||
|
@@ -40,10 +40,10 @@ struct Grey;
|
||||
class NGHolder;
|
||||
class ReportManager;
|
||||
|
||||
void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool utf8,
|
||||
const Grey &grey);
|
||||
void validate_fuzzy_compile(const NGHolder &g, u32 edit_distance, bool hamming,
|
||||
bool utf8, const Grey &grey);
|
||||
|
||||
void make_fuzzy(NGHolder &g, u32 edit_distance, const Grey &grey);
|
||||
void make_fuzzy(NGHolder &g, u32 edit_distance, bool hamming, const Grey &grey);
|
||||
}
|
||||
|
||||
#endif // NG_FUZZY_H
|
||||
|
@@ -32,7 +32,6 @@
|
||||
#include "ng_util.h"
|
||||
|
||||
#include "grey.h"
|
||||
#include "ng_depth.h" // for NFAVertexDepth
|
||||
#include "ng_dump.h"
|
||||
#include "ng_prune.h"
|
||||
#include "ue2common.h"
|
||||
@@ -61,25 +60,6 @@ using boost::make_assoc_property_map;
|
||||
|
||||
namespace ue2 {
|
||||
|
||||
depth maxDistFromInit(const NFAVertexDepth &vd) {
|
||||
if (vd.fromStart.max.is_unreachable()) {
|
||||
return vd.fromStartDotStar.max;
|
||||
} else if (vd.fromStartDotStar.max.is_unreachable()) {
|
||||
return vd.fromStart.max;
|
||||
} else {
|
||||
return max(vd.fromStartDotStar.max, vd.fromStart.max);
|
||||
}
|
||||
}
|
||||
|
||||
depth maxDistFromStartOfData(const NFAVertexDepth &vd) {
|
||||
if (vd.fromStartDotStar.max.is_reachable()) {
|
||||
/* the irrepressible nature of floating literals cannot be contained */
|
||||
return depth::infinity();
|
||||
} else {
|
||||
return vd.fromStart.max;
|
||||
}
|
||||
}
|
||||
|
||||
NFAVertex getSoleDestVertex(const NGHolder &g, NFAVertex a) {
|
||||
assert(a != NGHolder::null_vertex());
|
||||
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#ifndef NG_UTIL_H
|
||||
#define NG_UTIL_H
|
||||
|
||||
#include "ng_depth.h"
|
||||
#include "ng_holder.h"
|
||||
#include "ue2common.h"
|
||||
#include "util/flat_containers.h"
|
||||
@@ -40,6 +41,7 @@
|
||||
|
||||
#include <boost/graph/depth_first_search.hpp> // for default_dfs_visitor
|
||||
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
@@ -47,13 +49,29 @@
|
||||
namespace ue2 {
|
||||
|
||||
struct Grey;
|
||||
struct NFAVertexDepth;
|
||||
struct ue2_literal;
|
||||
class depth;
|
||||
class ReportManager;
|
||||
|
||||
depth maxDistFromInit(const NFAVertexDepth &d);
|
||||
depth maxDistFromStartOfData(const NFAVertexDepth &d);
|
||||
template<class VertexDepth>
|
||||
depth maxDistFromInit(const VertexDepth &vd) {
|
||||
if (vd.fromStart.max.is_unreachable()) {
|
||||
return vd.fromStartDotStar.max;
|
||||
} else if (vd.fromStartDotStar.max.is_unreachable()) {
|
||||
return vd.fromStart.max;
|
||||
} else {
|
||||
return std::max(vd.fromStartDotStar.max, vd.fromStart.max);
|
||||
}
|
||||
}
|
||||
|
||||
template<class VertexDepth>
|
||||
depth maxDistFromStartOfData(const VertexDepth &vd) {
|
||||
if (vd.fromStartDotStar.max.is_reachable()) {
|
||||
/* the irrepressible nature of floating literals cannot be contained */
|
||||
return depth::infinity();
|
||||
} else {
|
||||
return vd.fromStart.max;
|
||||
}
|
||||
}
|
||||
|
||||
/** True if the given vertex is a dot (reachable on any character). */
|
||||
template<class GraphT>
|
||||
|
@@ -170,7 +170,7 @@ bool shortcutLiteral(NG &ng, const ParsedExpression &pe) {
|
||||
|
||||
// XXX: don't shortcut literals with extended params (yet)
|
||||
if (expr.min_offset || expr.max_offset != MAX_OFFSET || expr.min_length ||
|
||||
expr.edit_distance) {
|
||||
expr.edit_distance || expr.hamm_distance) {
|
||||
DEBUG_PRINTF("extended params not allowed\n");
|
||||
return false;
|
||||
}
|
||||
|
@@ -27,154 +27,16 @@
|
||||
*/
|
||||
|
||||
#include "cpuid_flags.h"
|
||||
#include "cpuid_inline.h"
|
||||
#include "ue2common.h"
|
||||
#include "hs_compile.h" // for HS_MODE_ flags
|
||||
#include "hs_internal.h"
|
||||
#include "util/arch.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
#if !defined(_WIN32) && !defined(CPUID_H_)
|
||||
#include <cpuid.h>
|
||||
#endif
|
||||
|
||||
// ECX
|
||||
#define SSE3 (1 << 0)
|
||||
#define SSSE3 (1 << 9)
|
||||
#define SSE4_1 (1 << 19)
|
||||
#define SSE4_2 (1 << 20)
|
||||
#define POPCNT (1 << 23)
|
||||
#define XSAVE (1 << 27)
|
||||
#define AVX (1 << 28)
|
||||
|
||||
// EDX
|
||||
#define FXSAVE (1 << 24)
|
||||
#define SSE (1 << 25)
|
||||
#define SSE2 (1 << 26)
|
||||
#define HTT (1 << 28)
|
||||
|
||||
// Structured Extended Feature Flags Enumeration Leaf ECX values
|
||||
#define BMI (1 << 3)
|
||||
#define AVX2 (1 << 5)
|
||||
#define BMI2 (1 << 8)
|
||||
|
||||
// Structured Extended Feature Flags Enumeration Leaf EBX values
|
||||
#define AVX512F (1 << 16)
|
||||
#define AVX512BW (1 << 30)
|
||||
|
||||
// Extended Control Register 0 (XCR0) values
|
||||
#define XCR0_SSE (1 << 1)
|
||||
#define XCR0_AVX (1 << 2)
|
||||
#define XCR0_OPMASK (1 << 5) // k-regs
|
||||
#define XCR0_ZMM_Hi256 (1 << 6) // upper 256 bits of ZMM0-ZMM15
|
||||
#define XCR0_Hi16_ZMM (1 << 7) // ZMM16-ZMM31
|
||||
|
||||
#define XCR0_AVX512 (XCR0_OPMASK | XCR0_ZMM_Hi256 | XCR0_Hi16_ZMM)
|
||||
|
||||
static __inline
|
||||
void cpuid(unsigned int op, unsigned int leaf, unsigned int *eax,
|
||||
unsigned int *ebx, unsigned int *ecx, unsigned int *edx) {
|
||||
#ifndef _WIN32
|
||||
__cpuid_count(op, leaf, *eax, *ebx, *ecx, *edx);
|
||||
#else
|
||||
unsigned int a[4];
|
||||
__cpuidex(a, op, leaf);
|
||||
*eax = a[0];
|
||||
*ebx = a[1];
|
||||
*ecx = a[2];
|
||||
*edx = a[3];
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
u64a xgetbv(u32 op) {
|
||||
#if defined(_WIN32) || defined(__INTEL_COMPILER)
|
||||
return _xgetbv(op);
|
||||
#else
|
||||
u32 a, d;
|
||||
__asm__ volatile (
|
||||
"xgetbv\n"
|
||||
: "=a"(a),
|
||||
"=d"(d)
|
||||
: "c"(op));
|
||||
return ((u64a)d << 32) + a;
|
||||
#endif
|
||||
}
|
||||
|
||||
int check_avx2(void) {
|
||||
#if defined(__INTEL_COMPILER)
|
||||
return _may_i_use_cpu_feature(_FEATURE_AVX2);
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
/* check AVX is supported and XGETBV is enabled by OS */
|
||||
if ((ecx & (AVX | XSAVE)) != (AVX | XSAVE)) {
|
||||
DEBUG_PRINTF("AVX and XSAVE not supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check that SSE and AVX registers are enabled by OS */
|
||||
u64a xcr0 = xgetbv(0);
|
||||
if ((xcr0 & (XCR0_SSE | XCR0_AVX)) != (XCR0_SSE | XCR0_AVX)) {
|
||||
DEBUG_PRINTF("SSE and AVX registers not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ECX and EDX contain capability flags */
|
||||
ecx = 0;
|
||||
cpuid(7, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (ebx & AVX2) {
|
||||
DEBUG_PRINTF("AVX2 enabled\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
int check_avx512(void) {
|
||||
/*
|
||||
* For our purposes, having avx512 really means "can we use AVX512BW?"
|
||||
*/
|
||||
#if defined(__INTEL_COMPILER)
|
||||
return _may_i_use_cpu_feature(_FEATURE_AVX512BW | _FEATURE_AVX512VL);
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
/* check XSAVE is enabled by OS */
|
||||
if (!(ecx & XSAVE)) {
|
||||
DEBUG_PRINTF("AVX and XSAVE not supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check that AVX 512 registers are enabled by OS */
|
||||
u64a xcr0 = xgetbv(0);
|
||||
if ((xcr0 & XCR0_AVX512) != XCR0_AVX512) {
|
||||
DEBUG_PRINTF("AVX512 registers not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ECX and EDX contain capability flags */
|
||||
ecx = 0;
|
||||
cpuid(7, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (!(ebx & AVX512F)) {
|
||||
DEBUG_PRINTF("AVX512F (AVX512 Foundation) instructions not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ebx & AVX512BW) {
|
||||
DEBUG_PRINTF("AVX512BW instructions enabled\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
u64a cpuid_flags(void) {
|
||||
u64a cap = 0;
|
||||
|
||||
@@ -200,24 +62,6 @@ u64a cpuid_flags(void) {
|
||||
return cap;
|
||||
}
|
||||
|
||||
int check_ssse3(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & SSSE3);
|
||||
}
|
||||
|
||||
int check_sse42(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & SSE4_2);
|
||||
}
|
||||
|
||||
int check_popcnt(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & POPCNT);
|
||||
}
|
||||
|
||||
struct family_id {
|
||||
u32 full_family;
|
||||
u32 full_model;
|
||||
|
@@ -31,6 +31,12 @@
|
||||
|
||||
#include "ue2common.h"
|
||||
|
||||
#if !defined(_WIN32) && !defined(CPUID_H_)
|
||||
#include <cpuid.h>
|
||||
/* system header doesn't have a header guard */
|
||||
#define CPUID_H_
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
@@ -41,12 +47,6 @@ u64a cpuid_flags(void);
|
||||
|
||||
u32 cpuid_tune(void);
|
||||
|
||||
int check_avx512(void);
|
||||
int check_avx2(void);
|
||||
int check_ssse3(void);
|
||||
int check_sse42(void);
|
||||
int check_popcnt(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
214
src/util/cpuid_inline.h
Normal file
214
src/util/cpuid_inline.h
Normal file
@@ -0,0 +1,214 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef CPUID_INLINE_H_
|
||||
#define CPUID_INLINE_H_
|
||||
|
||||
#include "ue2common.h"
|
||||
#include "cpuid_flags.h"
|
||||
|
||||
#if !defined(_WIN32) && !defined(CPUID_H_)
|
||||
#include <cpuid.h>
|
||||
/* system header doesn't have a header guard */
|
||||
#define CPUID_H_
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
static inline
|
||||
void cpuid(unsigned int op, unsigned int leaf, unsigned int *eax,
|
||||
unsigned int *ebx, unsigned int *ecx, unsigned int *edx) {
|
||||
#ifndef _WIN32
|
||||
__cpuid_count(op, leaf, *eax, *ebx, *ecx, *edx);
|
||||
#else
|
||||
int a[4];
|
||||
__cpuidex(a, op, leaf);
|
||||
*eax = a[0];
|
||||
*ebx = a[1];
|
||||
*ecx = a[2];
|
||||
*edx = a[3];
|
||||
#endif
|
||||
}
|
||||
|
||||
// ECX
|
||||
#define CPUID_SSE3 (1 << 0)
|
||||
#define CPUID_SSSE3 (1 << 9)
|
||||
#define CPUID_SSE4_1 (1 << 19)
|
||||
#define CPUID_SSE4_2 (1 << 20)
|
||||
#define CPUID_POPCNT (1 << 23)
|
||||
#define CPUID_XSAVE (1 << 27)
|
||||
#define CPUID_AVX (1 << 28)
|
||||
|
||||
// EDX
|
||||
#define CPUID_FXSAVE (1 << 24)
|
||||
#define CPUID_SSE (1 << 25)
|
||||
#define CPUID_SSE2 (1 << 26)
|
||||
#define CPUID_HTT (1 << 28)
|
||||
|
||||
// Structured Extended Feature Flags Enumeration Leaf ECX values
|
||||
#define CPUID_BMI (1 << 3)
|
||||
#define CPUID_AVX2 (1 << 5)
|
||||
#define CPUID_BMI2 (1 << 8)
|
||||
|
||||
// Structured Extended Feature Flags Enumeration Leaf EBX values
|
||||
#define CPUID_AVX512F (1 << 16)
|
||||
#define CPUID_AVX512BW (1 << 30)
|
||||
|
||||
// Extended Control Register 0 (XCR0) values
|
||||
#define CPUID_XCR0_SSE (1 << 1)
|
||||
#define CPUID_XCR0_AVX (1 << 2)
|
||||
#define CPUID_XCR0_OPMASK (1 << 5) // k-regs
|
||||
#define CPUID_XCR0_ZMM_Hi256 (1 << 6) // upper 256 bits of ZMM0-ZMM15
|
||||
#define CPUID_XCR0_Hi16_ZMM (1 << 7) // ZMM16-ZMM31
|
||||
|
||||
#define CPUID_XCR0_AVX512 \
|
||||
(CPUID_XCR0_OPMASK | CPUID_XCR0_ZMM_Hi256 | CPUID_XCR0_Hi16_ZMM)
|
||||
|
||||
static inline
|
||||
u64a xgetbv(u32 op) {
|
||||
#if defined(_WIN32) || defined(__INTEL_COMPILER)
|
||||
return _xgetbv(op);
|
||||
#else
|
||||
u32 a, d;
|
||||
__asm__ volatile (
|
||||
"xgetbv\n"
|
||||
: "=a"(a),
|
||||
"=d"(d)
|
||||
: "c"(op));
|
||||
return ((u64a)d << 32) + a;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
int check_avx2(void) {
|
||||
#if defined(__INTEL_COMPILER)
|
||||
return _may_i_use_cpu_feature(_FEATURE_AVX2);
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
/* check AVX is supported and XGETBV is enabled by OS */
|
||||
if ((ecx & (CPUID_AVX | CPUID_XSAVE)) != (CPUID_AVX | CPUID_XSAVE)) {
|
||||
DEBUG_PRINTF("AVX and XSAVE not supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check that SSE and AVX registers are enabled by OS */
|
||||
u64a xcr0 = xgetbv(0);
|
||||
if ((xcr0 & (CPUID_XCR0_SSE | CPUID_XCR0_AVX)) !=
|
||||
(CPUID_XCR0_SSE | CPUID_XCR0_AVX)) {
|
||||
DEBUG_PRINTF("SSE and AVX registers not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ECX and EDX contain capability flags */
|
||||
ecx = 0;
|
||||
cpuid(7, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (ebx & CPUID_AVX2) {
|
||||
DEBUG_PRINTF("AVX2 enabled\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
int check_avx512(void) {
|
||||
/*
|
||||
* For our purposes, having avx512 really means "can we use AVX512BW?"
|
||||
*/
|
||||
#if defined(__INTEL_COMPILER)
|
||||
return _may_i_use_cpu_feature(_FEATURE_AVX512BW | _FEATURE_AVX512VL);
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
/* check XSAVE is enabled by OS */
|
||||
if (!(ecx & CPUID_XSAVE)) {
|
||||
DEBUG_PRINTF("AVX and XSAVE not supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* check that AVX 512 registers are enabled by OS */
|
||||
u64a xcr0 = xgetbv(0);
|
||||
if ((xcr0 & CPUID_XCR0_AVX512) != CPUID_XCR0_AVX512) {
|
||||
DEBUG_PRINTF("AVX512 registers not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ECX and EDX contain capability flags */
|
||||
ecx = 0;
|
||||
cpuid(7, 0, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
if (!(ebx & CPUID_AVX512F)) {
|
||||
DEBUG_PRINTF("AVX512F (AVX512 Foundation) instructions not enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ebx & CPUID_AVX512BW) {
|
||||
DEBUG_PRINTF("AVX512BW instructions enabled\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
int check_ssse3(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & CPUID_SSSE3);
|
||||
}
|
||||
|
||||
static inline
|
||||
int check_sse42(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & CPUID_SSE4_2);
|
||||
}
|
||||
|
||||
static inline
|
||||
int check_popcnt(void) {
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
cpuid(1, 0, &eax, &ebx, &ecx, &edx);
|
||||
return !!(ecx & CPUID_POPCNT);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* CPUID_INLINE_H_ */
|
@@ -38,6 +38,9 @@ SET(hsbench_SOURCES
|
||||
huge.cpp
|
||||
huge.h
|
||||
main.cpp
|
||||
sqldb.cpp
|
||||
sqldb.h
|
||||
sqldb_bind.h
|
||||
thread_barrier.h
|
||||
timer.h
|
||||
)
|
||||
|
@@ -42,4 +42,9 @@ extern bool forceEditDistance;
|
||||
extern unsigned editDistance;
|
||||
extern bool printCompressSize;
|
||||
|
||||
struct SqlFailure {
|
||||
explicit SqlFailure(const std::string &s) : message(s) {}
|
||||
std::string message;
|
||||
};
|
||||
|
||||
#endif // COMMON_H
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#include "expressions.h"
|
||||
#include "heapstats.h"
|
||||
#include "huge.h"
|
||||
#include "sqldb.h"
|
||||
#include "timer.h"
|
||||
|
||||
#include "database.h"
|
||||
@@ -113,7 +114,8 @@ int onMatchEcho(unsigned int id, unsigned long long, unsigned long long to,
|
||||
return 0;
|
||||
}
|
||||
|
||||
EngineHyperscan::EngineHyperscan(hs_database_t *db_in) : db(db_in) {
|
||||
EngineHyperscan::EngineHyperscan(hs_database_t *db_in, CompileStats cs)
|
||||
: db(db_in), compile_stats(std::move(cs)) {
|
||||
assert(db);
|
||||
}
|
||||
|
||||
@@ -234,6 +236,43 @@ void EngineHyperscan::streamCompressExpand(EngineStream &stream,
|
||||
}
|
||||
}
|
||||
|
||||
void EngineHyperscan::printStats() const {
|
||||
// Output summary information.
|
||||
if (!compile_stats.sigs_name.empty()) {
|
||||
printf("Signature set: %s\n", compile_stats.sigs_name.c_str());
|
||||
}
|
||||
printf("Signatures: %s\n", compile_stats.signatures.c_str());
|
||||
printf("Hyperscan info: %s\n", compile_stats.db_info.c_str());
|
||||
printf("Expression count: %'zu\n", compile_stats.expressionCount);
|
||||
printf("Bytecode size: %'zu bytes\n", compile_stats.compiledSize);
|
||||
printf("Database CRC: 0x%x\n", compile_stats.crc32);
|
||||
if (compile_stats.streaming) {
|
||||
printf("Stream state size: %'zu bytes\n", compile_stats.streamSize);
|
||||
}
|
||||
printf("Scratch size: %'zu bytes\n", compile_stats.scratchSize);
|
||||
printf("Compile time: %'0.3Lf seconds\n", compile_stats.compileSecs);
|
||||
printf("Peak heap usage: %'u bytes\n", compile_stats.peakMemorySize);
|
||||
}
|
||||
|
||||
void EngineHyperscan::sqlStats(SqlDB &sqldb) const {
|
||||
ostringstream crc;
|
||||
crc << "0x" << hex << compile_stats.crc32;
|
||||
|
||||
static const std::string Q =
|
||||
"INSERT INTO Compile ("
|
||||
"sigsName, signatures, dbInfo, exprCount, dbSize, crc, streaming,"
|
||||
"streamSize, scratchSize, compileSecs, peakMemory) "
|
||||
"VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)";
|
||||
|
||||
sqldb.insert_all(Q, compile_stats.sigs_name, compile_stats.signatures,
|
||||
compile_stats.db_info, compile_stats.expressionCount,
|
||||
compile_stats.compiledSize, crc.str(),
|
||||
compile_stats.streaming ? "TRUE" : "FALSE",
|
||||
compile_stats.streamSize, compile_stats.scratchSize,
|
||||
compile_stats.compileSecs, compile_stats.peakMemorySize);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
unsigned makeModeFlags(ScanMode scan_mode) {
|
||||
switch (scan_mode) {
|
||||
@@ -281,7 +320,8 @@ string dbFilename(const std::string &name, unsigned mode) {
|
||||
|
||||
std::unique_ptr<EngineHyperscan>
|
||||
buildEngineHyperscan(const ExpressionMap &expressions, ScanMode scan_mode,
|
||||
const std::string &name, UNUSED const ue2::Grey &grey) {
|
||||
const std::string &name, const std::string &sigs_name,
|
||||
UNUSED const ue2::Grey &grey) {
|
||||
if (expressions.empty()) {
|
||||
assert(0);
|
||||
return nullptr;
|
||||
@@ -292,7 +332,6 @@ buildEngineHyperscan(const ExpressionMap &expressions, ScanMode scan_mode,
|
||||
size_t streamSize = 0;
|
||||
size_t scratchSize = 0;
|
||||
unsigned int peakMemorySize = 0;
|
||||
unsigned int crc = 0;
|
||||
std::string db_info;
|
||||
|
||||
unsigned int mode = makeModeFlags(scan_mode);
|
||||
@@ -393,8 +432,6 @@ buildEngineHyperscan(const ExpressionMap &expressions, ScanMode scan_mode,
|
||||
}
|
||||
assert(compiledSize > 0);
|
||||
|
||||
crc = db->crc32;
|
||||
|
||||
if (saveDatabases) {
|
||||
saveDatabase(db, dbFilename(name, mode).c_str());
|
||||
}
|
||||
@@ -431,18 +468,24 @@ buildEngineHyperscan(const ExpressionMap &expressions, ScanMode scan_mode,
|
||||
}
|
||||
hs_free_scratch(scratch);
|
||||
|
||||
// Output summary information.
|
||||
printf("Signatures: %s\n", name.c_str());
|
||||
printf("Hyperscan info: %s\n", db_info.c_str());
|
||||
printf("Expression count: %'zu\n", expressions.size());
|
||||
printf("Bytecode size: %'zu bytes\n", compiledSize);
|
||||
printf("Database CRC: 0x%x\n", crc);
|
||||
if (mode & HS_MODE_STREAM) {
|
||||
printf("Stream state size: %'zu bytes\n", streamSize);
|
||||
// Collect summary information.
|
||||
CompileStats cs;
|
||||
cs.sigs_name = sigs_name;
|
||||
if (!sigs_name.empty()) {
|
||||
const auto pos = name.find_last_of('/');
|
||||
cs.signatures = name.substr(pos + 1);
|
||||
} else {
|
||||
cs.signatures = name;
|
||||
}
|
||||
printf("Scratch size: %'zu bytes\n", scratchSize);
|
||||
printf("Compile time: %'0.3Lf seconds\n", compileSecs);
|
||||
printf("Peak heap usage: %'u bytes\n", peakMemorySize);
|
||||
cs.db_info = db_info;
|
||||
cs.expressionCount = expressions.size();
|
||||
cs.compiledSize = compiledSize;
|
||||
cs.crc32 = db->crc32;
|
||||
cs.streaming = mode & HS_MODE_STREAM;
|
||||
cs.streamSize = streamSize;
|
||||
cs.scratchSize = scratchSize;
|
||||
cs.compileSecs = compileSecs;
|
||||
cs.peakMemorySize = peakMemorySize;
|
||||
|
||||
return ue2::make_unique<EngineHyperscan>(db);
|
||||
return ue2::make_unique<EngineHyperscan>(db, std::move(cs));
|
||||
}
|
||||
|
@@ -31,9 +31,11 @@
|
||||
|
||||
#include "expressions.h"
|
||||
#include "common.h"
|
||||
#include "sqldb.h"
|
||||
#include "hs_runtime.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/** Structure for the result of a single complete scan. */
|
||||
@@ -42,6 +44,21 @@ struct ResultEntry {
|
||||
unsigned int matches = 0; //!< Count of matches found.
|
||||
};
|
||||
|
||||
/** Infomation about the database compile */
|
||||
struct CompileStats {
|
||||
std::string sigs_name;
|
||||
std::string signatures;
|
||||
std::string db_info;
|
||||
size_t expressionCount = 0;
|
||||
size_t compiledSize = 0;
|
||||
uint32_t crc32 = 0;
|
||||
bool streaming;
|
||||
size_t streamSize = 0;
|
||||
size_t scratchSize = 0;
|
||||
long double compileSecs = 0;
|
||||
unsigned int peakMemorySize = 0;
|
||||
};
|
||||
|
||||
/** Engine context which is allocated on a per-thread basis. */
|
||||
class EngineContext {
|
||||
public:
|
||||
@@ -62,7 +79,7 @@ public:
|
||||
/** Hyperscan Engine for scanning data. */
|
||||
class EngineHyperscan {
|
||||
public:
|
||||
explicit EngineHyperscan(hs_database_t *db);
|
||||
explicit EngineHyperscan(hs_database_t *db, CompileStats cs);
|
||||
~EngineHyperscan();
|
||||
|
||||
std::unique_ptr<EngineContext> makeContext() const;
|
||||
@@ -86,8 +103,13 @@ public:
|
||||
void streamScan(EngineStream &stream, const char *data, unsigned int len,
|
||||
unsigned int id, ResultEntry &result) const;
|
||||
|
||||
void printStats() const;
|
||||
|
||||
void sqlStats(SqlDB &db) const;
|
||||
|
||||
private:
|
||||
hs_database_t *db;
|
||||
CompileStats compile_stats;
|
||||
};
|
||||
|
||||
namespace ue2 {
|
||||
@@ -96,6 +118,7 @@ struct Grey;
|
||||
|
||||
std::unique_ptr<EngineHyperscan>
|
||||
buildEngineHyperscan(const ExpressionMap &expressions, ScanMode scan_mode,
|
||||
const std::string &name, const ue2::Grey &grey);
|
||||
const std::string &name, const std::string &sigs_name,
|
||||
const ue2::Grey &grey);
|
||||
|
||||
#endif // ENGINEHYPERSCAN_H
|
||||
|
@@ -32,6 +32,7 @@
|
||||
#include "data_corpus.h"
|
||||
#include "engine_hyperscan.h"
|
||||
#include "expressions.h"
|
||||
#include "sqldb.h"
|
||||
#include "thread_barrier.h"
|
||||
#include "timer.h"
|
||||
#include "util/expression_path.h"
|
||||
@@ -89,10 +90,14 @@ ScanMode scan_mode = ScanMode::STREAMING;
|
||||
unsigned repeats = 20;
|
||||
string exprPath("");
|
||||
string corpusFile("");
|
||||
string sqloutFile("");
|
||||
string sigName(""); // info only
|
||||
vector<unsigned int> threadCores;
|
||||
Timer totalTimer;
|
||||
double totalSecs = 0;
|
||||
|
||||
SqlDB out_db;
|
||||
|
||||
typedef void (*thread_func_t)(void *context);
|
||||
|
||||
class ThreadContext : boost::noncopyable {
|
||||
@@ -188,6 +193,8 @@ void usage(const char *error) {
|
||||
printf("\n");
|
||||
printf(" --per-scan Display per-scan Mbit/sec results.\n");
|
||||
printf(" --echo-matches Display all matches that occur during scan.\n");
|
||||
printf(" --sql-out FILE Output sqlite db.\n");
|
||||
printf(" -S NAME Signature set name (for sqlite db).\n");
|
||||
printf("\n\n");
|
||||
|
||||
if (error) {
|
||||
@@ -207,28 +214,30 @@ struct BenchmarkSigs {
|
||||
static
|
||||
void processArgs(int argc, char *argv[], vector<BenchmarkSigs> &sigSets,
|
||||
UNUSED unique_ptr<Grey> &grey) {
|
||||
const char options[] = "-b:c:Cd:e:E:G:hi:n:No:p:sVw:z:"
|
||||
const char options[] = "-b:c:Cd:e:E:G:hi:n:No:p:sS:Vw:z:"
|
||||
#ifdef HAVE_DECL_PTHREAD_SETAFFINITY_NP
|
||||
"T:" // add the thread flag
|
||||
#endif
|
||||
;
|
||||
int in_sigfile = 0;
|
||||
int do_per_scan = 0;
|
||||
int do_echo_matches = 0;
|
||||
int do_compress = 0;
|
||||
int do_compress_size = 0;
|
||||
int do_echo_matches = 0;
|
||||
int do_sql_output = 0;
|
||||
int option_index = 0;
|
||||
vector<string> sigFiles;
|
||||
|
||||
static struct option longopts[] = {
|
||||
{"per-scan", 0, &do_per_scan, 1},
|
||||
{"echo-matches", 0, &do_echo_matches, 1},
|
||||
{"compress-stream", 0, &do_compress, 1},
|
||||
{"print-compress-size", 0, &do_compress_size, 1},
|
||||
{"per-scan", no_argument, &do_per_scan, 1},
|
||||
{"echo-matches", no_argument, &do_echo_matches, 1},
|
||||
{"compress-stream", no_argument, &do_compress, 1},
|
||||
{"sql-out", required_argument, &do_sql_output, 1},
|
||||
{nullptr, 0, nullptr, 0}
|
||||
};
|
||||
|
||||
for (;;) {
|
||||
int c = getopt_long(argc, argv, options, longopts, nullptr);
|
||||
int c = getopt_long(argc, argv, options, longopts, &option_index);
|
||||
if (c < 0) {
|
||||
break;
|
||||
}
|
||||
@@ -294,6 +303,9 @@ void processArgs(int argc, char *argv[], vector<BenchmarkSigs> &sigSets,
|
||||
case 'V':
|
||||
scan_mode = ScanMode::VECTORED;
|
||||
break;
|
||||
case 'S':
|
||||
sigName.assign(optarg);
|
||||
break;
|
||||
#ifdef HAVE_DECL_PTHREAD_SETAFFINITY_NP
|
||||
case 'T':
|
||||
if (!strToList(optarg, threadCores)) {
|
||||
@@ -321,14 +333,19 @@ void processArgs(int argc, char *argv[], vector<BenchmarkSigs> &sigSets,
|
||||
saveDatabases = true;
|
||||
serializePath = optarg;
|
||||
break;
|
||||
case 0:
|
||||
if (do_sql_output) {
|
||||
sqloutFile.assign(optarg);
|
||||
do_sql_output = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (in_sigfile) {
|
||||
sigFiles.push_back(optarg);
|
||||
in_sigfile = 2;
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
break;
|
||||
/* fallthrough */
|
||||
default:
|
||||
usage("Unrecognised command line argument.");
|
||||
exit(1);
|
||||
@@ -726,6 +743,67 @@ void displayResults(const vector<unique_ptr<ThreadContext>> &threads,
|
||||
}
|
||||
}
|
||||
|
||||
/** Dump per-scan throughput data to sql. */
|
||||
static
|
||||
void sqlPerScanResults(const vector<unique_ptr<ThreadContext>> &threads,
|
||||
u64a bytesPerRun, u64a scan_id) {
|
||||
static const std::string Q =
|
||||
"INSERT INTO ScanResults (scan_id, thread, scan, throughput) "
|
||||
"VALUES (?1, ?2, ?3, ?4)";
|
||||
|
||||
for (const auto &t : threads) {
|
||||
const auto &results = t->results;
|
||||
for (size_t j = 0; j != results.size(); j++) {
|
||||
const auto &r = results[j];
|
||||
double mbps = calc_mbps(r.seconds, bytesPerRun);
|
||||
out_db.insert_all(Q, scan_id, t->num, j, mbps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Dump benchmark results to sql. */
|
||||
static
|
||||
void sqlResults(const vector<unique_ptr<ThreadContext>> &threads,
|
||||
const vector<DataBlock> &corpus_blocks) {
|
||||
u64a bytesPerRun = byte_size(corpus_blocks);
|
||||
u64a matchesPerRun = threads[0]->results[0].matches;
|
||||
|
||||
u64a scan_id = out_db.lastRowId();
|
||||
|
||||
// Sanity check: all of our results should have the same match count.
|
||||
for (const auto &t : threads) {
|
||||
if (!all_of(begin(t->results), end(t->results),
|
||||
[&matchesPerRun](const ResultEntry &e) {
|
||||
return e.matches == matchesPerRun;
|
||||
})) {
|
||||
printf("\nWARNING: PER-SCAN MATCH COUNTS ARE INCONSISTENT!\n\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
u64a totalBytes = bytesPerRun * repeats * threads.size();
|
||||
double matchRate = ((double)matchesPerRun * 1024) / bytesPerRun;
|
||||
|
||||
const auto pos = corpusFile.find_last_of('/');
|
||||
const auto corpus = corpusFile.substr(pos + 1);
|
||||
|
||||
static const std::string Q =
|
||||
"INSERT INTO Scan (scan_id, corpusFile, totalSecs, "
|
||||
"bytesPerRun, blockSize, blockCount, totalBytes, "
|
||||
"totalBlocks, matchesPerRun, matchRate, overallTput) "
|
||||
"VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)";
|
||||
|
||||
out_db.insert_all(
|
||||
Q, scan_id, corpus, totalSecs, bytesPerRun, corpus_blocks.size(),
|
||||
scan_mode == ScanMode::BLOCK ? 1 : count_streams(corpus_blocks),
|
||||
totalBytes, corpus_blocks.size() * repeats * threads.size(),
|
||||
matchesPerRun, matchRate, calc_mbps(totalSecs, totalBytes));
|
||||
|
||||
if (display_per_scan) {
|
||||
sqlPerScanResults(threads, bytesPerRun, scan_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a thread context for this scanning mode.
|
||||
*
|
||||
@@ -798,10 +876,15 @@ void runBenchmark(const EngineHyperscan &db,
|
||||
t->join();
|
||||
}
|
||||
|
||||
// Display global results.
|
||||
displayResults(threads, corpus_blocks);
|
||||
if (sqloutFile.empty()) {
|
||||
// Display global results.
|
||||
displayResults(threads, corpus_blocks);
|
||||
} else {
|
||||
// write to sqlite file
|
||||
sqlResults(threads, corpus_blocks);
|
||||
out_db.exec("END");
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/** Main driver. */
|
||||
@@ -842,22 +925,39 @@ int main(int argc, char *argv[]) {
|
||||
printf("Corpus data error: %s\n", e.msg.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (const auto &s : sigSets) {
|
||||
auto exprMap = limitToSignatures(exprMapTemplate, s.sigs);
|
||||
if (exprMap.empty()) {
|
||||
continue;
|
||||
try {
|
||||
if (!sqloutFile.empty()) {
|
||||
out_db.open(sqloutFile);
|
||||
}
|
||||
|
||||
auto engine = buildEngineHyperscan(exprMap, scan_mode, s.name, *grey);
|
||||
if (!engine) {
|
||||
printf("Error: expressions failed to compile.\n");
|
||||
exit(1);
|
||||
for (const auto &s : sigSets) {
|
||||
auto exprMap = limitToSignatures(exprMapTemplate, s.sigs);
|
||||
if (exprMap.empty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
auto engine = buildEngineHyperscan(exprMap, scan_mode, s.name,
|
||||
sigName, *grey);
|
||||
if (!engine) {
|
||||
printf("Error: expressions failed to compile.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (sqloutFile.empty()) {
|
||||
// Display global results.
|
||||
engine->printStats();
|
||||
printf("\n");
|
||||
|
||||
} else {
|
||||
out_db.exec("BEGIN");
|
||||
engine->sqlStats(out_db);
|
||||
}
|
||||
|
||||
runBenchmark(*engine, corpus_blocks);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
|
||||
runBenchmark(*engine, corpus_blocks);
|
||||
} catch (const SqlFailure &f) {
|
||||
cerr << f.message << '\n';
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
167
tools/hsbench/sqldb.cpp
Normal file
167
tools/hsbench/sqldb.cpp
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "sqldb.h"
|
||||
#include "ue2common.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace {
|
||||
|
||||
static
|
||||
sqlite3 *initDB(const string &filename) {
|
||||
sqlite3 *db;
|
||||
int status;
|
||||
status = sqlite3_open_v2(filename.c_str(), &db,
|
||||
SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, nullptr);
|
||||
|
||||
if (status != SQLITE_OK) {
|
||||
ostringstream oss;
|
||||
oss << "Unable to open database '" << filename
|
||||
<< "': " << sqlite3_errmsg(db);
|
||||
status = sqlite3_close(db);
|
||||
assert(status == SQLITE_OK);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
|
||||
// create tables
|
||||
static const string c("CREATE TABLE Compile ("
|
||||
"id INTEGER PRIMARY KEY,"
|
||||
"sigsName TEXT, "
|
||||
"signatures TEXT, "
|
||||
"dbInfo TEXT, "
|
||||
"exprCount INTEGER, "
|
||||
"dbSize INTEGER,"
|
||||
"crc TEXT, "
|
||||
"streaming TEXT, "
|
||||
"streamSize INTEGER, "
|
||||
"scratchSize INTEGER, "
|
||||
"compileSecs DOUBLE, "
|
||||
"peakMemory INTEGER"
|
||||
");");
|
||||
|
||||
static const string s("CREATE TABLE Scan (id INTEGER PRIMARY KEY,"
|
||||
"corpusFile TEXT, scan_id INTEGER, "
|
||||
"totalSecs DOUBLE, bytesPerRun INTEGER, "
|
||||
"blockSize INTEGER, blockCount INTEGER, "
|
||||
"totalBytes INTEGER, totalBlocks INTEGER, "
|
||||
"matchesPerRun INTEGER, "
|
||||
"matchRate DOUBLE, overallTput DOUBLE);");
|
||||
|
||||
static const string sr(
|
||||
"CREATE TABLE ScanResults ( id INTEGER PRIMARY KEY, "
|
||||
"scan_id INTEGER, thread INTEGER, scan INTEGER, throughput DOUBLE );");
|
||||
|
||||
static const string create_query = c + s + sr;
|
||||
|
||||
sqlite3_stmt *statement;
|
||||
const char *pzTail = create_query.c_str();
|
||||
|
||||
while (strlen(pzTail)) {
|
||||
status =
|
||||
sqlite3_prepare(db, pzTail, strlen(pzTail), &statement, &pzTail);
|
||||
if (status != SQLITE_OK) {
|
||||
goto fail;
|
||||
}
|
||||
status = sqlite3_step(statement);
|
||||
if (status != SQLITE_DONE && status != SQLITE_ROW) {
|
||||
goto fail;
|
||||
}
|
||||
status = sqlite3_finalize(statement);
|
||||
if (status != SQLITE_OK) {
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
return db;
|
||||
|
||||
fail:
|
||||
ostringstream oss;
|
||||
oss << "Unable to create tables: " << sqlite3_errmsg(db);
|
||||
status = sqlite3_close(db);
|
||||
assert(status == SQLITE_OK);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
} // namespace
|
||||
|
||||
SqlDB::~SqlDB() {
|
||||
if (db) {
|
||||
sqlite3_close(db);
|
||||
}
|
||||
db = nullptr;
|
||||
}
|
||||
|
||||
void SqlDB::open(const string &filename) {
|
||||
if (!ifstream(filename)) {
|
||||
// file doesn't exist, go set up some tables
|
||||
db = initDB(filename);
|
||||
} else {
|
||||
int status;
|
||||
status = sqlite3_open_v2(filename.c_str(), &db, SQLITE_OPEN_READWRITE,
|
||||
nullptr);
|
||||
|
||||
if (status != SQLITE_OK) {
|
||||
ostringstream oss;
|
||||
oss << "Unable to open database '" << filename
|
||||
<< "': " << sqlite3_errmsg(db);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
}
|
||||
|
||||
exec("PRAGMA synchronous = off;");
|
||||
exec("PRAGMA encoding = 'UTF-8';");
|
||||
}
|
||||
|
||||
void SqlDB::exec(const string &query) {
|
||||
assert(db);
|
||||
int status;
|
||||
status = sqlite3_exec(db, query.c_str(), nullptr, nullptr, nullptr);
|
||||
if (status != SQLITE_OK) {
|
||||
ostringstream oss;
|
||||
oss << "Unable to run sqlite query: " << sqlite3_errmsg(db);
|
||||
sqlite3_close(db);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
}
|
||||
|
||||
u64a SqlDB::lastRowId() {
|
||||
assert(db);
|
||||
return sqlite3_last_insert_rowid(db);
|
||||
}
|
86
tools/hsbench/sqldb.h
Normal file
86
tools/hsbench/sqldb.h
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef SQLDB_H_
|
||||
#define SQLDB_H_
|
||||
|
||||
#include "ue2common.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "sqldb_bind.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
class SqlDB {
|
||||
public:
|
||||
SqlDB() : db(nullptr) {};
|
||||
~SqlDB();
|
||||
void open(const std::string &filename);
|
||||
void exec(const std::string &query);
|
||||
u64a lastRowId();
|
||||
|
||||
template <typename... Args>
|
||||
void insert_all(const std::string &query, Args&&... args) {
|
||||
sqlite3_stmt *stmt;
|
||||
const char *tail;
|
||||
|
||||
int rc = sqlite3_prepare(db, query.c_str(), query.size(), &stmt, &tail);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::ostringstream oss;
|
||||
oss << "Unable to prepare query: " << sqlite3_errmsg(db);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
|
||||
// only one statement per function call
|
||||
assert(strlen(tail) == 0);
|
||||
|
||||
// perform templated binds to this statement
|
||||
ue2_sqlite::bind_args(stmt, 1, args...);
|
||||
|
||||
rc = sqlite3_step(stmt);
|
||||
if (rc != SQLITE_DONE) {
|
||||
std::ostringstream oss;
|
||||
oss << "Unable to run insert: " << sqlite3_errmsg(db);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
|
||||
rc = sqlite3_finalize(stmt);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::ostringstream oss;
|
||||
oss << "Unable to finalize statement: " << sqlite3_errmsg(db);
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
sqlite3 *db;
|
||||
};
|
||||
|
||||
#endif /* SQLDB_H_ */
|
90
tools/hsbench/sqldb_bind.h
Normal file
90
tools/hsbench/sqldb_bind.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef SQLDB_BIND_H_
|
||||
#define SQLDB_BIND_H_
|
||||
|
||||
#include "ue2common.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
namespace ue2_sqlite {
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const unsigned long &val) {
|
||||
return sqlite3_bind_int64(stmt, param, val);
|
||||
}
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const unsigned int &val) {
|
||||
return sqlite3_bind_int(stmt, param, val);
|
||||
}
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const u64a &val) {
|
||||
return sqlite3_bind_int64(stmt, param, val);
|
||||
}
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const double &val) {
|
||||
return sqlite3_bind_double(stmt, param, val);
|
||||
}
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const long double &val) {
|
||||
return sqlite3_bind_double(stmt, param, val);
|
||||
}
|
||||
|
||||
inline
|
||||
int bind_impl(sqlite3_stmt *stmt, int param, const std::string &val) {
|
||||
return sqlite3_bind_text(stmt, param, val.c_str(), val.size(),
|
||||
SQLITE_TRANSIENT);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void bind_args(sqlite3_stmt *stmt, int param, T obj) {
|
||||
int rc = bind_impl(stmt, param, obj);
|
||||
if (rc != SQLITE_OK) {
|
||||
std::ostringstream oss;
|
||||
oss << "SQL value bind failed for param #: " << param;
|
||||
throw SqlFailure(oss.str());
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T, typename... Args>
|
||||
void bind_args(sqlite3_stmt *stmt, int param, T obj, Args&&... args) {
|
||||
bind_args(stmt, param, obj);
|
||||
bind_args(stmt, param + 1, args...);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif /* SQLDB_BIND_H_ */
|
10
tools/hscheck/CMakeLists.txt
Normal file
10
tools/hscheck/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
# only set these after all tests are done
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
|
||||
|
||||
SET(hscheck_SOURCES
|
||||
main.cpp
|
||||
)
|
||||
add_executable(hscheck ${hscheck_SOURCES})
|
||||
target_link_libraries(hscheck hs expressionutil pthread)
|
||||
|
476
tools/hscheck/main.cpp
Normal file
476
tools/hscheck/main.cpp
Normal file
@@ -0,0 +1,476 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file
|
||||
* \brief hscheck: Tool to test regex compilation with Hyperscan.
|
||||
*
|
||||
* hscheck accepts a file of regular expressions in the form:
|
||||
* "ID:/regex/flags" and tests whether they can be compiled with Hyperscan,
|
||||
* reporting the error if compilation fails.
|
||||
*
|
||||
* For example, create the file "regex" containing:
|
||||
*
|
||||
* 1:/foo.*bar/s
|
||||
* 2:/hatstand|teakettle|badgerbrush/
|
||||
*
|
||||
* This can be checked with the following hscheck invocation:
|
||||
*
|
||||
* $ bin/hscheck -e regex
|
||||
*
|
||||
* Use "hscheck -h" for complete usage information.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ExpressionParser.h"
|
||||
#include "expressions.h"
|
||||
#include "string_util.h"
|
||||
#include "util/expression_path.h"
|
||||
#include "util/make_unique.h"
|
||||
|
||||
#include "grey.h"
|
||||
#include "hs_compile.h"
|
||||
#include "hs_internal.h"
|
||||
#include "ue2common.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <fstream>
|
||||
#include <mutex>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
#include <getopt.h>
|
||||
#include <boost/algorithm/string/trim.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace ue2;
|
||||
|
||||
namespace /* anonymous */ {
|
||||
|
||||
// are we in streaming mode? (default: yes)
|
||||
bool g_streaming = true;
|
||||
bool g_vectored = false;
|
||||
string g_exprPath("");
|
||||
string g_signatureFile("");
|
||||
bool g_allSignatures = false;
|
||||
bool g_forceEditDistance = false;
|
||||
bool build_sigs = false;
|
||||
unsigned int g_signature;
|
||||
unsigned int g_editDistance;
|
||||
unsigned int globalFlags = 0;
|
||||
unsigned int num_of_threads = 1;
|
||||
unsigned int countFailures = 0;
|
||||
|
||||
// Global greybox structure, used in non-release builds.
|
||||
unique_ptr<Grey> g_grey;
|
||||
|
||||
// Global expression map.
|
||||
ExpressionMap g_exprMap;
|
||||
|
||||
// Iterator pointing to next expression to process.
|
||||
ExpressionMap::const_iterator read_it;
|
||||
|
||||
// Iterator pointing to next expression to print results.
|
||||
ExpressionMap::const_iterator print_it;
|
||||
|
||||
// Mutex guarding access to read iterator.
|
||||
std::mutex lk_read;
|
||||
|
||||
// Mutex serialising access to output map and stdout.
|
||||
std::mutex lk_output;
|
||||
|
||||
// Possible values for pattern check results.
|
||||
enum ExprStatus {NOT_PROCESSED, SUCCESS, FAILURE};
|
||||
|
||||
// Map for storing results.
|
||||
map<unsigned int, pair<string, ExprStatus>> output;
|
||||
|
||||
} // namespace
|
||||
|
||||
static
|
||||
bool getNextExpressionId(ExpressionMap::const_iterator &it) {
|
||||
lock_guard<mutex> lock(lk_read);
|
||||
if (read_it != g_exprMap.end()) {
|
||||
it = read_it;
|
||||
++read_it;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// This function prints the Pattern IDs order
|
||||
// It creates the output for build sigs
|
||||
// Caller is required to hold lk_output when calling this function
|
||||
static
|
||||
void printExpressionId(const ExpressionMap &exprMap) {
|
||||
while (print_it != exprMap.end()) {
|
||||
unsigned int id = print_it->first;
|
||||
const string ®ex = print_it->second;
|
||||
const auto &result = output[id];
|
||||
if (result.second == NOT_PROCESSED) {
|
||||
break;
|
||||
}
|
||||
bool fail = result.second == FAILURE;
|
||||
if (!build_sigs) {
|
||||
if (fail) {
|
||||
cout << "FAIL (compile): " << id << ":" << regex << ": "
|
||||
<< result.first << endl;
|
||||
} else {
|
||||
cout << result.first << ' ' << id << ":" << regex << endl;
|
||||
}
|
||||
} else {
|
||||
if (fail) {
|
||||
cout << "# " << id << " # " << result.first << endl;
|
||||
} else {
|
||||
cout << id << endl;
|
||||
}
|
||||
}
|
||||
|
||||
++print_it;
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void recordFailure(const ExpressionMap &exprMap, unsigned int id,
|
||||
const string &err) {
|
||||
lock_guard<mutex> lock(lk_output);
|
||||
output[id].first = err;
|
||||
output[id].second = FAILURE;
|
||||
countFailures++;
|
||||
printExpressionId(exprMap);
|
||||
}
|
||||
|
||||
static
|
||||
void recordSuccess(const ExpressionMap &exprMap, unsigned int id) {
|
||||
lock_guard<mutex> lock(lk_output);
|
||||
output[id].first = "OK:";
|
||||
output[id].second = SUCCESS;
|
||||
printExpressionId(exprMap);
|
||||
}
|
||||
|
||||
static
|
||||
void checkExpression(UNUSED void *threadarg) {
|
||||
unsigned int mode = g_streaming ? HS_MODE_STREAM
|
||||
: g_vectored ? HS_MODE_VECTORED
|
||||
: HS_MODE_BLOCK;
|
||||
if (g_streaming) {
|
||||
// Use SOM mode, for permissiveness' sake.
|
||||
mode |= HS_MODE_SOM_HORIZON_LARGE;
|
||||
}
|
||||
|
||||
ExpressionMap::const_iterator it;
|
||||
while (getNextExpressionId(it)) {
|
||||
const string &line = it->second;
|
||||
|
||||
// Initial slash char is required, but unused.
|
||||
if (line.empty() || line[0] != '/') {
|
||||
recordFailure(g_exprMap, it->first,
|
||||
"Format required is \"ID:/REGEX/FLAGS\".");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Make a mutable copy and trim any whitespace on the right.
|
||||
string expr = line;
|
||||
boost::trim(expr);
|
||||
|
||||
size_t flagsStart = expr.find_last_of('/');
|
||||
if (flagsStart == string::npos || flagsStart == 0) {
|
||||
recordFailure(g_exprMap, it->first, "No trailing '/' char.");
|
||||
continue;
|
||||
}
|
||||
|
||||
string regex;
|
||||
unsigned int flags = 0;
|
||||
hs_expr_ext ext;
|
||||
if (!readExpression(expr, regex, &flags, &ext)) {
|
||||
recordFailure(g_exprMap, it->first, "Unsupported flag used.");
|
||||
continue;
|
||||
}
|
||||
|
||||
flags |= globalFlags;
|
||||
if (g_forceEditDistance) {
|
||||
ext.edit_distance = g_editDistance;
|
||||
ext.flags |= HS_EXT_FLAG_EDIT_DISTANCE;
|
||||
}
|
||||
|
||||
// Try and compile a database.
|
||||
const char *regexp = regex.c_str();
|
||||
const hs_expr_ext *extp = &ext;
|
||||
|
||||
hs_error_t err;
|
||||
hs_compile_error_t *compile_err;
|
||||
hs_database_t *db = nullptr;
|
||||
|
||||
#if !defined(RELEASE_BUILD)
|
||||
// This variant is available in non-release builds and allows us to
|
||||
// modify greybox settings.
|
||||
err = hs_compile_multi_int(®exp, &flags, nullptr, &extp, 1, mode,
|
||||
nullptr, &db, &compile_err, *g_grey);
|
||||
#else
|
||||
err = hs_compile_ext_multi(®exp, &flags, nullptr, &extp, 1, mode,
|
||||
nullptr, &db, &compile_err);
|
||||
#endif
|
||||
|
||||
if (err == HS_SUCCESS) {
|
||||
assert(db);
|
||||
recordSuccess(g_exprMap, it->first);
|
||||
hs_free_database(db);
|
||||
} else {
|
||||
assert(!db);
|
||||
assert(compile_err);
|
||||
recordFailure(g_exprMap, it->first, compile_err->message);
|
||||
hs_free_compile_error(compile_err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void usage() {
|
||||
cout << "Usage: hscheck [OPTIONS...]" << endl << endl
|
||||
<< " -e PATH Path to expression directory." << endl
|
||||
<< " -s FILE Signature file to use." << endl
|
||||
<< " -z NUM Signature ID to use." << endl
|
||||
<< " -E DISTANCE Force edit distance to DISTANCE for all patterns." << endl
|
||||
#ifndef RELEASE_BUILD
|
||||
<< " -G OVERRIDES Overrides for the grey." << endl
|
||||
#endif
|
||||
<< " -V Operate in vectored mode." << endl
|
||||
<< " -N Operate in block mode (default: streaming)." << endl
|
||||
<< " -L Pass HS_FLAG_SOM_LEFTMOST for all expressions (default: off)." << endl
|
||||
<< " -8 Force UTF8 mode on all patterns." << endl
|
||||
<< " -T NUM Run with NUM threads." << endl
|
||||
<< " -h Display this help." << endl
|
||||
<< " -B Build signature set." << endl
|
||||
<< endl;
|
||||
}
|
||||
|
||||
static
|
||||
void processArgs(int argc, char *argv[], UNUSED unique_ptr<Grey> &grey) {
|
||||
const char options[] = "e:E:s:z:hLNV8G:T:B";
|
||||
bool signatureSet = false;
|
||||
|
||||
for (;;) {
|
||||
int c = getopt_long(argc, argv, options, nullptr, nullptr);
|
||||
if (c < 0) {
|
||||
break;
|
||||
}
|
||||
switch (c) {
|
||||
case 'e':
|
||||
g_exprPath.assign(optarg);
|
||||
break;
|
||||
case 'h':
|
||||
usage();
|
||||
exit(0);
|
||||
break;
|
||||
case 's':
|
||||
g_signatureFile.assign(optarg);
|
||||
break;
|
||||
case 'E':
|
||||
if (!fromString(optarg, g_editDistance)) {
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
g_forceEditDistance = true;
|
||||
break;
|
||||
case 'z':
|
||||
if (!fromString(optarg, g_signature)) {
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
signatureSet = true;
|
||||
break;
|
||||
case '8':
|
||||
globalFlags |= HS_FLAG_UTF8;
|
||||
break;
|
||||
|
||||
#ifndef RELEASE_BUILD
|
||||
case 'G':
|
||||
applyGreyOverrides(grey.get(), string(optarg));
|
||||
break;
|
||||
#endif
|
||||
case 'L':
|
||||
globalFlags |= HS_FLAG_SOM_LEFTMOST;
|
||||
break;
|
||||
case 'N':
|
||||
g_streaming = false;
|
||||
break;
|
||||
case 'V':
|
||||
g_streaming = false;
|
||||
g_vectored = true;
|
||||
break;
|
||||
case 'T':
|
||||
num_of_threads = atoi(optarg);
|
||||
break;
|
||||
case 'B':
|
||||
build_sigs = true;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (g_exprPath.empty() && !g_signatureFile.empty()) {
|
||||
/* attempt to infer an expression directory */
|
||||
g_exprPath = inferExpressionPath(g_signatureFile);
|
||||
}
|
||||
|
||||
if (g_exprPath.empty()) {
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!isDir(g_exprPath) && isFile(g_exprPath)
|
||||
&& g_signatureFile.empty() && !signatureSet) {
|
||||
g_allSignatures = true;
|
||||
}
|
||||
|
||||
if (g_signatureFile.empty() && !signatureSet && !g_allSignatures) {
|
||||
usage();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void failLine(unsigned lineNum, const string &file,
|
||||
const string &line, const string &error) {
|
||||
cerr << "Parse error in file " << file
|
||||
<< " on line " << lineNum << ": " << error
|
||||
<< endl << "Line is: '" << line << "'" << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// load a list of signature IDs if Build_sigs is enabled
|
||||
// If a line is commented out, this function still loads the corresponding ID.
|
||||
// The commented out line should have the format #<space>id<space>#<comment>
|
||||
// It then prints out a signature file with the IDs that compile successfully.
|
||||
static
|
||||
void loadSignatureBuildSigs(const string &inFile,
|
||||
SignatureSet &signatures) {
|
||||
ifstream f(inFile.c_str());
|
||||
if (!f.good()) {
|
||||
cerr << "Can't open file: '" << inFile << "'" << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
unsigned lineNum = 0;
|
||||
string line;
|
||||
while (getline(f, line)) {
|
||||
lineNum++;
|
||||
unsigned id;
|
||||
// if line is empty, we can skip it
|
||||
if (line.empty()) {
|
||||
continue;
|
||||
}
|
||||
// if line is commented out, try to locate the ID
|
||||
// Line is usually in the form #<space>id<space>#<comment>
|
||||
if (line[0] == '#') {
|
||||
string temp;
|
||||
// skip the opening hash and see if there is a second
|
||||
size_t comment = line.find_first_of('#', 1);
|
||||
if (comment) {
|
||||
temp = line.substr(1, comment - 1);
|
||||
} else {
|
||||
temp = line.substr(1, line.size());
|
||||
}
|
||||
// cull any whitespace
|
||||
boost::trim(temp);
|
||||
|
||||
if (fromString(temp, id)) {
|
||||
signatures.push_back(id);
|
||||
} else {
|
||||
// couldn't be turned into an ID, dump to stdout
|
||||
cout << line << endl;
|
||||
}
|
||||
} else { // lines that don't begin with #
|
||||
if (fromString(line, id)) {
|
||||
signatures.push_back(id);
|
||||
} else {
|
||||
// Parse error occurred
|
||||
failLine(lineNum, inFile, line, "Unable to parse ID.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
num_of_threads = max(1u, std::thread::hardware_concurrency());
|
||||
|
||||
#if !defined(RELEASE_BUILD)
|
||||
g_grey = make_unique<Grey>();
|
||||
#endif
|
||||
processArgs(argc, argv, g_grey);
|
||||
|
||||
if (num_of_threads == 0) {
|
||||
cout << "Error: Must have at least one thread." << endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
loadExpressions(g_exprPath, g_exprMap);
|
||||
|
||||
if (!g_allSignatures) {
|
||||
SignatureSet signatures;
|
||||
if (!g_signatureFile.empty()) {
|
||||
if (!build_sigs) {
|
||||
loadSignatureList(g_signatureFile, signatures);
|
||||
} else {
|
||||
loadSignatureBuildSigs(g_signatureFile, signatures);
|
||||
}
|
||||
} else {
|
||||
signatures.push_back(g_signature);
|
||||
}
|
||||
|
||||
g_exprMap = limitToSignatures(g_exprMap, signatures);
|
||||
}
|
||||
|
||||
if (g_exprMap.empty()) {
|
||||
cout << "Warning: no signatures to scan. Exiting." << endl;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
read_it = g_exprMap.begin();
|
||||
print_it = g_exprMap.begin();
|
||||
vector<thread> threads(num_of_threads);
|
||||
|
||||
for (unsigned int i = 0; i < num_of_threads; i++) {
|
||||
threads[i] = thread(checkExpression, nullptr);
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < num_of_threads; i++) {
|
||||
threads[i].join();
|
||||
}
|
||||
|
||||
if (!g_exprMap.empty() && !build_sigs) {
|
||||
cout << "SUMMARY: " << countFailures << " of "
|
||||
<< g_exprMap.size() << " failed." << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
291
tools/hscollider/BoundedQueue.h
Normal file
291
tools/hscollider/BoundedQueue.h
Normal file
@@ -0,0 +1,291 @@
|
||||
/*
|
||||
* Copyright (c) 2016, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef BOUNDEDQUEUE_H
|
||||
#define BOUNDEDQUEUE_H
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <condition_variable>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <queue>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
//#define QUEUE_STATS 1
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
|
||||
#include <iostream>
|
||||
|
||||
class BoundedQueueStats {
|
||||
public:
|
||||
size_t pop = 0; //!< Number of pop operations.
|
||||
size_t pop_block = 0; //!< Number of pop operations that had to block.
|
||||
size_t push = 0; //!< Number of push operations.
|
||||
size_t push_elements = 0; //!< Number of elements pushed.
|
||||
size_t push_block = 0; //!< Number of push operations that had to block.
|
||||
size_t refill = 0; //!< Number of refills done.
|
||||
size_t stolen_from = 0; //!< Number of times we were stolen from.
|
||||
|
||||
void dump() const {
|
||||
std::cout << "pop : " << pop << std::endl;
|
||||
std::cout << "pop_block : " << pop_block << std::endl;
|
||||
std::cout << "push : " << push << std::endl;
|
||||
std::cout << "push_elements : " << push_elements << std::endl;
|
||||
std::cout << "push_block : " << push_block << std::endl;
|
||||
std::cout << "refill : " << refill << std::endl;
|
||||
std::cout << "stolen_from : " << stolen_from << std::endl;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
template<typename T>
|
||||
class BoundedQueue : boost::noncopyable {
|
||||
private:
|
||||
// Encapsulates a queue and the mutex used to protect access to it.
|
||||
class MutexQueue {
|
||||
public:
|
||||
// Forwarded queue operations.
|
||||
void push(std::unique_ptr<T> elem) { q.push(std::move(elem)); }
|
||||
void pop() { q.pop(); }
|
||||
std::unique_ptr<T> &front() { return q.front(); }
|
||||
bool empty() const { return q.empty(); }
|
||||
size_t size() const { return q.size(); }
|
||||
|
||||
// Acquire the mutex lock.
|
||||
std::unique_lock<std::mutex> lock() {
|
||||
return std::unique_lock<std::mutex>(mutex);
|
||||
}
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
BoundedQueueStats stats;
|
||||
#endif
|
||||
|
||||
private:
|
||||
std::mutex mutex;
|
||||
std::queue<std::unique_ptr<T>> q;
|
||||
};
|
||||
|
||||
public:
|
||||
BoundedQueue(size_t consumers, size_t size)
|
||||
: max_elements(size), consumer_q(consumers) {
|
||||
assert(consumers > 0);
|
||||
assert(size > 0);
|
||||
}
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
~BoundedQueue() {
|
||||
std::cout << "Global queue stats:" << std::endl;
|
||||
global_q.stats.dump();
|
||||
std::cout << std::endl;
|
||||
for (size_t i = 0; i < consumer_q.size(); i++) {
|
||||
std::cout << "Consumer queue " << i << ":" << std::endl;
|
||||
consumer_q[i].stats.dump();
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
#endif // QUEUE_STATS
|
||||
|
||||
void push(std::unique_ptr<T> elem) {
|
||||
auto lock = global_q.lock();
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
global_q.stats.push++;
|
||||
global_q.stats.push_elements++;
|
||||
if (global_q.size() >= max_elements) {
|
||||
global_q.stats.push_block++;
|
||||
}
|
||||
#endif // QUEUE_STATS
|
||||
|
||||
// Block until queue is able to accept new elements.
|
||||
cond_can_accept.wait(lock,
|
||||
[&] { return global_q.size() < max_elements; });
|
||||
assert(global_q.size() < max_elements);
|
||||
|
||||
global_q.push(std::move(elem));
|
||||
cond_can_consume.notify_all();
|
||||
}
|
||||
|
||||
template<class Iter>
|
||||
void push(Iter begin, Iter end) {
|
||||
using ElemType = typename std::remove_reference<decltype(*begin)>::type;
|
||||
static_assert(std::is_same<ElemType, std::unique_ptr<T>>::value,
|
||||
"Iterator must be over unique_ptr<T>");
|
||||
|
||||
if (begin == end) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto lock = global_q.lock();
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
global_q.stats.push++;
|
||||
global_q.stats.push_elements += std::distance(begin, end);
|
||||
if (global_q.size() >= max_elements) {
|
||||
global_q.stats.push_block++;
|
||||
}
|
||||
#endif // QUEUE_STATS
|
||||
|
||||
// Block until queue is able to accept new elements.
|
||||
cond_can_accept.wait(lock,
|
||||
[&] { return global_q.size() < max_elements; });
|
||||
assert(global_q.size() < max_elements);
|
||||
|
||||
for (auto it = begin; it != end; ++it) {
|
||||
global_q.push(std::move(*it));
|
||||
}
|
||||
cond_can_consume.notify_all();
|
||||
}
|
||||
|
||||
std::unique_ptr<T> pop(size_t consumer_id) {
|
||||
assert(consumer_id < consumer_q.size());
|
||||
auto &q = consumer_q[consumer_id];
|
||||
|
||||
// Try and satisfy the request from our per-consumer queue.
|
||||
{
|
||||
auto consumer_lock = q.lock();
|
||||
if (!q.empty()) {
|
||||
return pop_from_queue(q);
|
||||
}
|
||||
}
|
||||
|
||||
// Try and satisfy the request with a refill from the global queue.
|
||||
{
|
||||
auto lock = global_q.lock();
|
||||
if (!global_q.empty()) {
|
||||
auto consumer_lock = q.lock();
|
||||
return refill_and_pop(q);
|
||||
}
|
||||
}
|
||||
|
||||
// Try and satisfy the request by stealing it from another queue.
|
||||
for (size_t i = 1; i < consumer_q.size(); i++) {
|
||||
size_t victim_id = (consumer_id + i) % consumer_q.size();
|
||||
auto &victim_q = consumer_q[victim_id];
|
||||
auto victim_lock = victim_q.lock();
|
||||
// Note: we don't steal sentinel elements.
|
||||
if (!victim_q.empty() && victim_q.front() != nullptr) {
|
||||
#ifdef QUEUE_STATS
|
||||
victim_q.stats.stolen_from++;
|
||||
#endif
|
||||
return pop_from_queue(victim_q);
|
||||
}
|
||||
}
|
||||
|
||||
// All avenues exhausted, we must block until we've received a new
|
||||
// element.
|
||||
auto lock = global_q.lock();
|
||||
#ifdef QUEUE_STATS
|
||||
global_q.stats.pop_block++;
|
||||
#endif
|
||||
cond_can_consume.wait(lock, [&]{ return !global_q.empty(); });
|
||||
assert(!global_q.empty());
|
||||
auto consumer_lock = q.lock();
|
||||
return refill_and_pop(q);
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<T> pop_from_queue(MutexQueue &q) {
|
||||
assert(!q.empty());
|
||||
auto elem = std::move(q.front());
|
||||
q.pop();
|
||||
#ifdef QUEUE_STATS
|
||||
q.stats.pop++;
|
||||
#endif
|
||||
return elem;
|
||||
}
|
||||
|
||||
std::unique_ptr<T> refill_and_pop(MutexQueue &q) {
|
||||
assert(!global_q.empty());
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
q.stats.refill++;
|
||||
#endif
|
||||
|
||||
auto elem = pop_from_queue(global_q);
|
||||
if (elem == nullptr) {
|
||||
return elem; // Sentinel.
|
||||
}
|
||||
|
||||
// Grab all subsequent elements that share the same ID.
|
||||
const auto &id = elem->id;
|
||||
while (!global_q.empty()) {
|
||||
auto &first = global_q.front();
|
||||
if (first == nullptr) {
|
||||
#ifdef QUEUE_STATS
|
||||
q.stats.push++;
|
||||
q.stats.push_elements++;
|
||||
#endif
|
||||
// Sentinel element. We can grab one, but no more.
|
||||
q.push(pop_from_queue(global_q));
|
||||
break;
|
||||
}
|
||||
if (first->id != id) {
|
||||
break;
|
||||
}
|
||||
#ifdef QUEUE_STATS
|
||||
q.stats.push++;
|
||||
q.stats.push_elements++;
|
||||
#endif
|
||||
q.push(pop_from_queue(global_q));
|
||||
}
|
||||
|
||||
if (global_q.size() < max_elements) {
|
||||
cond_can_accept.notify_all();
|
||||
}
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
// Maximum number of elements in the global queue (subsequent push
|
||||
// operations will block). Note that we may overshoot this value when
|
||||
// handling bulk push operations.
|
||||
const size_t max_elements;
|
||||
|
||||
// Global queue.
|
||||
MutexQueue global_q;
|
||||
|
||||
// Per-consumer queues.
|
||||
std::vector<MutexQueue> consumer_q;
|
||||
|
||||
// Condition variable for producers to wait on when the queue is full.
|
||||
std::condition_variable cond_can_accept;
|
||||
|
||||
// Condition variable for consumers to wait on when the queue is empty.
|
||||
std::condition_variable cond_can_consume;
|
||||
};
|
||||
|
||||
#ifdef QUEUE_STATS
|
||||
#undef QUEUE_STATS
|
||||
#endif
|
||||
|
||||
#endif // BOUNDEDQUEUE_H
|
101
tools/hscollider/CMakeLists.txt
Normal file
101
tools/hscollider/CMakeLists.txt
Normal file
@@ -0,0 +1,101 @@
|
||||
# we have a fixed requirement for PCRE
|
||||
set(PCRE_REQUIRED_MAJOR_VERSION 8)
|
||||
set(PCRE_REQUIRED_MINOR_VERSION 41)
|
||||
set(PCRE_REQUIRED_VERSION ${PCRE_REQUIRED_MAJOR_VERSION}.${PCRE_REQUIRED_MINOR_VERSION})
|
||||
|
||||
include (${CMAKE_MODULE_PATH}/pcre.cmake)
|
||||
if (NOT CORRECT_PCRE_VERSION)
|
||||
message(STATUS "PCRE ${PCRE_REQUIRED_VERSION} not found, not building hscollider")
|
||||
return()
|
||||
endif()
|
||||
|
||||
include_directories(${PCRE_INCLUDE_DIRS})
|
||||
|
||||
include(${CMAKE_MODULE_PATH}/backtrace.cmake)
|
||||
|
||||
# we need static libs - too much deep magic for shared libs
|
||||
if (NOT BUILD_STATIC_LIBS)
|
||||
return ()
|
||||
endif ()
|
||||
|
||||
CHECK_FUNCTION_EXISTS(sigaltstack HAVE_SIGALTSTACK)
|
||||
CHECK_FUNCTION_EXISTS(sigaction HAVE_SIGACTION)
|
||||
CHECK_FUNCTION_EXISTS(setrlimit HAVE_SETRLIMIT)
|
||||
|
||||
set_source_files_properties(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/ColliderCorporaParser.cpp
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "${RAGEL_C_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
ragelmaker(ColliderCorporaParser.rl)
|
||||
|
||||
# only set these after all tests are done
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
|
||||
|
||||
SET(hscollider_SOURCES
|
||||
common.h
|
||||
BoundedQueue.h
|
||||
Corpora.cpp
|
||||
FileCorpora.h
|
||||
FileCorpora.cpp
|
||||
ColliderCorporaParser.h
|
||||
ColliderCorporaParser.cpp
|
||||
NfaGeneratedCorpora.h
|
||||
NfaGeneratedCorpora.cpp
|
||||
GraphTruth.h
|
||||
GraphTruth.cpp
|
||||
GroundTruth.h
|
||||
GroundTruth.cpp
|
||||
UltimateTruth.h
|
||||
UltimateTruth.cpp
|
||||
ResultSet.h
|
||||
args.cpp
|
||||
args.h
|
||||
limit.cpp
|
||||
pcre_util.cpp
|
||||
sig.cpp
|
||||
sig.h
|
||||
DatabaseProxy.h
|
||||
Thread.h
|
||||
Thread.cpp
|
||||
main.cpp
|
||||
)
|
||||
|
||||
set_source_files_properties(${hscollider_SOURCES} PROPERTIES
|
||||
INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
add_executable(hscollider ${hscollider_SOURCES})
|
||||
add_dependencies(hscollider ragel_ColliderCorporaParser)
|
||||
add_dependencies(hscollider pcre)
|
||||
|
||||
if(NOT WIN32)
|
||||
target_link_libraries(hscollider hs ${PCRE_LDFLAGS} databaseutil
|
||||
expressionutil corpusomatic crosscompileutil pthread
|
||||
"${BACKTRACE_LDFLAGS}")
|
||||
|
||||
if(HAVE_BACKTRACE)
|
||||
set_source_files_properties(hscollider_SOURCES COMPILE_FLAGS
|
||||
"${BACKTRACE_CFLAGS}")
|
||||
endif()
|
||||
else() # WIN32
|
||||
target_link_libraries(hscollider hs ${PCRE_LDFLAGS} databaseutil
|
||||
expressionutil corpusomatic crosscompileutil)
|
||||
endif()
|
||||
|
||||
add_custom_target(
|
||||
collide_quick_test
|
||||
COMMAND ${CMAKE_BINARY_DIR}/bin/hscollider
|
||||
-s ${CMAKE_SOURCE_DIR}/tools/hscollider/test_cases/signatures/collider_tests.txt
|
||||
-c ${CMAKE_SOURCE_DIR}/tools/hscollider/test_cases/corpora/*
|
||||
-Z0 -t3
|
||||
DEPENDS hscollider
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
collide_quick_test_block
|
||||
COMMAND ${CMAKE_BINARY_DIR}/bin/hscollider
|
||||
-s ${CMAKE_SOURCE_DIR}/tools/hscollider/test_cases/signatures/collider_tests.txt
|
||||
-c ${CMAKE_SOURCE_DIR}/tools/hscollider/test_cases/corpora/*
|
||||
-Z0
|
||||
DEPENDS hscollider
|
||||
)
|
39
tools/hscollider/ColliderCorporaParser.h
Normal file
39
tools/hscollider/ColliderCorporaParser.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef FILECORPORAPARSER_H
|
||||
#define FILECORPORAPARSER_H
|
||||
|
||||
#include <string>
|
||||
|
||||
struct Corpus;
|
||||
|
||||
// parse an escaped string into a real data buffer
|
||||
bool parseCorpus(const std::string &line, Corpus &c, unsigned int &id);
|
||||
|
||||
#endif
|
150
tools/hscollider/ColliderCorporaParser.rl
Normal file
150
tools/hscollider/ColliderCorporaParser.rl
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ColliderCorporaParser.h"
|
||||
#include "Corpora.h"
|
||||
|
||||
#include "ue2common.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
#include <cstdio>
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace /* anonymous */ {
|
||||
|
||||
// Take a string like '\xFF' and convert it to the character it represents
|
||||
char unhex(const char *start, UNUSED const char *end) {
|
||||
assert(start + 4 == end);
|
||||
assert(start[0] == '\\');
|
||||
assert(start[1] == 'x');
|
||||
assert(isxdigit(start[2]));
|
||||
assert(isxdigit(start[2]));
|
||||
|
||||
char temp[3] = {start[2], start[3], 0};
|
||||
|
||||
return strtol(temp, nullptr, 16);
|
||||
}
|
||||
|
||||
%%{
|
||||
machine FileCorporaParser;
|
||||
|
||||
action accumulateNum {
|
||||
num = (num * 10) + (fc - '0');
|
||||
}
|
||||
|
||||
action handleHexEscaped {
|
||||
sout.push_back(unhex(ts, te));
|
||||
}
|
||||
|
||||
action handleSpecial {
|
||||
switch (*(ts+1)) {
|
||||
case '0': sout.push_back('\x00'); break;
|
||||
case 'a': sout.push_back('\x07'); break;
|
||||
case 'e': sout.push_back('\x1b'); break;
|
||||
case 'f': sout.push_back('\x0c'); break;
|
||||
case 'n': sout.push_back('\x0a'); break;
|
||||
case 'v': sout.push_back('\x0b'); break;
|
||||
case 'r': sout.push_back('\x0d'); break;
|
||||
case 't': sout.push_back('\x09'); break;
|
||||
default: fbreak;
|
||||
}
|
||||
}
|
||||
|
||||
action handleMatch {
|
||||
c.matches.insert(num);
|
||||
}
|
||||
|
||||
write data;
|
||||
}%%
|
||||
|
||||
} // namespace
|
||||
|
||||
bool parseCorpus(const string &line, Corpus &c, unsigned int &id) {
|
||||
const char *p = line.c_str();
|
||||
const char *pe = p + line.size();
|
||||
const char *eof = pe;
|
||||
const char *ts;
|
||||
const char *te;
|
||||
int cs;
|
||||
UNUSED int act;
|
||||
|
||||
// For storing integers as they're scanned
|
||||
unsigned int num = 0;
|
||||
|
||||
string &sout = c.data;
|
||||
|
||||
%%{
|
||||
id = ( digit @accumulateNum)+ >{num = 0;} @{id = num;};
|
||||
|
||||
backslashed = '\\' ^alnum;
|
||||
specials = '\\' [0aefnvrt];
|
||||
hexescaped = '\\x' xdigit{2};
|
||||
|
||||
corpus_old := |*
|
||||
hexescaped => handleHexEscaped;
|
||||
specials => handleSpecial;
|
||||
backslashed => { sout.push_back(*(ts + 1)); };
|
||||
any => { sout.push_back(*ts); };
|
||||
*|;
|
||||
|
||||
corpus_new := |*
|
||||
hexescaped => handleHexEscaped;
|
||||
specials => handleSpecial;
|
||||
backslashed => { sout.push_back(*(ts + 1)); };
|
||||
any - '"' => { sout.push_back(*ts); };
|
||||
'"' => { fgoto colon_sep; };
|
||||
*|;
|
||||
|
||||
colon_sep := |*
|
||||
':' => {fgoto match_list; };
|
||||
*|;
|
||||
|
||||
match_list := |*
|
||||
(' '* (digit @accumulateNum)+ ' '* ','?) >{num = 0;} => handleMatch;
|
||||
*|;
|
||||
|
||||
# Old simple line format
|
||||
line_old = id ':' @{ fgoto corpus_old; };
|
||||
|
||||
# New line format with matches
|
||||
line_new = id "=\"" @{ c.hasMatches = true; fgoto corpus_new; };
|
||||
|
||||
main := ( line_new | line_old );
|
||||
|
||||
# Initialize and execute
|
||||
write init;
|
||||
write exec;
|
||||
}%%
|
||||
|
||||
return (cs != FileCorporaParser_error) && (p == pe);
|
||||
}
|
31
tools/hscollider/Corpora.cpp
Normal file
31
tools/hscollider/Corpora.cpp
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "Corpora.h"
|
||||
|
||||
CorporaSource::~CorporaSource() { }
|
68
tools/hscollider/Corpora.h
Normal file
68
tools/hscollider/Corpora.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef CORPORA_H
|
||||
#define CORPORA_H
|
||||
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
struct Corpus {
|
||||
Corpus() : hasMatches(false) {}
|
||||
explicit Corpus(const std::string &s) : data(s), hasMatches(false) {}
|
||||
|
||||
std::string data; // Corpus itself
|
||||
bool hasMatches; // Have the matches been pre-calculated?
|
||||
std::set<unsigned int> matches; // end-offsets of matches
|
||||
};
|
||||
|
||||
struct CorpusFailure {
|
||||
explicit CorpusFailure(const std::string &s) : message(s) {}
|
||||
std::string message;
|
||||
};
|
||||
|
||||
// Abstract class for a corpora source: new ways to load or generate corpora
|
||||
// can be written by subclassing this class and providing its generate
|
||||
// method.
|
||||
class CorporaSource : boost::noncopyable {
|
||||
public:
|
||||
// destructor
|
||||
virtual ~CorporaSource();
|
||||
|
||||
// Make a copy of this corpora source.
|
||||
virtual CorporaSource *clone() const = 0;
|
||||
|
||||
// Generate corpora for the given signature ID, adding them to the
|
||||
// vector of strings provided.
|
||||
virtual void generate(unsigned id, std::vector<Corpus> &data) = 0;
|
||||
};
|
||||
|
||||
#endif // CORPORA_H
|
88
tools/hscollider/DatabaseProxy.h
Normal file
88
tools/hscollider/DatabaseProxy.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2016, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef UE2COLLIDER_DATABASEPROXY_H
|
||||
#define UE2COLLIDER_DATABASEPROXY_H
|
||||
|
||||
#include "UltimateTruth.h"
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
/**
|
||||
* When a compile fails for the first time, we throw this exception so that a
|
||||
* compilation error can be reported to the user. Subsequent failures will
|
||||
* simply return nullptr rather than throwing this exception.
|
||||
*/
|
||||
struct CompileFailed {
|
||||
public:
|
||||
explicit CompileFailed(const std::string &err) : error(err) {}
|
||||
std::string error;
|
||||
};
|
||||
|
||||
class DatabaseProxy : boost::noncopyable {
|
||||
public:
|
||||
explicit DatabaseProxy(const std::set<unsigned> &expr_ids)
|
||||
: ids(expr_ids) {}
|
||||
|
||||
explicit DatabaseProxy(std::shared_ptr<HyperscanDB> built_db)
|
||||
: db(built_db) {}
|
||||
|
||||
std::shared_ptr<HyperscanDB> get(const UltimateTruth &ultimate) {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
if (failed) {
|
||||
// We have previously failed to compile this database.
|
||||
return nullptr;
|
||||
}
|
||||
if (db) {
|
||||
return db;
|
||||
}
|
||||
|
||||
// Database hasn't been compiled yet.
|
||||
std::string error;
|
||||
db = ultimate.compile(ids, error);
|
||||
if (!db) {
|
||||
failed = true;
|
||||
throw CompileFailed(error);
|
||||
}
|
||||
|
||||
return db;
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex mutex;
|
||||
std::shared_ptr<HyperscanDB> db;
|
||||
std::set<unsigned> ids;
|
||||
bool failed = false; // Database failed compilation.
|
||||
};
|
||||
|
||||
#endif // UE2COLLIDER_DATABASEPROXY_H
|
99
tools/hscollider/FileCorpora.cpp
Normal file
99
tools/hscollider/FileCorpora.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ColliderCorporaParser.h"
|
||||
#include "FileCorpora.h"
|
||||
#include "common.h"
|
||||
#include "util/expression_path.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <boost/algorithm/string/trim.hpp>
|
||||
|
||||
using namespace std;
|
||||
|
||||
// Returns true if this line is empty or a comment and should be skipped
|
||||
static
|
||||
bool emptyLine(const string& line) {
|
||||
return line.empty() || line[0] == '#';
|
||||
}
|
||||
|
||||
FileCorpora *FileCorpora::clone() const {
|
||||
FileCorpora *copy = new FileCorpora();
|
||||
copy->corpora_by_pat = corpora_by_pat;
|
||||
return copy;
|
||||
}
|
||||
|
||||
bool FileCorpora::readLine(const string &line) {
|
||||
unsigned id = 0;
|
||||
Corpus c;
|
||||
bool rv = parseCorpus(line, c, id);
|
||||
if (rv) {
|
||||
corpora_by_pat[id].push_back(c);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool FileCorpora::readFile(const string &filename) {
|
||||
ifstream f(filename.c_str());
|
||||
if (!f.good()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned lineNum = 0;
|
||||
string line;
|
||||
while (getline(f, line)) {
|
||||
lineNum++;
|
||||
|
||||
boost::trim(line);
|
||||
|
||||
if (emptyLine(line)) {
|
||||
continue;
|
||||
}
|
||||
if (!readLine(line)) {
|
||||
cerr << "Error in corpora file parsing line " << lineNum << endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return !corpora_by_pat.empty();
|
||||
}
|
||||
|
||||
void FileCorpora::generate(unsigned id,
|
||||
vector<Corpus> &data) {
|
||||
auto i = corpora_by_pat.find(id);
|
||||
if (i == corpora_by_pat.end() || i->second.empty()) {
|
||||
throw CorpusFailure("no corpora found for pattern.");
|
||||
}
|
||||
|
||||
data.insert(data.end(), i->second.begin(), i->second.end());
|
||||
}
|
57
tools/hscollider/FileCorpora.h
Normal file
57
tools/hscollider/FileCorpora.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef FILECORPORA_H
|
||||
#define FILECORPORA_H
|
||||
|
||||
#include "Corpora.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
||||
class FileCorpora : public CorporaSource {
|
||||
public:
|
||||
// copy
|
||||
FileCorpora *clone() const override;
|
||||
|
||||
// read corpora in from a file
|
||||
bool readFile(const std::string &filename);
|
||||
|
||||
// generator
|
||||
void generate(unsigned id, std::vector<Corpus> &data) override;
|
||||
|
||||
private:
|
||||
// read in a line from our file
|
||||
bool readLine(const std::string &line);
|
||||
|
||||
std::map<unsigned, std::list<Corpus>> corpora_by_pat;
|
||||
};
|
||||
|
||||
#endif
|
308
tools/hscollider/GraphTruth.cpp
Normal file
308
tools/hscollider/GraphTruth.cpp
Normal file
@@ -0,0 +1,308 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "GraphTruth.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "expressions.h"
|
||||
#include "ExpressionParser.h"
|
||||
#include "ng_find_matches.h"
|
||||
#include "pcre_util.h"
|
||||
|
||||
#include "grey.h"
|
||||
#include "hs_compile.h"
|
||||
#include "ue2common.h"
|
||||
#include "compiler/compiler.h"
|
||||
#include "nfagraph/ng.h"
|
||||
#include "nfagraph/ng_depth.h"
|
||||
#include "nfagraph/ng_dump.h"
|
||||
#include "nfagraph/ng_fuzzy.h"
|
||||
#include "nfagraph/ng_holder.h"
|
||||
#include "nfagraph/ng_util.h"
|
||||
#include "parser/Parser.h"
|
||||
#include "parser/unsupported.h"
|
||||
#include "util/compile_context.h"
|
||||
#include "util/make_unique.h"
|
||||
#include "util/report_manager.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace ue2;
|
||||
|
||||
// Struct to store the actual compiled NFA graph.
|
||||
class CompiledNG : boost::noncopyable {
|
||||
public:
|
||||
CompiledNG(unique_ptr<NGHolder> g_in,
|
||||
unique_ptr<ReportManager> rm_in)
|
||||
: g(std::move(g_in)), rm(std::move(rm_in)) {}
|
||||
unique_ptr<ue2::NGHolder> g;
|
||||
unique_ptr<ue2::ReportManager> rm;
|
||||
};
|
||||
|
||||
static
|
||||
void populateMatchSet(ResultSet &rs, const set<pair<size_t, size_t>> &matches,
|
||||
const CNGInfo &cngi) {
|
||||
for (const auto &m : matches) {
|
||||
u64a from = m.first;
|
||||
u64a to = m.second;
|
||||
if (g_streamOffset) {
|
||||
// Subtract stream offset imposed by offset test.
|
||||
u64a offset = min(100ull, g_streamOffset);
|
||||
assert(to >= offset);
|
||||
from -= min(offset, from);
|
||||
to -= offset;
|
||||
}
|
||||
u64a len = to - from;
|
||||
|
||||
if (to < cngi.min_offset || to > cngi.max_offset ||
|
||||
len < cngi.min_length) {
|
||||
// this match does not satisfy extparams constraints
|
||||
DEBUG_PRINTF("skipping NFA Match @ (%llu,%llu)\n", from, to);
|
||||
continue;
|
||||
}
|
||||
if (!cngi.som) {
|
||||
from = 0;
|
||||
}
|
||||
rs.addMatch(from, to);
|
||||
}
|
||||
}
|
||||
|
||||
CNGInfo::CNGInfo(unsigned id_in, const ExpressionMap &m_expr_in)
|
||||
: id(id_in), m_expr(m_expr_in) {}
|
||||
|
||||
CNGInfo::~CNGInfo() = default;
|
||||
|
||||
void CNGInfo::compile() {
|
||||
auto i = m_expr.find(id);
|
||||
if (i == m_expr.end()) {
|
||||
throw NGCompileFailure("ID not found in expression map.");
|
||||
}
|
||||
|
||||
string re;
|
||||
unsigned hs_flags;
|
||||
hs_expr_ext ext;
|
||||
|
||||
// read the flags for NFA compiler
|
||||
if (!readExpression(i->second, re, &hs_flags, &ext)) {
|
||||
throw NGCompileFailure("Cannot parse expression flags.");
|
||||
}
|
||||
// make sure we respect collider's UTF-8 setting
|
||||
if (force_utf8) {
|
||||
hs_flags |= HS_FLAG_UTF8;
|
||||
}
|
||||
|
||||
try {
|
||||
bool isStreaming = colliderMode == MODE_STREAMING;
|
||||
bool isVectored = colliderMode == MODE_VECTORED;
|
||||
CompileContext cc(isStreaming, isVectored, get_current_target(),
|
||||
Grey());
|
||||
ParsedExpression pe(0, re.c_str(), hs_flags, 0, &ext);
|
||||
|
||||
// UE-2850: ParsedExpression may have updated the utf8 flag if the
|
||||
// original expression starts with (*UTF8)
|
||||
utf8 |= pe.expr.utf8;
|
||||
|
||||
auto rm = ue2::make_unique<ReportManager>(cc.grey);
|
||||
|
||||
// Expressions containing zero-width assertions and other extended pcre
|
||||
// types aren't supported yet. This call will throw a ParseError
|
||||
// exception if the component tree contains such a construct.
|
||||
checkUnsupported(*pe.component);
|
||||
|
||||
pe.component->checkEmbeddedStartAnchor(true);
|
||||
pe.component->checkEmbeddedEndAnchor(true);
|
||||
|
||||
// edit distance may be set globally
|
||||
if (force_edit_distance) {
|
||||
pe.expr.edit_distance = edit_distance;
|
||||
}
|
||||
|
||||
// validate_fuzzy_compile checks this, but we don't need to build the
|
||||
// graph to know it will fail
|
||||
if (pe.expr.edit_distance && utf8) {
|
||||
throw NGCompileFailure("UTF-8 patterns cannot be "
|
||||
"approximately matched");
|
||||
}
|
||||
|
||||
auto built_expr = buildGraph(*rm, cc, pe);
|
||||
auto &expr = built_expr.expr;
|
||||
auto &g = built_expr.g;
|
||||
|
||||
if (expr.edit_distance || expr.hamm_distance) {
|
||||
// check if this pattern can be approximately matched, throws
|
||||
// CompileError on failure
|
||||
bool hamming = expr.hamm_distance > 0;
|
||||
u32 e_dist = hamming ? expr.hamm_distance : expr.edit_distance;
|
||||
validate_fuzzy_compile(*g, e_dist, hamming, utf8, cc.grey);
|
||||
}
|
||||
|
||||
if (isVacuous(*g)) {
|
||||
if (som) {
|
||||
throw NGUnsupportedFailure("Vacuous patterns are not supported "
|
||||
"in SOM mode");
|
||||
}
|
||||
if (expr.min_length > 0) {
|
||||
throw NGUnsupportedFailure("Vacuous patterns are not supported "
|
||||
"in combination with min_length");
|
||||
}
|
||||
}
|
||||
|
||||
cng = make_unique<CompiledNG>(move(g), move(rm));
|
||||
} catch (CompileError &e) {
|
||||
throw NGCompileFailure(e.reason);
|
||||
} catch (NGUnsupportedFailure &e) {
|
||||
throw NGCompileFailure(e.msg);
|
||||
} catch (...) {
|
||||
throw NGCompileFailure("NFA graph construction failed");
|
||||
}
|
||||
}
|
||||
|
||||
GraphTruth::GraphTruth(ostream &os, const ExpressionMap &expr)
|
||||
: out(os), m_expr(expr) {}
|
||||
|
||||
unique_ptr<CNGInfo> GraphTruth::preprocess(unsigned id,
|
||||
bool ignoreUnsupported) {
|
||||
bool highlander = false;
|
||||
bool prefilter = false;
|
||||
bool som = false;
|
||||
|
||||
auto i = m_expr.find(id);
|
||||
if (i == m_expr.end()) {
|
||||
throw NGCompileFailure("ID not found in expression map.");
|
||||
}
|
||||
|
||||
string re;
|
||||
unsigned flags, hs_flags;
|
||||
hs_expr_ext ext;
|
||||
|
||||
// read the flags for NFA compiler
|
||||
if (!readExpression(i->second, re, &hs_flags, &ext)) {
|
||||
throw NGCompileFailure("Cannot parse expression flags.");
|
||||
}
|
||||
// read PCRE flags
|
||||
if (!getPcreFlags(hs_flags, &flags, &highlander, &prefilter, &som)) {
|
||||
throw NGCompileFailure("Cannot get PCRE flags.");
|
||||
}
|
||||
if (force_utf8) {
|
||||
hs_flags |= HS_FLAG_UTF8;
|
||||
}
|
||||
|
||||
// edit distance might be set globally
|
||||
if (force_edit_distance) {
|
||||
ext.edit_distance = edit_distance;
|
||||
}
|
||||
|
||||
// SOM flags might be set globally.
|
||||
som |= !!somFlags;
|
||||
|
||||
if (force_prefilter) {
|
||||
prefilter = true;
|
||||
}
|
||||
|
||||
u64a supported_flags = HS_EXT_FLAG_HAMMING_DISTANCE |
|
||||
HS_EXT_FLAG_EDIT_DISTANCE | HS_EXT_FLAG_MIN_OFFSET |
|
||||
HS_EXT_FLAG_MAX_OFFSET | HS_EXT_FLAG_MIN_LENGTH;
|
||||
if (ext.flags & ~supported_flags) {
|
||||
if (!ignoreUnsupported) {
|
||||
throw NGUnsupportedFailure("Unsupported extended flags specified.");
|
||||
}
|
||||
}
|
||||
|
||||
auto cngi = make_unique<CNGInfo>(id, m_expr);
|
||||
cngi->utf8 = hs_flags & HS_FLAG_UTF8;
|
||||
cngi->highlander = highlander;
|
||||
cngi->prefilter = prefilter;
|
||||
cngi->som = som;
|
||||
cngi->min_offset = ext.min_offset;
|
||||
cngi->max_offset = ext.max_offset;
|
||||
cngi->min_length = ext.min_length;
|
||||
cngi->max_edit_distance = ext.edit_distance;
|
||||
cngi->max_hamm_distance = ext.hamming_distance;
|
||||
|
||||
return cngi;
|
||||
}
|
||||
|
||||
bool GraphTruth::run(unsigned, const CompiledNG &cng, const CNGInfo &cngi,
|
||||
const string &buffer, ResultSet &rs, string &) {
|
||||
set<pair<size_t, size_t>> matches;
|
||||
|
||||
if (g_streamOffset) {
|
||||
size_t offset = MIN(100, g_streamOffset);
|
||||
assert(offset > 0);
|
||||
const string preamble(string(offset, '\0'));
|
||||
|
||||
set<pair<size_t, size_t>> pre_matches;
|
||||
|
||||
// First, scan an empty buffer size of the preamble so that we can
|
||||
// discard any matches therein after the real scan, later. We use
|
||||
// notEod so that end-anchors in our expression don't match at the
|
||||
// end of the buffer.
|
||||
if (!findMatches(*cng.g, *cng.rm, preamble, pre_matches,
|
||||
cngi.max_edit_distance, cngi.max_hamm_distance, true,
|
||||
cngi.utf8)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Real scan.
|
||||
if (!findMatches(*cng.g, *cng.rm, preamble + buffer, matches,
|
||||
cngi.max_edit_distance, cngi.max_hamm_distance, false,
|
||||
cngi.utf8)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Erase any matches due entirely to the preamble.
|
||||
for (const auto &m : pre_matches) {
|
||||
matches.erase(m);
|
||||
}
|
||||
} else {
|
||||
if (!findMatches(*cng.g, *cng.rm, buffer, matches,
|
||||
cngi.max_edit_distance, cngi.max_hamm_distance, false,
|
||||
cngi.utf8)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
populateMatchSet(rs, matches, cngi);
|
||||
|
||||
if (echo_matches) {
|
||||
for (const auto &m : rs.matches) {
|
||||
out << "NFA Match @ (" << m.from << "," << m.to << ")" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
144
tools/hscollider/GraphTruth.h
Normal file
144
tools/hscollider/GraphTruth.h
Normal file
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef GRAPHTRUTH_H
|
||||
#define GRAPHTRUTH_H
|
||||
|
||||
#include "expressions.h"
|
||||
#include "ResultSet.h"
|
||||
|
||||
#include "hs_compile.h" // for hs_expr_ext
|
||||
#include "ue2common.h"
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
namespace ue2 {
|
||||
|
||||
class ReportManager;
|
||||
struct BoundaryReports;
|
||||
|
||||
} // namespace ue2
|
||||
|
||||
struct NGCompileFailure {
|
||||
explicit NGCompileFailure(const std::string &msg_s) : msg(msg_s) {}
|
||||
std::string msg;
|
||||
};
|
||||
|
||||
struct NGUnsupportedFailure {
|
||||
explicit NGUnsupportedFailure(const std::string &msg_s) : msg(msg_s) {}
|
||||
std::string msg;
|
||||
};
|
||||
|
||||
// Struct to store the actual compiled NFA graph.
|
||||
class CompiledNG;
|
||||
|
||||
// Struct to store the precompile information about the graph.
|
||||
class CNGInfo : boost::noncopyable {
|
||||
public:
|
||||
CNGInfo(unsigned id_in, const ExpressionMap &m_expr_in);
|
||||
~CNGInfo();
|
||||
|
||||
bool is_bad() {
|
||||
std::lock_guard<std::mutex> lock(bad_mutex);
|
||||
bool val = bad;
|
||||
return val;
|
||||
}
|
||||
|
||||
void mark_bad() {
|
||||
std::lock_guard<std::mutex> lock(bad_mutex);
|
||||
bad = true;
|
||||
}
|
||||
|
||||
const CompiledNG *get() {
|
||||
std::lock_guard<std::mutex> lock(cng_mutex);
|
||||
|
||||
if (cng) {
|
||||
return cng.get();
|
||||
}
|
||||
|
||||
// NFA graph hasn't been compiled yet.
|
||||
try {
|
||||
compile();
|
||||
} catch (NGCompileFailure &e) {
|
||||
throw NGCompileFailure(e);
|
||||
} catch (NGUnsupportedFailure &e) {
|
||||
throw NGCompileFailure(e.msg);
|
||||
}
|
||||
|
||||
return cng.get();
|
||||
}
|
||||
|
||||
u64a min_offset = 0;
|
||||
u64a max_offset = 0;
|
||||
u64a min_length = 0;
|
||||
u32 max_edit_distance = 0;
|
||||
u32 max_hamm_distance = 0;
|
||||
bool utf8 = false;
|
||||
bool highlander = false;
|
||||
bool prefilter = false;
|
||||
bool som = false;
|
||||
private:
|
||||
void compile();
|
||||
// If NFA graph scan failed for some reason, we mark it as bad and skip
|
||||
// the remaining tests for it for performance reasons.
|
||||
bool bad = false;
|
||||
std::mutex bad_mutex; // serialised accesses to bad flag.
|
||||
|
||||
std::unique_ptr<CompiledNG> cng; // compiled NFA graph
|
||||
std::mutex cng_mutex; // serialised accesses to NFA graph
|
||||
|
||||
unsigned id;
|
||||
|
||||
// Our expression map
|
||||
const ExpressionMap &m_expr;
|
||||
};
|
||||
|
||||
|
||||
class GraphTruth : boost::noncopyable {
|
||||
public:
|
||||
GraphTruth(std::ostream &os, const ExpressionMap &expr);
|
||||
|
||||
bool run(unsigned id, const CompiledNG &cng, const CNGInfo &cngi,
|
||||
const std::string &buffer, ResultSet &rs, std::string &error);
|
||||
|
||||
std::unique_ptr<CNGInfo> preprocess(unsigned id,
|
||||
bool ignoreUnsupported = false);
|
||||
|
||||
private:
|
||||
// Output stream.
|
||||
std::ostream &out;
|
||||
|
||||
// Our expression map
|
||||
const ExpressionMap &m_expr;
|
||||
};
|
||||
|
||||
#endif
|
513
tools/hscollider/GroundTruth.cpp
Normal file
513
tools/hscollider/GroundTruth.cpp
Normal file
@@ -0,0 +1,513 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "ExpressionParser.h"
|
||||
#include "expressions.h"
|
||||
#include "GroundTruth.h"
|
||||
#include "pcre_util.h"
|
||||
|
||||
#include "hs_compile.h" // for hs_expr_ext
|
||||
#include "ue2common.h"
|
||||
#include "parser/control_verbs.h"
|
||||
#include "parser/Parser.h"
|
||||
#include "parser/parse_error.h"
|
||||
#include "util/make_unique.h"
|
||||
#include "util/unicode_def.h"
|
||||
#include "util/unordered.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <ostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <pcre.h>
|
||||
|
||||
/* -X, -Y support
|
||||
* as PCRE performance is `non-linear' and these options add a large amount of
|
||||
* scanning, the following short cuts are used:
|
||||
* 1: the suffix is not scanned - we are more interested in the matches from
|
||||
* the original corpora.
|
||||
* 2: only the last 50 bytes of the prefix is scanned. This may lead to some
|
||||
* minor correctness issues for a few patterns.
|
||||
*/
|
||||
|
||||
using namespace std;
|
||||
using namespace ue2;
|
||||
|
||||
// We store matches in a hash table as we're likely to see lots of them. These
|
||||
// are moved into a ResultSet at the end.
|
||||
using PcreMatchSet = ue2::ue2_unordered_set<pair<unsigned, unsigned>>;
|
||||
|
||||
namespace {
|
||||
struct CalloutContext {
|
||||
explicit CalloutContext(ostream &os) : out(os) {}
|
||||
ostream &out;
|
||||
PcreMatchSet matches;
|
||||
};
|
||||
}
|
||||
|
||||
static
|
||||
int pcreCallOut(pcre_callout_block *block) {
|
||||
assert(block);
|
||||
assert(block->callout_data);
|
||||
CalloutContext *ctx = static_cast<CalloutContext *>(block->callout_data);
|
||||
|
||||
if (echo_matches) {
|
||||
ctx->out << "PCRE Match @ (" << block->start_match << ","
|
||||
<< block->current_position << ")" << endl;
|
||||
}
|
||||
|
||||
unsigned int from = block->start_match;
|
||||
unsigned int to = block->current_position;
|
||||
assert(from <= to);
|
||||
|
||||
ctx->matches.insert(make_pair(from, to));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static
|
||||
bool decodeExprPcre(string &expr, unsigned *flags, bool *highlander,
|
||||
bool *prefilter, bool *som, hs_expr_ext *ext) {
|
||||
string regex;
|
||||
unsigned int hs_flags = 0;
|
||||
if (!readExpression(expr, regex, &hs_flags, ext)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
expr.swap(regex);
|
||||
|
||||
if (!getPcreFlags(hs_flags, flags, highlander, prefilter, som)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (force_utf8) {
|
||||
*flags |= PCRE_UTF8;
|
||||
}
|
||||
|
||||
if (force_prefilter) {
|
||||
*prefilter = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static
|
||||
string pcreErrStr(int err) {
|
||||
switch (err) {
|
||||
case PCRE_ERROR_NOMATCH:
|
||||
return "PCRE_ERROR_NOMATCH";
|
||||
case PCRE_ERROR_NULL:
|
||||
return "PCRE_ERROR_NULL";
|
||||
case PCRE_ERROR_BADOPTION:
|
||||
return "PCRE_ERROR_BADOPTION";
|
||||
case PCRE_ERROR_BADMAGIC:
|
||||
return "PCRE_ERROR_BADMAGIC";
|
||||
#if defined(PCRE_ERROR_UNKNOWN_OPCODE)
|
||||
case PCRE_ERROR_UNKNOWN_OPCODE:
|
||||
return "PCRE_ERROR_UNKNOWN_OPCODE";
|
||||
#else
|
||||
case PCRE_ERROR_UNKNOWN_NODE:
|
||||
return "PCRE_ERROR_UNKNOWN_NODE";
|
||||
#endif
|
||||
case PCRE_ERROR_NOMEMORY:
|
||||
return "PCRE_ERROR_NOMEMORY";
|
||||
case PCRE_ERROR_NOSUBSTRING:
|
||||
return "PCRE_ERROR_NOSUBSTRING";
|
||||
case PCRE_ERROR_MATCHLIMIT:
|
||||
return "PCRE_ERROR_MATCHLIMIT";
|
||||
case PCRE_ERROR_CALLOUT:
|
||||
return "PCRE_ERROR_CALLOUT";
|
||||
case PCRE_ERROR_BADUTF8:
|
||||
return "PCRE_ERROR_BADUTF8";
|
||||
case PCRE_ERROR_BADUTF8_OFFSET:
|
||||
return "PCRE_ERROR_BADUTF8_OFFSET";
|
||||
case PCRE_ERROR_PARTIAL:
|
||||
return "PCRE_ERROR_PARTIAL";
|
||||
case PCRE_ERROR_BADPARTIAL:
|
||||
return "PCRE_ERROR_BADPARTIAL";
|
||||
case PCRE_ERROR_INTERNAL:
|
||||
return "PCRE_ERROR_INTERNAL";
|
||||
case PCRE_ERROR_BADCOUNT:
|
||||
return "PCRE_ERROR_BADCOUNT";
|
||||
#if defined(PCRE_ERROR_RECURSIONLIMIT)
|
||||
case PCRE_ERROR_RECURSIONLIMIT:
|
||||
return "PCRE_ERROR_RECURSIONLIMIT";
|
||||
#endif
|
||||
case PCRE_ERROR_DFA_UITEM:
|
||||
return "PCRE_ERROR_DFA_UITEM";
|
||||
case PCRE_ERROR_DFA_UCOND:
|
||||
return "PCRE_ERROR_DFA_UCOND";
|
||||
case PCRE_ERROR_DFA_UMLIMIT:
|
||||
return "PCRE_ERROR_DFA_UMLIMIT";
|
||||
case PCRE_ERROR_DFA_WSSIZE:
|
||||
return "PCRE_ERROR_DFA_WSSIZE";
|
||||
case PCRE_ERROR_DFA_RECURSE:
|
||||
return "PCRE_ERROR_DFA_RECURSE";
|
||||
default:
|
||||
{
|
||||
ostringstream oss;
|
||||
oss << "Unknown PCRE error (value: " << err << ")";
|
||||
return oss.str();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GroundTruth::GroundTruth(ostream &os, const ExpressionMap &expr,
|
||||
unsigned long int limit,
|
||||
unsigned long int limit_recursion)
|
||||
: out(os), m_expr(expr), matchLimit(limit),
|
||||
matchLimitRecursion(limit_recursion) {}
|
||||
|
||||
void GroundTruth::global_prep() {
|
||||
// We're using pcre callouts
|
||||
pcre_callout = &pcreCallOut;
|
||||
}
|
||||
|
||||
static
|
||||
void addCallout(string &re) {
|
||||
// If the string begins with "(*UTF8)" or "(*UTF8)(*UCP)", we want to keep
|
||||
// it at the front. We reuse the control verbs mini-parser for this.
|
||||
size_t startpos = 0;
|
||||
try {
|
||||
ue2::ParseMode mode;
|
||||
const char *ptr = ue2::read_control_verbs(
|
||||
re.c_str(), re.c_str() + re.size(), 0, mode);
|
||||
startpos = ptr - re.c_str();
|
||||
} catch (const ue2::ParseError &err) {
|
||||
// fall through
|
||||
}
|
||||
assert(startpos <= re.length());
|
||||
re.insert(startpos, "(?:");
|
||||
// We include a \E to close any open \Q quoted block. If there isn't
|
||||
// one, pcre will ignore the \E.
|
||||
re.append("\\E)(?C)");
|
||||
}
|
||||
|
||||
unique_ptr<CompiledPcre>
|
||||
GroundTruth::compile(unsigned id, bool no_callouts) {
|
||||
bool highlander = false;
|
||||
bool prefilter = false;
|
||||
bool som = false;
|
||||
|
||||
// we can still match approximate matching patterns with PCRE if edit
|
||||
// distance 0 is requested
|
||||
if (force_edit_distance && edit_distance) {
|
||||
throw SoftPcreCompileFailure("Edit distance not supported by PCRE.");
|
||||
}
|
||||
|
||||
ExpressionMap::const_iterator i = m_expr.find(id);
|
||||
if (i == m_expr.end()) {
|
||||
throw PcreCompileFailure("ID not found in expression map.");
|
||||
}
|
||||
|
||||
string re(i->second);
|
||||
unsigned flags;
|
||||
hs_expr_ext ext;
|
||||
|
||||
// Decode the flags
|
||||
if (!decodeExprPcre(re, &flags, &highlander, &prefilter, &som, &ext)) {
|
||||
throw PcreCompileFailure("Unable to decode flags.");
|
||||
}
|
||||
|
||||
// filter out flags not supported by PCRE
|
||||
u64a supported = HS_EXT_FLAG_MIN_OFFSET | HS_EXT_FLAG_MAX_OFFSET |
|
||||
HS_EXT_FLAG_MIN_LENGTH;
|
||||
if (ext.flags & ~supported) {
|
||||
// edit distance is a known unsupported flag, so just throw a soft error
|
||||
if (ext.flags & HS_EXT_FLAG_EDIT_DISTANCE) {
|
||||
throw SoftPcreCompileFailure("Edit distance not supported by PCRE.");
|
||||
}
|
||||
if (ext.flags & HS_EXT_FLAG_HAMMING_DISTANCE) {
|
||||
throw SoftPcreCompileFailure(
|
||||
"Hamming distance not supported by PCRE.");
|
||||
}
|
||||
throw PcreCompileFailure("Unsupported extended flags.");
|
||||
}
|
||||
|
||||
// SOM flags might be set globally.
|
||||
som |= !!somFlags;
|
||||
|
||||
// For traditional Hyperscan, add global callout to pattern.
|
||||
if (!no_callouts) {
|
||||
addCallout(re);
|
||||
}
|
||||
|
||||
// Compile the pattern
|
||||
const char *errptr = nullptr;
|
||||
int errloc = 0;
|
||||
int errcode = 0;
|
||||
|
||||
unique_ptr<CompiledPcre> compiled = make_unique<CompiledPcre>();
|
||||
compiled->utf8 = flags & PCRE_UTF8;
|
||||
compiled->highlander = highlander;
|
||||
compiled->prefilter = prefilter;
|
||||
compiled->som = som;
|
||||
compiled->min_offset = ext.min_offset;
|
||||
compiled->max_offset = ext.max_offset;
|
||||
compiled->min_length = ext.min_length;
|
||||
compiled->expression = i->second; // original PCRE
|
||||
flags |= PCRE_NO_AUTO_POSSESS;
|
||||
|
||||
compiled->bytecode =
|
||||
pcre_compile2(re.c_str(), flags, &errcode, &errptr, &errloc, nullptr);
|
||||
|
||||
if (!compiled->bytecode || errptr) {
|
||||
assert(errcode);
|
||||
ostringstream oss;
|
||||
oss << "Failed to compile expression '" << re << '\'';
|
||||
oss << " (" << errptr << " at " << errloc << ").";
|
||||
if (errcode == 20) { // "regular expression is too large"
|
||||
throw SoftPcreCompileFailure(oss.str());
|
||||
} else if (errcode == 25) { // "lookbehind assertion is not fixed length"
|
||||
throw SoftPcreCompileFailure(oss.str());
|
||||
} else {
|
||||
throw PcreCompileFailure(oss.str());
|
||||
}
|
||||
}
|
||||
|
||||
// Study the pattern
|
||||
shared_ptr<pcre_extra> extra(pcre_study(compiled->bytecode, 0, &errptr),
|
||||
free);
|
||||
if (errptr) {
|
||||
ostringstream oss;
|
||||
oss << "Error studying pattern (" << errptr << ").";
|
||||
throw PcreCompileFailure(oss.str());
|
||||
}
|
||||
|
||||
int infoRes =
|
||||
pcre_fullinfo(compiled->bytecode, extra.get(), PCRE_INFO_CAPTURECOUNT,
|
||||
&compiled->captureCount);
|
||||
if (infoRes < PCRE_ERROR_NOMATCH) {
|
||||
ostringstream oss;
|
||||
oss << "Error determining number of capturing subpatterns ("
|
||||
<< pcreErrStr(infoRes) << ").";
|
||||
throw PcreCompileFailure(oss.str());
|
||||
}
|
||||
|
||||
return compiled;
|
||||
}
|
||||
|
||||
static
|
||||
void filterLeftmostSom(ResultSet &rs) {
|
||||
if (rs.matches.size() <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
set<u64a> seen; // End offsets.
|
||||
set<MatchResult>::iterator it = rs.matches.begin();
|
||||
while (it != rs.matches.end()) {
|
||||
if (seen.insert(it->to).second) {
|
||||
++it; // First time we've seen this end-offset.
|
||||
} else {
|
||||
rs.matches.erase(it++); // Dupe with a "righter" SOM.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
void filterExtParams(ResultSet &rs, const CompiledPcre &compiled) {
|
||||
set<MatchResult>::iterator it = rs.matches.begin();
|
||||
while (it != rs.matches.end()) {
|
||||
unsigned int from = it->from, to = it->to;
|
||||
unsigned int len = to - from;
|
||||
if (to < compiled.min_offset || to > compiled.max_offset ||
|
||||
len < compiled.min_length) {
|
||||
rs.matches.erase(it++);
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
int scanBasic(const CompiledPcre &compiled, const string &buffer,
|
||||
const pcre_extra &extra, vector<int> &ovector,
|
||||
CalloutContext &ctx) {
|
||||
const size_t prefix_len = g_corpora_prefix.size();
|
||||
const size_t suffix_len = g_corpora_suffix.size();
|
||||
|
||||
size_t begin_offset = prefix_len - MIN(50, prefix_len);
|
||||
size_t real_len = buffer.size();
|
||||
|
||||
if (suffix_len > 2) {
|
||||
real_len -= suffix_len - 2;
|
||||
}
|
||||
|
||||
int flags = suffix_len ? PCRE_NOTEOL : 0;
|
||||
int ret = pcre_exec(compiled.bytecode, &extra, buffer.c_str(), real_len,
|
||||
begin_offset, flags, &ovector[0], ovector.size());
|
||||
|
||||
if (!g_corpora_prefix.empty()) {
|
||||
PcreMatchSet tmp;
|
||||
tmp.swap(ctx.matches);
|
||||
|
||||
for (const auto &m : tmp) {
|
||||
unsigned from = m.first;
|
||||
unsigned to = m.second;
|
||||
if (to >= prefix_len && to <= buffer.size() - suffix_len) {
|
||||
from = from < prefix_len ? 0 : from - prefix_len;
|
||||
to -= prefix_len;
|
||||
ctx.matches.insert(make_pair(from, to));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static
|
||||
int scanOffset(const CompiledPcre &compiled, const string &buffer,
|
||||
const pcre_extra &extra, vector<int> &ovector,
|
||||
CalloutContext &ctx) {
|
||||
size_t offset = MIN(100, g_streamOffset);
|
||||
assert(offset > 0);
|
||||
|
||||
const string buf(string(offset, '\0') + buffer);
|
||||
|
||||
// First, scan our preamble so that we can discard any matches therein
|
||||
// after the real scan, later. We use PCRE_NOTEOL so that end-anchors in
|
||||
// our expression don't match at the end of the preamble.
|
||||
int ret = pcre_exec(compiled.bytecode, &extra, buf.c_str(), offset, 0,
|
||||
PCRE_NOTEOL, &ovector[0], ovector.size());
|
||||
if (ret < PCRE_ERROR_NOMATCH) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
PcreMatchSet pre_matches;
|
||||
pre_matches.swap(ctx.matches);
|
||||
|
||||
// Real scan.
|
||||
ret = pcre_exec(compiled.bytecode, &extra, buf.c_str(), buf.size(), 0, 0,
|
||||
&ovector[0], ovector.size());
|
||||
if (ret < PCRE_ERROR_NOMATCH) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Erase any matches due entirely to the preamble.
|
||||
for (const auto &m : pre_matches) {
|
||||
ctx.matches.erase(m);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool GroundTruth::run(unsigned, const CompiledPcre &compiled,
|
||||
const string &buffer, ResultSet &rs, string &error) {
|
||||
CalloutContext ctx(out);
|
||||
|
||||
pcre_extra extra;
|
||||
extra.flags = 0;
|
||||
|
||||
// Switch on callouts.
|
||||
extra.flags |= PCRE_EXTRA_CALLOUT_DATA;
|
||||
extra.callout_data = &ctx;
|
||||
|
||||
// Set the match_limit (in order to bound execution time on very complex
|
||||
// patterns)
|
||||
extra.flags |= (PCRE_EXTRA_MATCH_LIMIT | PCRE_EXTRA_MATCH_LIMIT_RECURSION);
|
||||
extra.match_limit = matchLimit;
|
||||
extra.match_limit_recursion = matchLimitRecursion;
|
||||
|
||||
#ifdef PCRE_NO_START_OPTIMIZE
|
||||
// Switch off optimizations that may result in callouts not occurring.
|
||||
extra.flags |= PCRE_NO_START_OPTIMIZE;
|
||||
#endif
|
||||
|
||||
// Ensure there's enough room in the ovector for the capture groups in this
|
||||
// pattern.
|
||||
int ovecsize = (compiled.captureCount + 1) * 3;
|
||||
ovector.resize(ovecsize);
|
||||
|
||||
int ret;
|
||||
switch (colliderMode) {
|
||||
case MODE_BLOCK:
|
||||
case MODE_STREAMING:
|
||||
case MODE_VECTORED:
|
||||
if (g_streamOffset) {
|
||||
ret = scanOffset(compiled, buffer, extra, ovector, ctx);
|
||||
} else {
|
||||
ret = scanBasic(compiled, buffer, extra, ovector, ctx);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
ret = PCRE_ERROR_NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret < PCRE_ERROR_NOMATCH) {
|
||||
error = pcreErrStr(ret);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Move matches into a ResultSet.
|
||||
for (const auto &m : ctx.matches) {
|
||||
unsigned long long from = m.first;
|
||||
unsigned long long to = m.second;
|
||||
|
||||
if (g_streamOffset) {
|
||||
// Subtract stream offset imposed by offset test.
|
||||
unsigned long long offset = min(100ull, g_streamOffset);
|
||||
assert(to >= offset);
|
||||
from -= min(offset, from);
|
||||
to -= offset;
|
||||
}
|
||||
|
||||
rs.addMatch(from, to);
|
||||
}
|
||||
|
||||
// If we have no matches, there's no further work to do.
|
||||
if (rs.matches.empty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (compiled.som) {
|
||||
filterLeftmostSom(rs);
|
||||
}
|
||||
|
||||
filterExtParams(rs, compiled);
|
||||
|
||||
// If we haven't been asked for SOM, strip the from offsets.
|
||||
if (!compiled.som) {
|
||||
set<MatchResult> endonly;
|
||||
for (const auto &m : rs.matches) {
|
||||
endonly.insert(MatchResult(0, m.to));
|
||||
}
|
||||
rs.matches.swap(endonly);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
126
tools/hscollider/GroundTruth.h
Normal file
126
tools/hscollider/GroundTruth.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef GROUNDTRUTH_H
|
||||
#define GROUNDTRUTH_H
|
||||
|
||||
#include "expressions.h"
|
||||
#include "ResultSet.h"
|
||||
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <pcre.h>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
// Thrown by GroundTruth::compile in the event of a PCRE compile failure.
|
||||
struct PcreCompileFailure {
|
||||
PcreCompileFailure(const std::string &msg_s) : msg(msg_s) {}
|
||||
std::string msg;
|
||||
};
|
||||
|
||||
// Thrown in the event of a "soft" PCRE compile failure, one that we don't want
|
||||
// to consider a ue2collider failure (e.g. "regular expression too large").
|
||||
struct SoftPcreCompileFailure : PcreCompileFailure {
|
||||
SoftPcreCompileFailure(const std::string &msg_s)
|
||||
: PcreCompileFailure(msg_s) {}
|
||||
};
|
||||
|
||||
// Struct to store everything about a PCRE. Note that the code assumes that
|
||||
// once populated, the data in this structure will remain constant while tests
|
||||
// are running, except for the bad flag (which is protected by a mutex).
|
||||
class CompiledPcre : boost::noncopyable {
|
||||
public:
|
||||
CompiledPcre() {}
|
||||
~CompiledPcre() {
|
||||
free(bytecode);
|
||||
}
|
||||
|
||||
bool is_bad() {
|
||||
std::lock_guard<std::mutex> lock(bad_mutex);
|
||||
bool val = bad;
|
||||
return val;
|
||||
}
|
||||
|
||||
void mark_bad() {
|
||||
std::lock_guard<std::mutex> lock(bad_mutex);
|
||||
bad = true;
|
||||
}
|
||||
|
||||
std::string expression;
|
||||
pcre *bytecode = nullptr;
|
||||
unsigned long long min_offset = 0;
|
||||
unsigned long long max_offset = ~0ULL;
|
||||
unsigned long long min_length = 0;
|
||||
int captureCount = 0;
|
||||
bool utf8 = false;
|
||||
bool highlander = false;
|
||||
bool prefilter = false;
|
||||
bool som = false;
|
||||
|
||||
private:
|
||||
// If a PCRE has hit its match recursion limit when scanning a corpus, we
|
||||
// mark it as bad and skip the remaining tests for it for performance
|
||||
// reasons.
|
||||
bool bad = false;
|
||||
std::mutex bad_mutex; // serialised accesses to bad flag.
|
||||
};
|
||||
|
||||
// Wrapper around libpcre to generate results for an expression and corpus.
|
||||
class GroundTruth : boost::noncopyable {
|
||||
public:
|
||||
GroundTruth(std::ostream &os, const ExpressionMap &expr,
|
||||
unsigned long limit, unsigned long limit_recursion);
|
||||
|
||||
static void global_prep();
|
||||
|
||||
std::unique_ptr<CompiledPcre> compile(unsigned id,
|
||||
bool no_callouts = false);
|
||||
|
||||
bool run(unsigned id, const CompiledPcre &compiled,
|
||||
const std::string &buffer, ResultSet &rs, std::string &error);
|
||||
|
||||
private:
|
||||
// Output stream.
|
||||
std::ostream &out;
|
||||
|
||||
// Our expression map
|
||||
const ExpressionMap &m_expr;
|
||||
|
||||
// PCRE match limit
|
||||
const unsigned long int matchLimit;
|
||||
const unsigned long int matchLimitRecursion;
|
||||
|
||||
// Persistent ovector used to run tests.
|
||||
std::vector<int> ovector;
|
||||
};
|
||||
|
||||
#endif
|
146
tools/hscollider/NfaGeneratedCorpora.cpp
Normal file
146
tools/hscollider/NfaGeneratedCorpora.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ng_corpus_properties.h"
|
||||
#include "ng_corpus_generator.h"
|
||||
#include "NfaGeneratedCorpora.h"
|
||||
#include "ExpressionParser.h"
|
||||
|
||||
#include "grey.h"
|
||||
#include "hs_compile.h"
|
||||
#include "compiler/compiler.h"
|
||||
#include "nfagraph/ng.h"
|
||||
#include "parser/parse_error.h"
|
||||
#include "parser/Parser.h"
|
||||
#include "parser/prefilter.h"
|
||||
#include "parser/unsupported.h"
|
||||
#include "util/compile_context.h"
|
||||
#include "util/compile_error.h"
|
||||
#include "util/report_manager.h"
|
||||
#include "util/target_info.h"
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
using namespace ue2;
|
||||
|
||||
NfaGeneratedCorpora::NfaGeneratedCorpora(const ExpressionMap &expr,
|
||||
const CorpusProperties &props,
|
||||
bool force_utf8_mode_in,
|
||||
bool force_prefilter_mode_in)
|
||||
: m_expr(expr), m_props(props), force_utf8_mode(force_utf8_mode_in),
|
||||
force_prefilter_mode(force_prefilter_mode_in) {
|
||||
// empty
|
||||
}
|
||||
|
||||
NfaGeneratedCorpora *NfaGeneratedCorpora::clone() const {
|
||||
return new NfaGeneratedCorpora(m_expr, m_props, force_utf8_mode,
|
||||
force_prefilter_mode);
|
||||
}
|
||||
|
||||
void NfaGeneratedCorpora::generate(unsigned id, vector<Corpus> &data) {
|
||||
ExpressionMap::const_iterator i = m_expr.find(id);
|
||||
if (i == m_expr.end()) {
|
||||
throw CorpusFailure("Expression not found.");
|
||||
}
|
||||
|
||||
string re;
|
||||
u32 hs_flags;
|
||||
hs_expr_ext ext;
|
||||
if (!readExpression(i->second, re, &hs_flags, &ext)) {
|
||||
throw CorpusFailure("Expression could not be read: " + i->second);
|
||||
}
|
||||
|
||||
if (force_utf8_mode) {
|
||||
hs_flags |= HS_FLAG_UTF8;
|
||||
}
|
||||
|
||||
if (force_prefilter_mode) {
|
||||
hs_flags |= HS_FLAG_PREFILTER;
|
||||
}
|
||||
|
||||
// Wrap the UE2 parser and compiler functionality and use it to generate
|
||||
// corpora for us.
|
||||
vector<string> c;
|
||||
|
||||
try {
|
||||
ParsedExpression pe(0, re.c_str(), hs_flags, 0, &ext);
|
||||
|
||||
// Apply prefiltering transformations if desired.
|
||||
if (pe.expr.prefilter) {
|
||||
prefilterTree(pe.component, ParseMode(hs_flags));
|
||||
}
|
||||
|
||||
// Bail on patterns with unsupported constructs.
|
||||
checkUnsupported(*pe.component);
|
||||
pe.component->checkEmbeddedStartAnchor(true);
|
||||
pe.component->checkEmbeddedEndAnchor(true);
|
||||
|
||||
CompileContext cc(false, false, get_current_target(), Grey());
|
||||
ReportManager rm(cc.grey);
|
||||
auto built_expr = buildGraph(rm, cc, pe);
|
||||
if (!built_expr.g) {
|
||||
// A more specific error should probably have been thrown by
|
||||
// buildGraph.
|
||||
throw CorpusFailure("could not build graph.");
|
||||
}
|
||||
|
||||
const auto cg =
|
||||
makeCorpusGenerator(*built_expr.g, built_expr.expr, m_props);
|
||||
cg->generateCorpus(c);
|
||||
}
|
||||
catch (const ParseError &e) {
|
||||
throw CorpusFailure("compilation failed, " + e.reason);
|
||||
}
|
||||
catch (const CompileError &e) {
|
||||
throw CorpusFailure("compilation failed, " + e.reason);
|
||||
}
|
||||
catch (const std::bad_alloc &) {
|
||||
throw CorpusFailure("out of memory.");
|
||||
}
|
||||
catch (const CorpusGenerationFailure &e) {
|
||||
// if corpus generation failed, just pass up the error message
|
||||
throw CorpusFailure("corpus generation failed: " + e.message);
|
||||
}
|
||||
catch (...) {
|
||||
throw CorpusFailure("unknown error.");
|
||||
}
|
||||
|
||||
if (c.empty()) {
|
||||
throw CorpusFailure("no corpora generated.");
|
||||
}
|
||||
|
||||
data.reserve(data.size() + c.size());
|
||||
for (const auto &e : c) {
|
||||
data.push_back(Corpus(e));
|
||||
}
|
||||
}
|
61
tools/hscollider/NfaGeneratedCorpora.h
Normal file
61
tools/hscollider/NfaGeneratedCorpora.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef NFAGENERATEDCORPORA_H
|
||||
#define NFAGENERATEDCORPORA_H
|
||||
|
||||
#include "Corpora.h"
|
||||
#include "ng_corpus_properties.h"
|
||||
#include "expressions.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// Corpora associated with a pattern set
|
||||
class NfaGeneratedCorpora : public CorporaSource {
|
||||
public:
|
||||
NfaGeneratedCorpora(const ExpressionMap &expr,
|
||||
const CorpusProperties &props, bool force_utf8_mode_in,
|
||||
bool force_prefilter_mode_in);
|
||||
|
||||
NfaGeneratedCorpora *clone() const override;
|
||||
|
||||
void generate(unsigned id, std::vector<Corpus> &data) override;
|
||||
|
||||
private:
|
||||
// Expressions handled by this corpora object
|
||||
const ExpressionMap &m_expr;
|
||||
|
||||
// CorpusProperties policy object
|
||||
CorpusProperties m_props;
|
||||
|
||||
bool force_utf8_mode;
|
||||
bool force_prefilter_mode;
|
||||
};
|
||||
|
||||
#endif
|
139
tools/hscollider/ResultSet.h
Normal file
139
tools/hscollider/ResultSet.h
Normal file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef RESULTSET_H
|
||||
#define RESULTSET_H
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
// Class representing a single match, encapsulating to/from offsets.
|
||||
class MatchResult {
|
||||
public:
|
||||
MatchResult(unsigned long long start, unsigned long long end)
|
||||
: from(start), to(end) {}
|
||||
|
||||
bool operator<(const MatchResult &a) const {
|
||||
if (from != a.from) {
|
||||
return from < a.from;
|
||||
}
|
||||
return to < a.to;
|
||||
}
|
||||
|
||||
bool operator==(const MatchResult &a) const {
|
||||
return from == a.from && to == a.to;
|
||||
}
|
||||
|
||||
unsigned long long from;
|
||||
unsigned long long to;
|
||||
};
|
||||
|
||||
enum ResultSource {
|
||||
RESULT_FROM_UE2,
|
||||
RESULT_FROM_PCRE,
|
||||
RESULT_FROM_GRAPH,
|
||||
};
|
||||
|
||||
inline
|
||||
std::ostream &operator<<(std::ostream &out, ResultSource src) {
|
||||
switch (src) {
|
||||
case RESULT_FROM_UE2:
|
||||
out << "UE2";
|
||||
break;
|
||||
case RESULT_FROM_GRAPH:
|
||||
out << "Graph";
|
||||
break;
|
||||
case RESULT_FROM_PCRE:
|
||||
out << "PCRE";
|
||||
break;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
class ResultSet {
|
||||
public:
|
||||
// Constructor.
|
||||
explicit ResultSet(ResultSource s) : src(s) {}
|
||||
|
||||
// Can be constructed with a set of end-offsets.
|
||||
ResultSet(const std::set<unsigned int> &m, ResultSource s) : src(s) {
|
||||
for (const auto &offset : m) {
|
||||
matches.emplace(0, offset);
|
||||
}
|
||||
}
|
||||
|
||||
// Equality.
|
||||
bool operator==(const ResultSet &other) const {
|
||||
return uoom == other.uoom &&
|
||||
match_after_halt == other.match_after_halt &&
|
||||
invalid_id == other.invalid_id &&
|
||||
matches == other.matches;
|
||||
}
|
||||
|
||||
// Inequality.
|
||||
bool operator!=(const ResultSet &other) const { return !(*this == other); }
|
||||
|
||||
// Add a match.
|
||||
void addMatch(unsigned long long from, unsigned long long to,
|
||||
int block = 0) {
|
||||
MatchResult m(from, to);
|
||||
matches.insert(m);
|
||||
|
||||
if (matches_by_block[block].find(m) != matches_by_block[block].end()) {
|
||||
dupe_matches.insert(m);
|
||||
} else {
|
||||
matches_by_block[block].insert(m);
|
||||
}
|
||||
}
|
||||
|
||||
// Unexpected out of order match seen.
|
||||
bool uoom = false;
|
||||
|
||||
// A match was received after termination was requested.
|
||||
bool match_after_halt = false;
|
||||
|
||||
// A match from an invalid ID was seen.
|
||||
bool invalid_id = false;
|
||||
|
||||
// Ordered set of matches.
|
||||
std::set<MatchResult> matches;
|
||||
|
||||
// Matches grouped by stream write/block that we see them in.
|
||||
std::map<int, std::set<MatchResult>> matches_by_block;
|
||||
|
||||
// Dupe matches that we have seen.
|
||||
std::set<MatchResult> dupe_matches;
|
||||
|
||||
/* Where these results came from (does not take part in comparisions) */
|
||||
ResultSource src;
|
||||
};
|
||||
|
||||
#endif
|
95
tools/hscollider/Thread.cpp
Normal file
95
tools/hscollider/Thread.cpp
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "Thread.h"
|
||||
#include "common.h"
|
||||
#include "sig.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
static const size_t COLLIDER_THREAD_STACK_SIZE = 8192 * 1024;
|
||||
|
||||
void Thread::start() {
|
||||
// Some systems, notably Mac OS X, use a default stack size that is
|
||||
// smaller than what we want (particularly given that we're planning on
|
||||
// running PCRE, which recurses inside pcre_exec). We attempt to
|
||||
// increase it to 8MB.
|
||||
int ret;
|
||||
pthread_attr_t attr;
|
||||
ret = pthread_attr_init(&attr);
|
||||
if (ret) {
|
||||
std::cerr << "pthread_attr_init failed" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
size_t stacksize = 0;
|
||||
ret = pthread_attr_getstacksize(&attr, &stacksize);
|
||||
if (ret) {
|
||||
std::cerr << "Warning: can't query stack size with "
|
||||
"pthread_attr_getstacksize" << std::endl;
|
||||
goto create_thread;
|
||||
}
|
||||
|
||||
if (stacksize < COLLIDER_THREAD_STACK_SIZE) {
|
||||
ret = pthread_attr_setstacksize(&attr, COLLIDER_THREAD_STACK_SIZE);
|
||||
if (ret) {
|
||||
std::cerr << "Warning: pthread_attr_setstacksize failed, "
|
||||
"unable to set stack size to "
|
||||
<< COLLIDER_THREAD_STACK_SIZE << " bytes." << std::endl;
|
||||
// Fall through: this isn't necessarily fatal (yet!)
|
||||
}
|
||||
}
|
||||
|
||||
create_thread:
|
||||
ret = pthread_create(&thread, &attr, &runThread, this);
|
||||
if (ret) {
|
||||
std::cerr << "pthread_create failed for thread id " << thread_id
|
||||
<< std::endl;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Dispatch
|
||||
void *Thread::runThread(void *thr) {
|
||||
if (!no_signal_handler) {
|
||||
setSignalStack();
|
||||
}
|
||||
((Thread *)thr)->run();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void Thread::join() { pthread_join(thread, nullptr); }
|
||||
|
||||
Thread::Thread(size_t num) : thread_id(num) {}
|
||||
|
||||
Thread::~Thread() {}
|
60
tools/hscollider/Thread.h
Normal file
60
tools/hscollider/Thread.h
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef UE2COLLIDER_THREAD_H
|
||||
#define UE2COLLIDER_THREAD_H
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
class Thread : boost::noncopyable {
|
||||
public:
|
||||
explicit Thread(size_t num);
|
||||
virtual ~Thread();
|
||||
|
||||
virtual void start();
|
||||
|
||||
// Dispatch
|
||||
static void *runThread(void *thr);
|
||||
|
||||
virtual void join();
|
||||
|
||||
// Implemented by subclasses.
|
||||
virtual void run() = 0;
|
||||
|
||||
protected:
|
||||
const size_t thread_id;
|
||||
|
||||
private:
|
||||
pthread_t thread;
|
||||
};
|
||||
|
||||
#endif // UE2COLLIDER_THREAD_H
|
1026
tools/hscollider/UltimateTruth.cpp
Normal file
1026
tools/hscollider/UltimateTruth.cpp
Normal file
File diff suppressed because it is too large
Load Diff
142
tools/hscollider/UltimateTruth.h
Normal file
142
tools/hscollider/UltimateTruth.h
Normal file
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ULTIMATETRUTH_H
|
||||
#define ULTIMATETRUTH_H
|
||||
|
||||
#include "expressions.h"
|
||||
|
||||
#include "hs.h"
|
||||
|
||||
#include <memory>
|
||||
#include <ostream>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/core/noncopyable.hpp>
|
||||
|
||||
namespace ue2 {
|
||||
|
||||
struct Grey;
|
||||
|
||||
} // namespace ue2
|
||||
|
||||
class HyperscanDB;
|
||||
class ResultSet;
|
||||
|
||||
// Wrapper around ue2 to generate results for an expression and corpus.
|
||||
class UltimateTruth : boost::noncopyable {
|
||||
public:
|
||||
UltimateTruth(std::ostream &os, const ExpressionMap &expr,
|
||||
const hs_platform_info *plat, const ue2::Grey &grey,
|
||||
unsigned streamBlocks = 0);
|
||||
|
||||
~UltimateTruth();
|
||||
|
||||
std::shared_ptr<HyperscanDB> compile(const std::set<unsigned> &ids,
|
||||
std::string &error) const;
|
||||
|
||||
bool saveDatabase(const HyperscanDB &db,
|
||||
const std::string &filename) const;
|
||||
|
||||
std::shared_ptr<HyperscanDB>
|
||||
loadDatabase(const std::string &filename,
|
||||
const std::set<unsigned> &ids) const;
|
||||
|
||||
// Are we runnable? (i.e. not xcompiling)
|
||||
bool runnable() const {
|
||||
return !m_xcompile;
|
||||
}
|
||||
|
||||
bool run(unsigned id, std::shared_ptr<const HyperscanDB> db,
|
||||
const std::string &buffer, bool single_pattern, unsigned align,
|
||||
ResultSet &rs);
|
||||
|
||||
// Returns a value completely representing this object's compile options.
|
||||
unsigned int describe() const;
|
||||
|
||||
std::string dbFilename(const std::set<unsigned int> &ids) const;
|
||||
|
||||
private:
|
||||
bool blockScan(const HyperscanDB &db, const std::string &buffer,
|
||||
size_t align, match_event_handler callback, void *ctx,
|
||||
ResultSet *rs);
|
||||
bool streamingScan(const HyperscanDB &db, const std::string &buffer,
|
||||
size_t align, match_event_handler callback, void *ctx,
|
||||
ResultSet *rs);
|
||||
bool vectoredScan(const HyperscanDB &db, const std::string &buffer,
|
||||
size_t align, match_event_handler callback, void *ctx,
|
||||
ResultSet *rs);
|
||||
|
||||
char *setupScanBuffer(const char *buf, size_t len, size_t align);
|
||||
|
||||
char *setupVecScanBuffer(const char *buf, size_t len, size_t align,
|
||||
unsigned int block_id);
|
||||
|
||||
bool allocScratch(std::shared_ptr<const HyperscanDB> db);
|
||||
|
||||
bool cloneScratch(void);
|
||||
|
||||
std::string dbSettingsHash(const std::set<unsigned int> &ids) const;
|
||||
|
||||
const ue2::Grey &grey;
|
||||
|
||||
// Output stream.
|
||||
std::ostream &out;
|
||||
|
||||
// Our expression map
|
||||
const ExpressionMap &m_expr;
|
||||
|
||||
// Are we cross-compiling, and therefore unable to scan at all?
|
||||
bool m_xcompile;
|
||||
|
||||
// Our mode flags to pass into the compiler: calculated from streaming,
|
||||
// etc.
|
||||
unsigned m_mode;
|
||||
|
||||
// In streaming mode, what is the number of blocks to chop data into?
|
||||
unsigned m_streamBlocks;
|
||||
|
||||
// Scratch space for Hyperscan.
|
||||
hs_scratch_t *scratch;
|
||||
|
||||
// Temporary scan buffer used for realigned scanning
|
||||
std::vector<char> m_scanBuf;
|
||||
|
||||
std::vector<std::vector<char> > raw_blocks; /* temp scan buffers used by
|
||||
* vectored mode */
|
||||
|
||||
// Last database we successfully allocated scratch for, so that we can
|
||||
// avoid unnecessarily reallocating for it.
|
||||
std::shared_ptr<const HyperscanDB> last_db;
|
||||
|
||||
const hs_platform_info *platform;
|
||||
};
|
||||
|
||||
#endif
|
570
tools/hscollider/args.cpp
Normal file
570
tools/hscollider/args.cpp
Normal file
@@ -0,0 +1,570 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ng_corpus_properties.h"
|
||||
#include "args.h"
|
||||
#include "common.h"
|
||||
#include "cross_compile.h"
|
||||
#include "util/expression_path.h"
|
||||
#include "util/string_util.h"
|
||||
|
||||
#include "grey.h"
|
||||
#include "ue2common.h"
|
||||
#include "hs_compile.h" // for HS_MODE_*
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <getopt.h>
|
||||
|
||||
#define xstr(s) str(s)
|
||||
#define str(s) #s
|
||||
|
||||
using namespace ue2;
|
||||
using namespace std;
|
||||
|
||||
// display usage information, with an optional error
|
||||
static
|
||||
void usage(const char *name, const char *error) {
|
||||
printf("Usage: %s [OPTIONS...]\n\n", name);
|
||||
printf("General Options:\n\n");
|
||||
printf(" -h Display help and exit.\n");
|
||||
printf(" -G OVERRIDES Overrides for the grey box.\n");
|
||||
printf(" -e PATH Path to expression directory or file.\n");
|
||||
printf(" -s FILE Signature file to use.\n");
|
||||
printf(" -z NUM Signature ID to use.\n");
|
||||
printf(" -c FILE Load corpora from FILE rather than using "
|
||||
"generator.\n");
|
||||
printf(" -w FILE After running, save corpora (with matches) to "
|
||||
"FILE.\n");
|
||||
printf(" -a [BAND] Compile all expressions in UE2 (but still match "
|
||||
"singly).\n");
|
||||
printf(" If BAND, compile patterns in groups of size "
|
||||
"BAND.\n");
|
||||
printf(" -t NUM Use streaming mode, split data into ~NUM "
|
||||
"blocks.\n");
|
||||
printf(" -V NUM Use vectored mode, split data into ~NUM "
|
||||
"blocks.\n");
|
||||
printf(" -Z {R or 0-%d} Only test one alignment, either as given or "
|
||||
"'R' for random.\n", MAX_MAX_UE2_ALIGN - 1);
|
||||
printf(" -q Quiet; display only match differences, no other "
|
||||
"failures.\n");
|
||||
printf(" -v Verbose; display successes as well as "
|
||||
"failures.\n");
|
||||
printf("\n");
|
||||
printf("Pattern flags:\n");
|
||||
printf("\n");
|
||||
printf(" -8 Force UTF8 mode on all patterns.\n");
|
||||
printf(" -L Apply HS_FLAG_SOM_LEFTMOST to all patterns.\n");
|
||||
printf(" -E DISTANCE Match all patterns within edit distance"
|
||||
" DISTANCE.\n");
|
||||
printf(" --prefilter Apply HS_FLAG_PREFILTER to all patterns.\n");
|
||||
printf("\n");
|
||||
printf("Testing mode options:\n");
|
||||
printf("\n");
|
||||
printf(" -d NUM Set SOM precision mode (default: 8 (large)).\n");
|
||||
printf(" -O NUM In streaming mode, set initial offset to NUM.\n");
|
||||
printf(" -k NUM Terminate callback after NUM matches per "
|
||||
"pattern.\n");
|
||||
printf(" --copy-scratch Copy scratch after each scan call.\n");
|
||||
printf(" --copy-stream Copy stream state after each scan call.\n");
|
||||
printf(" --compress-expand Compress and expand stream state after each "
|
||||
"scan call.\n");
|
||||
printf(" --compress-reset-expand Compress, reset and expand stream state "
|
||||
"after each scan call.\n");
|
||||
printf(" --mangle-scratch Mangle scratch space after each scan call.\n");
|
||||
printf(" --no-nfa Disable NFA graph execution engine.\n");
|
||||
printf(" --no-pcre Disable PCRE engine.\n");
|
||||
printf(" --test-nfa Disable UE2 engine (test NFA against PCRE).\n");
|
||||
printf(" --abort-on-fail Abort, rather than exit, on failure.\n");
|
||||
printf(" --no-signal-handler Do not handle handle signals (to generate "
|
||||
"backtraces).\n");
|
||||
printf("\n");
|
||||
printf("Memory and resource control options:\n");
|
||||
printf("\n");
|
||||
printf(" -T NUM Run with NUM threads.\n");
|
||||
printf(" -M NUM Set maximum memory allocated to NUM megabytes per"
|
||||
" thread.\n");
|
||||
printf(" (0 means no limit, default is 1000 MB).\n");
|
||||
printf(" -m NUM Set PCRE_MATCH_LIMIT (default: %lu).\n",
|
||||
DEFAULT_PCRE_MATCH_LIMIT);
|
||||
printf(" -r NUM Set PCRE_MATCH_LIMIT_RECURSION (default: %lu).\n",
|
||||
DEFAULT_PCRE_MATCH_RECURSION_LIMIT);
|
||||
printf("\n");
|
||||
printf("Cross-compiling:\n");
|
||||
printf("\n");
|
||||
printf(" -x NAME Cross-compile for arch NAME.\n");
|
||||
printf(" -i DIR Don't compile, load from files in DIR "
|
||||
"instead.\n");
|
||||
printf(" -o DIR After compiling, save to files in DIR.\n");
|
||||
printf("\n");
|
||||
printf("Corpus generation options:\n");
|
||||
printf("\n");
|
||||
printf(" -n NUM Max corpora to generate for a given signature "
|
||||
"(default: %u).\n", DEFAULT_CORPUS_GENERATOR_LIMIT);
|
||||
printf(" -R NUM Random seed to use (default: seeded from "
|
||||
"time()).\n");
|
||||
printf(" -p NUM,NUM,NUM Percentage probabilities of "
|
||||
"(match,unmatch,random) char.\n");
|
||||
printf(" -C NUM,NUM Follow cycles (min,max) times.\n");
|
||||
printf(" -P NUM,NUM Add a random prefix of length between "
|
||||
"(min,max).\n");
|
||||
printf(" -S NUM,NUM Add a random suffix of length between "
|
||||
"(min,max).\n");
|
||||
printf(" -D NUM Apply an edit distance (default: 0) to each "
|
||||
"corpus.\n");
|
||||
printf(" -b NUM Limit alphabet to NUM characters, starting at "
|
||||
"lower-case 'a'.\n");
|
||||
printf("\n");
|
||||
|
||||
if (error) {
|
||||
printf("Error: %s\n", error);
|
||||
}
|
||||
}
|
||||
|
||||
void processArgs(int argc, char *argv[], CorpusProperties &corpus_gen_prop,
|
||||
vector<string> *corpora, UNUSED Grey *grey,
|
||||
unique_ptr<hs_platform_info> *plat_out) {
|
||||
static const char options[]
|
||||
= "-ab:cC:d:D:e:E:G:hi:k:Lm:M:n:o:O:p:P:qr:R:S:s:t:T:vV:w:x:X:Y:z:Z:8";
|
||||
s32 in_multi = 0;
|
||||
s32 in_corpora = 0;
|
||||
int pcreFlag = 1;
|
||||
int nfaFlag = 1;
|
||||
int ue2Flag = 1;
|
||||
int copyScratch = 0;
|
||||
int copyStream = 0;
|
||||
int mangleScratch = 0;
|
||||
int compressFlag = 0;
|
||||
int compressResetFlag = 0;
|
||||
static const struct option longopts[] = {
|
||||
{"copy-scratch", 0, ©Scratch, 1},
|
||||
{"copy-stream", 0, ©Stream, 1},
|
||||
{"mangle-scratch", 0, &mangleScratch, 1},
|
||||
{"prefilter", 0, &force_prefilter, 1},
|
||||
{"no-pcre", 0, &pcreFlag, 0},
|
||||
{"no-nfa", 0, &nfaFlag, 0},
|
||||
{"test-nfa", 0, &ue2Flag, 0},
|
||||
{"abort-on-fail", 0, &abort_on_failure, 1},
|
||||
{"no-signal-handler", 0, &no_signal_handler, 1},
|
||||
{"compress-expand", 0, &compressFlag, 1},
|
||||
{"compress-reset-expand", 0, &compressResetFlag, 1},
|
||||
{nullptr, 0, nullptr, 0}};
|
||||
|
||||
for (;;) {
|
||||
int c = getopt_long(argc, argv, options, longopts, nullptr);
|
||||
if (c < 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
switch (c) {
|
||||
case 'a':
|
||||
g_ue2CompileAll = true;
|
||||
in_multi = 2;
|
||||
break;
|
||||
case 'b': {
|
||||
unsigned sz;
|
||||
if (!fromString(optarg, sz) || sz > 256) {
|
||||
usage(argv[0], "Must provide an integer argument <= 256"
|
||||
"to '-b' flag");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.alphabetSize = sz;
|
||||
break;
|
||||
}
|
||||
case 'c':
|
||||
in_corpora = 2;
|
||||
break;
|
||||
case 'C': {
|
||||
vector<unsigned> nums;
|
||||
if (!strToList(optarg, nums) || nums.size() != 2
|
||||
|| nums[0] > nums[1]) {
|
||||
usage(argv[0], "Cycle limit '-C' argument takes a list of "
|
||||
" integers: MIN,MAX");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.setCycleLimit(nums[0], nums[1]);
|
||||
break;
|
||||
}
|
||||
case 'd': {
|
||||
unsigned dist;
|
||||
if (!fromString(optarg, dist)) {
|
||||
usage(argv[0],
|
||||
"Must provide an integer argument to '-d' flag");
|
||||
exit(1);
|
||||
}
|
||||
switch (dist) {
|
||||
case 2:
|
||||
somPrecisionMode = HS_MODE_SOM_HORIZON_SMALL;
|
||||
break;
|
||||
case 4:
|
||||
somPrecisionMode = HS_MODE_SOM_HORIZON_MEDIUM;
|
||||
break;
|
||||
case 8:
|
||||
somPrecisionMode = HS_MODE_SOM_HORIZON_LARGE;
|
||||
break;
|
||||
default:
|
||||
usage(argv[0], "SOM precision must be 2, 4 or 8");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'D': {
|
||||
unsigned dist;
|
||||
if (!fromString(optarg, dist)) {
|
||||
usage(argv[0],
|
||||
"Must provide an integer argument to '-D' flag");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.editDistance = dist;
|
||||
break;
|
||||
}
|
||||
case 'e':
|
||||
g_exprPath.assign(optarg);
|
||||
break;
|
||||
case 'E': {
|
||||
u32 dist;
|
||||
if (!fromString(optarg, dist)) {
|
||||
usage(argv[0], "Argument to '-E' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
force_edit_distance = true;
|
||||
edit_distance = dist;
|
||||
break;
|
||||
}
|
||||
#ifndef RELEASE_BUILD
|
||||
case 'G':
|
||||
applyGreyOverrides(grey, string(optarg));
|
||||
break;
|
||||
#endif
|
||||
case 'h':
|
||||
usage(argv[0], nullptr);
|
||||
exit(0);
|
||||
case 'i':
|
||||
loadDatabases = true;
|
||||
serializePath = optarg;
|
||||
break;
|
||||
case 'k':
|
||||
if (!fromString(optarg, limit_matches) || limit_matches < 1) {
|
||||
usage(argv[0],
|
||||
"Must provide a positive integer argument to '-k' "
|
||||
"flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
somFlags = HS_FLAG_SOM_LEFTMOST;
|
||||
break;
|
||||
case 'm':
|
||||
if (!fromString(optarg, g_matchLimit) || g_matchLimit < 1) {
|
||||
usage(argv[0],
|
||||
"Must provide a positive integer argument to '-m' "
|
||||
"flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
if (!fromString(optarg, g_memoryLimit)) {
|
||||
usage(argv[0],
|
||||
"Must provide a positive (or zero) integer argument "
|
||||
"to '-M' flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'n': {
|
||||
unsigned int count;
|
||||
if (!fromString(optarg, count)) {
|
||||
usage(argv[0], "Argument to '-n' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.corpusLimit = count;
|
||||
break;
|
||||
}
|
||||
case 'o':
|
||||
saveDatabases = true;
|
||||
serializePath = optarg;
|
||||
break;
|
||||
case 'O':
|
||||
if (!fromString(optarg, g_streamOffset)) {
|
||||
usage(argv[0],
|
||||
"Argument '-O' flag must be a positive integer");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'p': {
|
||||
vector<unsigned> prob;
|
||||
if (!strToList(optarg, prob) || prob.size() != 3) {
|
||||
usage(argv[0], "Probabilities '-p' argument takes a list "
|
||||
"of three integers: MATCH,UNMATCH,RANDOM");
|
||||
exit(1);
|
||||
}
|
||||
if (!corpus_gen_prop.setPercentages(prob[0], prob[1],
|
||||
prob[2])) {
|
||||
usage(argv[0],
|
||||
"Unable to set corpus generator probabilities.");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'P': {
|
||||
vector<unsigned> nums;
|
||||
if (!strToList(optarg, nums) || nums.size() != 2
|
||||
|| nums[0] > nums[1]) {
|
||||
usage(argv[0], "Prefix '-P' argument takes a list of two"
|
||||
" integers: MIN,MAX");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.prefixRange = min_max(nums[0], nums[1]);
|
||||
break;
|
||||
}
|
||||
case 'q':
|
||||
g_quiet++;
|
||||
break;
|
||||
case 'r':
|
||||
if (!fromString(optarg, g_matchLimitRecursion)
|
||||
|| g_matchLimitRecursion < 1) {
|
||||
usage(argv[0], "Must provide a positive integer argument "
|
||||
"to '-r' flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'R': {
|
||||
if (!fromString(optarg, randomSeed)) {
|
||||
usage(argv[0], "Argument to '-R' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.seed(randomSeed);
|
||||
break;
|
||||
}
|
||||
case 's':
|
||||
g_signatureFiles.push_back(optarg);
|
||||
break;
|
||||
case 'S': {
|
||||
vector<unsigned> nums;
|
||||
if (!strToList(optarg, nums) || nums.size() != 2 ||
|
||||
nums[0] > nums[1]) {
|
||||
usage(argv[0], "Suffix '-S' argument takes a list of two"
|
||||
" integers: MIN,MAX");
|
||||
exit(1);
|
||||
}
|
||||
corpus_gen_prop.suffixRange = min_max(nums[0], nums[1]);
|
||||
break;
|
||||
}
|
||||
case 't':
|
||||
if (colliderMode != MODE_BLOCK) {
|
||||
usage(argv[0], "You can only use one mode at a time!");
|
||||
exit(1);
|
||||
}
|
||||
colliderMode = MODE_STREAMING;
|
||||
if (!fromString(optarg, g_streamBlocks) || g_streamBlocks < 1) {
|
||||
usage(argv[0], "Must provide a positive integer argument "
|
||||
"to '-t' flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'T':
|
||||
if (!fromString(optarg, numThreads) || numThreads < 1) {
|
||||
usage(argv[0], "Must provide a positive integer argument "
|
||||
"to '-T' flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
if (g_verbose) {
|
||||
echo_matches = true;
|
||||
}
|
||||
g_verbose = true;
|
||||
break;
|
||||
case 'V':
|
||||
if (colliderMode != MODE_BLOCK) {
|
||||
usage(argv[0], "You can only use one mode at a time!");
|
||||
exit(1);
|
||||
}
|
||||
colliderMode = MODE_VECTORED;
|
||||
if (!fromString(optarg, g_streamBlocks) || g_streamBlocks < 1) {
|
||||
usage(argv[0], "Must provide a positive integer argument "
|
||||
"to '-t' flag");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'w':
|
||||
saveCorpora = true;
|
||||
saveCorporaFile = optarg;
|
||||
break;
|
||||
case 'x':
|
||||
*plat_out = xcompileReadMode(optarg);
|
||||
if (!*plat_out) {
|
||||
usage(argv[0], xcompileUsage().c_str());
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'X': {
|
||||
u32 count;
|
||||
if (!fromString(optarg, count)) {
|
||||
usage(argv[0], "Argument to '-X' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
g_corpora_prefix.insert(g_corpora_prefix.end(), count, '~');
|
||||
break;
|
||||
}
|
||||
case 'Y':
|
||||
{
|
||||
u32 count;
|
||||
if (!fromString(optarg, count)) {
|
||||
usage(argv[0], "Argument to '-Y' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
g_corpora_suffix.insert(g_corpora_suffix.end(), count, '~');
|
||||
break;
|
||||
}
|
||||
case 'z':
|
||||
if (!strToList(optarg, g_signatures)) {
|
||||
usage(argv[0],
|
||||
"Argument to '-z' flag must be a list of integers");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'Z':
|
||||
static constexpr unsigned ALIGN_LIMIT = MAX_MAX_UE2_ALIGN - 1;
|
||||
if (optarg == string("R")) {
|
||||
// Random min alignment selected.
|
||||
use_random_alignment = true;
|
||||
break;
|
||||
} else if (!fromString(optarg, min_ue2_align)
|
||||
|| min_ue2_align > ALIGN_LIMIT) {
|
||||
usage(argv[0], "Argument must be 'R' or numeric < "
|
||||
xstr(MAX_MAX_UE2_ALIGN) " to '-Z'");
|
||||
exit(1);
|
||||
}
|
||||
max_ue2_align = min_ue2_align + 1;
|
||||
break;
|
||||
case '8':
|
||||
force_utf8 = true;
|
||||
break;
|
||||
case 1:
|
||||
if (in_multi) {
|
||||
if (!fromString(optarg, multicompile_bands)) {
|
||||
usage(argv[0],
|
||||
"Argument to '-a' flag must be an integer");
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
} else if (in_corpora) {
|
||||
corpora->push_back(optarg);
|
||||
in_corpora = 2;
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
usage(argv[0], "Unrecognised command line argument.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
in_multi = MAX(0, in_multi - 1);
|
||||
in_corpora = MAX(0, in_corpora - 1);
|
||||
}
|
||||
|
||||
if (g_streamOffset && !g_streamBlocks) {
|
||||
usage(argv[0], "stream offset requires streams");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (g_exprPath.empty() && !g_signatureFiles.empty()) {
|
||||
/* attempt to infer an expression directory */
|
||||
for (const auto &fname : g_signatureFiles) {
|
||||
string exprPath = inferExpressionPath(fname);
|
||||
if (!g_exprPath.empty() && exprPath != g_exprPath) {
|
||||
usage(argv[0], "Only one expression path is allowed.");
|
||||
}
|
||||
g_exprPath.assign(exprPath);
|
||||
}
|
||||
}
|
||||
|
||||
// Must have a valid expression path
|
||||
if (g_exprPath.empty()) {
|
||||
usage(argv[0], "Must specify an expression path with the -e option.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// If we've been handed an expr file and no restrictions, use 'em all!
|
||||
if (!isDir(g_exprPath) && isFile(g_exprPath) && g_signatureFiles.empty()
|
||||
&& g_signatures.empty()) {
|
||||
g_allSignatures = true;
|
||||
}
|
||||
|
||||
// Must have a valid signature file
|
||||
if (g_signatureFiles.empty() && g_signatures.empty() && !g_allSignatures) {
|
||||
usage(argv[0], "Must specify a signature file with the -s option.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Cannot ask for both loading and saving
|
||||
if (loadDatabases && saveDatabases) {
|
||||
usage(argv[0], "You cannot both load and save databases.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Cannot ask for cross-compile and loading
|
||||
if (loadDatabases && *plat_out) {
|
||||
usage(argv[0], "You cannot both load and xcompile of databases.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// need at least two pattern engines active
|
||||
if (nfaFlag + pcreFlag + ue2Flag < 2) {
|
||||
usage(argv[0], "At least two pattern engines should be active.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (copyStream && !g_streamBlocks) {
|
||||
usage(argv[0], "Copying streams only makes sense in streaming mode.");
|
||||
exit(1);
|
||||
}
|
||||
if (compressFlag && compressResetFlag) {
|
||||
usage(argv[0],
|
||||
"Only use one of --compress-expand and --compress-reset-expand.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// set booleans appropriately
|
||||
use_NFA = (bool) nfaFlag;
|
||||
use_PCRE = (bool) pcreFlag;
|
||||
use_UE2 = (bool) ue2Flag;
|
||||
use_copy_scratch = (bool) copyScratch;
|
||||
use_copy_stream = (bool) copyStream;
|
||||
use_mangle_scratch = (bool) mangleScratch;
|
||||
use_compress_expand = (bool)compressFlag;
|
||||
use_compress_reset_expand = (bool)compressResetFlag;
|
||||
}
|
46
tools/hscollider/args.h
Normal file
46
tools/hscollider/args.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ARGS_H
|
||||
#define ARGS_H
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace ue2 {
|
||||
struct Grey;
|
||||
}
|
||||
struct hs_platform_info;
|
||||
class CorpusProperties;
|
||||
|
||||
void processArgs(int argc, char *argv[], CorpusProperties &corpus_gen_prop,
|
||||
std::vector<std::string> *corpora, ue2::Grey *grey,
|
||||
std::unique_ptr<hs_platform_info> *plat_out);
|
||||
|
||||
#endif
|
92
tools/hscollider/common.h
Normal file
92
tools/hscollider/common.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
enum ColliderMode {
|
||||
MODE_BLOCK,
|
||||
MODE_STREAMING,
|
||||
MODE_VECTORED
|
||||
};
|
||||
|
||||
extern unsigned numThreads;
|
||||
extern enum ColliderMode colliderMode;
|
||||
extern unsigned int somFlags;
|
||||
extern bool loadDatabases;
|
||||
extern bool saveDatabases;
|
||||
extern bool saveCorpora;
|
||||
extern std::string saveCorporaFile;
|
||||
extern std::string serializePath;
|
||||
extern bool echo_matches;
|
||||
extern int g_quiet;
|
||||
extern bool g_verbose;
|
||||
extern std::string g_exprPath;
|
||||
extern std::vector<std::string> g_signatureFiles;
|
||||
extern bool g_allSignatures;
|
||||
extern bool g_ue2CompileAll;
|
||||
extern unsigned g_streamBlocks;
|
||||
extern unsigned long long g_streamOffset;
|
||||
extern std::string g_corpora_prefix;
|
||||
extern std::string g_corpora_suffix;
|
||||
extern unsigned multicompile_bands;
|
||||
extern std::string g_corporaFile;
|
||||
extern std::vector<unsigned> g_signatures;
|
||||
extern unsigned long int g_matchLimit;
|
||||
extern unsigned long int g_matchLimitRecursion;
|
||||
extern unsigned min_ue2_align;
|
||||
extern unsigned max_ue2_align;
|
||||
extern size_t g_memoryLimit;
|
||||
extern bool force_utf8;
|
||||
extern int force_prefilter;
|
||||
extern unsigned somPrecisionMode;
|
||||
extern unsigned limit_matches;
|
||||
extern unsigned randomSeed;
|
||||
extern bool use_random_alignment;
|
||||
extern bool use_PCRE;
|
||||
extern bool use_NFA;
|
||||
extern bool use_UE2;
|
||||
extern bool use_copy_scratch;
|
||||
extern bool use_copy_stream;
|
||||
extern bool use_mangle_scratch;
|
||||
extern bool use_compress_expand;
|
||||
extern bool use_compress_reset_expand;
|
||||
extern int abort_on_failure;
|
||||
extern int no_signal_handler;
|
||||
extern bool force_edit_distance;
|
||||
extern unsigned edit_distance;
|
||||
|
||||
// Constants
|
||||
static const unsigned long int DEFAULT_PCRE_MATCH_LIMIT = 10*1000*1000;
|
||||
static const unsigned long int DEFAULT_PCRE_MATCH_RECURSION_LIMIT = 10000;
|
||||
#define MAX_MAX_UE2_ALIGN 64
|
||||
#endif
|
63
tools/hscollider/limit.cpp
Normal file
63
tools/hscollider/limit.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "limit.h"
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#if defined(HAVE_SETRLIMIT)
|
||||
#include <cerrno>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <sys/resource.h>
|
||||
|
||||
void setMemoryLimit(size_t mbytes) {
|
||||
size_t bytes = mbytes * 1024 * 1024;
|
||||
|
||||
struct rlimit r;
|
||||
r.rlim_cur = bytes;
|
||||
r.rlim_max = bytes;
|
||||
|
||||
int rv = setrlimit(RLIMIT_DATA, &r);
|
||||
if (rv != 0) {
|
||||
std::cerr << "setrlimit(RLIMIT_DATA, ...) failed: " <<
|
||||
strerror(errno) << std::endl;
|
||||
}
|
||||
|
||||
rv = setrlimit(RLIMIT_AS, &r);
|
||||
if (rv != 0) {
|
||||
std::cerr << "setrlimit(RLIMIT_AS, ...) failed: " <<
|
||||
strerror(errno) << std::endl;
|
||||
}
|
||||
}
|
||||
#else // no setrlimit
|
||||
void setMemoryLimit(size_t) {}
|
||||
#endif
|
36
tools/hscollider/limit.h
Normal file
36
tools/hscollider/limit.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef LIMIT_H
|
||||
#define LIMIT_H
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
void setMemoryLimit(size_t mbytes);
|
||||
|
||||
#endif // LIMIT_H
|
2002
tools/hscollider/main.cpp
Normal file
2002
tools/hscollider/main.cpp
Normal file
File diff suppressed because it is too large
Load Diff
90
tools/hscollider/pcre_util.cpp
Normal file
90
tools/hscollider/pcre_util.cpp
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "pcre_util.h"
|
||||
|
||||
#include "hs.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <pcre.h> /* for pcre flags */
|
||||
|
||||
bool getPcreFlags(unsigned int hs_flags, unsigned int *flags,
|
||||
bool *highlander, bool *prefilter, bool *som) {
|
||||
assert(flags);
|
||||
assert(highlander);
|
||||
assert(prefilter);
|
||||
assert(som);
|
||||
*flags = 0;
|
||||
*highlander = false;
|
||||
*prefilter = false;
|
||||
*som = false;
|
||||
|
||||
if (hs_flags & HS_FLAG_CASELESS) {
|
||||
*flags |= PCRE_CASELESS;
|
||||
hs_flags &= ~HS_FLAG_CASELESS;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_DOTALL) {
|
||||
*flags |= PCRE_DOTALL;
|
||||
hs_flags &= ~HS_FLAG_DOTALL;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_MULTILINE) {
|
||||
*flags |= PCRE_MULTILINE;
|
||||
hs_flags &= ~HS_FLAG_MULTILINE;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_UCP) {
|
||||
*flags |= PCRE_UCP;
|
||||
hs_flags &= ~HS_FLAG_UCP;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_UTF8) {
|
||||
*flags |= PCRE_UTF8;
|
||||
hs_flags &= ~HS_FLAG_UTF8;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_SINGLEMATCH) {
|
||||
*highlander = true;
|
||||
hs_flags &= ~HS_FLAG_SINGLEMATCH;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_PREFILTER) {
|
||||
*prefilter = true;
|
||||
hs_flags &= ~HS_FLAG_PREFILTER;
|
||||
}
|
||||
if (hs_flags & HS_FLAG_SOM_LEFTMOST) {
|
||||
*som = true;
|
||||
hs_flags &= ~HS_FLAG_SOM_LEFTMOST;
|
||||
}
|
||||
|
||||
// Flags that are irrelevant to PCRE.
|
||||
hs_flags &= ~HS_FLAG_ALLOWEMPTY;
|
||||
|
||||
if (hs_flags) {
|
||||
// You've added new flags, haven't you?
|
||||
assert(0);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
41
tools/hscollider/pcre_util.h
Normal file
41
tools/hscollider/pcre_util.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef PCRE_UTIL_H
|
||||
#define PCRE_UTIL_H
|
||||
|
||||
/** Translates the given hyperscan flags into pcre flags (where appropriate)
|
||||
* and other bools (for flags which are not directly translateable).
|
||||
*
|
||||
* Returns false if an unknown hyperscan flag is encountered.
|
||||
*/
|
||||
bool getPcreFlags(unsigned int hs_flags, unsigned int *pcre_flags,
|
||||
bool *highlander, bool *prefilter, bool *som);
|
||||
|
||||
#endif /* PCRE_UTIL_H */
|
||||
|
185
tools/hscollider/sig.cpp
Normal file
185
tools/hscollider/sig.cpp
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "sig.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <ctype.h>
|
||||
#include <string>
|
||||
|
||||
#ifdef HAVE_SIGACTION
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BACKTRACE
|
||||
#include <execinfo.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#define BACKTRACE_BUFFER_SIZE 200
|
||||
|
||||
TLS_VARIABLE volatile int debug_stage = STAGE_UNDEFINED;
|
||||
TLS_VARIABLE volatile int debug_expr = 0;
|
||||
TLS_VARIABLE const char * volatile debug_expr_ptr = nullptr;
|
||||
TLS_VARIABLE volatile int debug_corpus = 0;
|
||||
TLS_VARIABLE const char * volatile debug_corpus_ptr = nullptr;
|
||||
TLS_VARIABLE volatile size_t debug_corpus_len = 0;
|
||||
|
||||
extern std::string g_cmdline;
|
||||
|
||||
#ifdef HAVE_SIGACTION
|
||||
static void sighandler(int signum) {
|
||||
/* NOTE: This signal handler is designed solely to provide more information
|
||||
* when a crash occurs in ue2collider -- it makes calls to signal-unsafe
|
||||
* functions like printf() and backtrace() by design, since we're already
|
||||
* in deep trouble and are going to exit anyway. */
|
||||
|
||||
fflush(stdout);
|
||||
printf("signal %d\n", signum);
|
||||
printf("\nFailing cmdline was:\n%s\n\n", g_cmdline.c_str());
|
||||
printf("expression %d ", debug_expr);
|
||||
switch(debug_stage) {
|
||||
case STAGE_UE2_COMPILE:
|
||||
printf("ue2 compile\n");
|
||||
break;
|
||||
case STAGE_UE2_RUN:
|
||||
printf("corpus %d ue2 scan\n", debug_corpus);
|
||||
break;
|
||||
case STAGE_PCRE_COMPILE:
|
||||
printf("pcre compile\n");
|
||||
break;
|
||||
case STAGE_PCRE_RUN:
|
||||
printf("corpus %d pcre scan\n", debug_corpus);
|
||||
break;
|
||||
case STAGE_GRAPH_PREPROCESS:
|
||||
printf("graph preprocess\n");
|
||||
break;
|
||||
case STAGE_GRAPH_COMPILE:
|
||||
printf("graph compile\n");
|
||||
break;
|
||||
case STAGE_GRAPH_RUN:
|
||||
printf("corpus %d graph scan\n", debug_corpus);
|
||||
break;
|
||||
default:
|
||||
case STAGE_UNDEFINED:
|
||||
printf("unknown stage\n");
|
||||
break;
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
if (debug_expr_ptr) {
|
||||
printf("expression %p\n", debug_expr_ptr);
|
||||
printf("%d:%s\n\n", debug_expr, debug_expr_ptr);
|
||||
}
|
||||
|
||||
if (debug_stage == STAGE_PCRE_RUN || debug_stage == STAGE_UE2_RUN) {
|
||||
printf("corpus %p len %zu\n", debug_corpus_ptr, debug_corpus_len);
|
||||
|
||||
printf("%d:", debug_expr);
|
||||
for (size_t i = 0; i < debug_corpus_len && debug_corpus_ptr; i++) {
|
||||
unsigned char c = debug_corpus_ptr[i];
|
||||
if (c == '\n') {
|
||||
printf("\\n");
|
||||
} else if (c == '\t') {
|
||||
printf("\\t");
|
||||
} else if (c == '\r') {
|
||||
printf("\\r");
|
||||
} else if (0x20 <= c && c <= 0x7e && c != '\\') {
|
||||
printf("%c", c);
|
||||
} else {
|
||||
printf("\\x%02hhx", c);
|
||||
}
|
||||
}
|
||||
printf("\n\n");
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
|
||||
#ifdef HAVE_BACKTRACE
|
||||
static void *bt[BACKTRACE_BUFFER_SIZE];
|
||||
int count = backtrace(bt, BACKTRACE_BUFFER_SIZE);
|
||||
if (count) {
|
||||
backtrace_symbols_fd(bt, count, STDOUT_FILENO);
|
||||
} else {
|
||||
printf("(Call to backtrace() returns zero count.)\n");
|
||||
}
|
||||
#else
|
||||
printf("(Backtrace unavailable on this platform.)\n");
|
||||
#endif
|
||||
|
||||
_exit(signum);
|
||||
}
|
||||
#endif // HAVE_SIGACTION
|
||||
|
||||
void installSignalHandler(void) {
|
||||
#ifdef HAVE_SIGACTION
|
||||
struct sigaction act;
|
||||
memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = sighandler;
|
||||
act.sa_flags = 0;
|
||||
sigemptyset(&act.sa_mask);
|
||||
sigaddset(&act.sa_mask, SIGSEGV);
|
||||
sigaddset(&act.sa_mask, SIGBUS);
|
||||
sigaddset(&act.sa_mask, SIGFPE);
|
||||
sigaddset(&act.sa_mask, SIGILL);
|
||||
sigaddset(&act.sa_mask, SIGABRT);
|
||||
sigaction(SIGBUS, &act, nullptr);
|
||||
sigaction(SIGFPE, &act, nullptr);
|
||||
sigaction(SIGILL, &act, nullptr);
|
||||
sigaction(SIGABRT, &act, nullptr);
|
||||
sigaction(SIGSEGV, &act, nullptr);
|
||||
setSignalStack();
|
||||
#endif // HAVE_SIGACTION
|
||||
}
|
||||
|
||||
#ifdef HAVE_SIGALTSTACK
|
||||
static TLS_VARIABLE char alt_stack_loc[SIGSTKSZ];
|
||||
#endif
|
||||
|
||||
void setSignalStack(void) {
|
||||
#ifdef HAVE_SIGALTSTACK
|
||||
struct sigaction act;
|
||||
memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = sighandler;
|
||||
act.sa_flags = 0;
|
||||
stack_t alt_stack;
|
||||
memset(&alt_stack, 0, sizeof(alt_stack));
|
||||
alt_stack.ss_flags = 0;
|
||||
alt_stack.ss_size = SIGSTKSZ;
|
||||
alt_stack.ss_sp = alt_stack_loc;
|
||||
if (!sigaltstack(&alt_stack, nullptr)) {
|
||||
act.sa_flags |= SA_ONSTACK;
|
||||
}
|
||||
sigaction(SIGSEGV, &act, nullptr);
|
||||
#endif
|
||||
}
|
||||
|
57
tools/hscollider/sig.h
Normal file
57
tools/hscollider/sig.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef SIG_H
|
||||
#define SIG_H
|
||||
|
||||
#include <cstddef> // for size_t
|
||||
|
||||
#define STAGE_UNDEFINED 0
|
||||
#define STAGE_UE2_COMPILE 1
|
||||
#define STAGE_UE2_RUN 2
|
||||
#define STAGE_PCRE_COMPILE 3
|
||||
#define STAGE_PCRE_RUN 4
|
||||
#define STAGE_GRAPH_PREPROCESS 5
|
||||
#define STAGE_GRAPH_COMPILE 6
|
||||
#define STAGE_GRAPH_RUN 7
|
||||
|
||||
#define TLS_VARIABLE __thread
|
||||
|
||||
extern TLS_VARIABLE volatile int debug_stage;
|
||||
extern TLS_VARIABLE volatile int debug_expr;
|
||||
extern TLS_VARIABLE const char * volatile debug_expr_ptr;
|
||||
extern TLS_VARIABLE volatile int debug_corpus;
|
||||
extern TLS_VARIABLE const char * volatile debug_corpus_ptr;
|
||||
extern TLS_VARIABLE volatile size_t debug_corpus_len;
|
||||
|
||||
void installSignalHandler(void);
|
||||
|
||||
// Must be called by every thread.
|
||||
void setSignalStack(void);
|
||||
|
||||
#endif
|
54
tools/hscollider/simple_timer.h
Normal file
54
tools/hscollider/simple_timer.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef SIMPLE_TIMER_H
|
||||
#define SIMPLE_TIMER_H
|
||||
|
||||
#include <chrono>
|
||||
|
||||
class SimpleTimer {
|
||||
public:
|
||||
SimpleTimer();
|
||||
double elapsed() const;
|
||||
private:
|
||||
std::chrono::time_point<std::chrono::system_clock> start;
|
||||
};
|
||||
|
||||
SimpleTimer::SimpleTimer() {
|
||||
start = std::chrono::system_clock::now();
|
||||
}
|
||||
|
||||
double SimpleTimer::elapsed() const {
|
||||
std::chrono::time_point<std::chrono::system_clock> end;
|
||||
end = std::chrono::system_clock::now();
|
||||
|
||||
std::chrono::duration<double> delta = end - start;
|
||||
return delta.count();
|
||||
}
|
||||
|
||||
#endif // SIMPLE_TIMER_H
|
3
tools/hscollider/test_cases/corpora/accel.txt
Normal file
3
tools/hscollider/test_cases/corpora/accel.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
2000:abcdefxxxxxxxxxxxxxxxxxxxxxxxxxxAfoobarxxxxxxxxxxxxxx
|
||||
2001:/w------Ue0-J-vNU-----C9---k--M---1S-x-----g-----A---\n
|
||||
2002:mJpPthD\xf0\x95\x93\xa1hq\xf4\x8b\xb9\x9cbrp\xe2\x84\xaahB\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xe8\x86\x95\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80
|
2515
tools/hscollider/test_cases/corpora/anchors.txt
Normal file
2515
tools/hscollider/test_cases/corpora/anchors.txt
Normal file
File diff suppressed because it is too large
Load Diff
263
tools/hscollider/test_cases/corpora/approximate_matching.txt
Normal file
263
tools/hscollider/test_cases/corpora/approximate_matching.txt
Normal file
@@ -0,0 +1,263 @@
|
||||
40000:test
|
||||
40000:012test
|
||||
40000:01test
|
||||
40000:013test
|
||||
40000:0123test
|
||||
40000:012tests
|
||||
40000:0123tests
|
||||
40000:teest
|
||||
40000:teeest
|
||||
40000:012012test
|
||||
40000:012013test
|
||||
40000:013013test
|
||||
40000:01201test
|
||||
40000:01201202test
|
||||
|
||||
40001:kks
|
||||
40001:sss
|
||||
40001:ssss
|
||||
40001:ss
|
||||
40001:s
|
||||
40001:sssss
|
||||
40001:sksks
|
||||
40001:kkk
|
||||
40001:sskksk
|
||||
|
||||
40002:test
|
||||
40002:tst
|
||||
40002:teest
|
||||
40002:teitk
|
||||
40002:test\n
|
||||
40002:test\na
|
||||
40002:tost\na
|
||||
40002:tst\n
|
||||
40002:teest\n
|
||||
40002:teitk\n
|
||||
40002:test\ntest
|
||||
40002:test\natest
|
||||
40002:testa\ntest
|
||||
40002:test\ntst
|
||||
40002:tst\ntest
|
||||
40002:tost\ntest
|
||||
40002:tost\ntost
|
||||
|
||||
40003:test
|
||||
40003:tst
|
||||
40003:tt
|
||||
40003:t
|
||||
40003:teest
|
||||
40003:teeest
|
||||
40003:teeeest
|
||||
40003:toast
|
||||
40003:toasts
|
||||
40003:attest
|
||||
40003:attests
|
||||
40003:atttest
|
||||
|
||||
40004:test
|
||||
40004:tst
|
||||
40004:tt
|
||||
40004:t
|
||||
40004:teest
|
||||
40004:teeest
|
||||
40004:teeeest
|
||||
40004:toast
|
||||
40004:toasts
|
||||
40004:attest
|
||||
40004:attests
|
||||
40004:atttest
|
||||
40004:footestbar
|
||||
40004:footstbar
|
||||
40004:foottbar
|
||||
40004:footbar
|
||||
40004:footeestbar
|
||||
40004:footeeestbar
|
||||
40004:footeeeestbar
|
||||
40004:footoastbar
|
||||
40004:footoastsbar
|
||||
40004:fooattestbar
|
||||
40004:fooattestsbar
|
||||
40004:fooatttestbar
|
||||
|
||||
40005:littest
|
||||
40005:litest
|
||||
40005:ltest
|
||||
40005:litttest
|
||||
40005:littttest
|
||||
40005:alittest
|
||||
40005:alitetest
|
||||
40005:alittetest
|
||||
|
||||
40006:ttaaaaatt
|
||||
40006:ttaabaatt
|
||||
40006:ttaaabacatt
|
||||
40006:tttt
|
||||
|
||||
40007:abfooobc
|
||||
40007:abbc
|
||||
40007:abfoobc
|
||||
40007:abfooocd
|
||||
40007:cdfooobc
|
||||
40007:fooobc
|
||||
40007:foooobc
|
||||
|
||||
40008:a bce
|
||||
40008:a bcc
|
||||
40008:a be
|
||||
40008:abec
|
||||
40008:a bcd
|
||||
40008:ade
|
||||
40008:afe
|
||||
40008:fade
|
||||
40008:foade
|
||||
|
||||
40009:fooabc
|
||||
40009:fooabd
|
||||
40009:fooade
|
||||
40009:fooabbc
|
||||
40009:fooabbcd
|
||||
40009:fooabbcdd
|
||||
40009:foodee
|
||||
|
||||
40010:fooabc\n
|
||||
40010:fooabc\na
|
||||
40010:fooa\na
|
||||
40010:fooabcde\na
|
||||
40010:foo\na
|
||||
40010:fooabcpqr\na
|
||||
40010:foodefoo\n
|
||||
40010:food\na
|
||||
|
||||
40050:test
|
||||
40050:012test
|
||||
40050:01test
|
||||
40050:013test
|
||||
40050:0123test
|
||||
40050:012tests
|
||||
40050:0123tests
|
||||
40050:teest
|
||||
40050:teeest
|
||||
40050:012012test
|
||||
40050:012013test
|
||||
40050:013013test
|
||||
40050:01201test
|
||||
40050:01201202test
|
||||
|
||||
40051:kks
|
||||
40051:sss
|
||||
40051:ssss
|
||||
40051:ss
|
||||
40051:s
|
||||
40051:sssss
|
||||
40051:sksks
|
||||
40051:kkk
|
||||
40051:sskksk
|
||||
|
||||
40052:test
|
||||
40052:tst
|
||||
40052:teest
|
||||
40052:teitk
|
||||
40052:test\n
|
||||
40052:test\na
|
||||
40052:tost\na
|
||||
40052:tst\n
|
||||
40052:teest\n
|
||||
40052:teitk\n
|
||||
40052:test\ntest
|
||||
40052:test\natest
|
||||
40052:testa\ntest
|
||||
40052:test\ntst
|
||||
40052:tst\ntest
|
||||
40052:tost\ntest
|
||||
40052:tost\ntost
|
||||
|
||||
40053:test
|
||||
40053:tst
|
||||
40053:tt
|
||||
40053:t
|
||||
40053:teest
|
||||
40053:teeest
|
||||
40053:teeeest
|
||||
40053:toast
|
||||
40053:toasts
|
||||
40053:attest
|
||||
40053:attests
|
||||
40053:atttest
|
||||
|
||||
40054:test
|
||||
40054:tst
|
||||
40054:tt
|
||||
40054:t
|
||||
40054:teest
|
||||
40054:teeest
|
||||
40054:teeeest
|
||||
40054:toast
|
||||
40054:toasts
|
||||
40054:attest
|
||||
40054:attests
|
||||
40054:atttest
|
||||
40054:footestbar
|
||||
40054:footstbar
|
||||
40054:foottbar
|
||||
40054:footbar
|
||||
40054:footeestbar
|
||||
40054:footeeestbar
|
||||
40054:footeeeestbar
|
||||
40054:footoastbar
|
||||
40054:footoastsbar
|
||||
40054:fooattestbar
|
||||
40054:fooattestsbar
|
||||
40054:fooatttestbar
|
||||
|
||||
40055:littest
|
||||
40055:litest
|
||||
40055:ltest
|
||||
40055:litttest
|
||||
40055:littttest
|
||||
40055:alittest
|
||||
40055:alitetest
|
||||
40055:alittetest
|
||||
|
||||
40056:ttaaaaatt
|
||||
40056:ttaabaatt
|
||||
40056:ttaaabacatt
|
||||
40056:tttt
|
||||
|
||||
40057:abfooobc
|
||||
40057:abbc
|
||||
40057:abfoobc
|
||||
40057:abfooocd
|
||||
40057:cdfooobc
|
||||
40057:fooobc
|
||||
40057:foooobc
|
||||
|
||||
40058:a bce
|
||||
40058:a bcc
|
||||
40058:a be
|
||||
40058:abec
|
||||
40058:a bcd
|
||||
40058:ade
|
||||
40058:afe
|
||||
40058:fade
|
||||
40058:foade
|
||||
|
||||
40059:fooabc
|
||||
40059:fooabd
|
||||
40059:fooade
|
||||
40059:fooabbc
|
||||
40059:fooabbcd
|
||||
40059:fooabbcdd
|
||||
40059:foodee
|
||||
|
||||
40060:fooabc\n
|
||||
40060:fooabc\na
|
||||
40060:fooa\na
|
||||
40060:fooabcde\na
|
||||
40060:foo\na
|
||||
40060:fooabcpqr\na
|
||||
40060:foodefoo\n
|
||||
40060:food\na
|
||||
|
||||
40061:
|
||||
40061:a
|
||||
40061:__
|
508
tools/hscollider/test_cases/corpora/asserts.txt
Normal file
508
tools/hscollider/test_cases/corpora/asserts.txt
Normal file
@@ -0,0 +1,508 @@
|
||||
23000="foobar":
|
||||
23000="foo bar": 7
|
||||
23000="foo\x00bar": 7
|
||||
23000="fooAbar":
|
||||
23000="foo~bar": 7
|
||||
23000="foo~~~bar": 9
|
||||
23000="foo~~~bar0bar": 9
|
||||
23001="foobar":
|
||||
23001="foo bar": 7
|
||||
23001="foo\x00bar": 7
|
||||
23001="fooAbar":
|
||||
23001="foo~bar": 7
|
||||
23001="foo~~~bar": 9
|
||||
23001="foo~~~bar0bar": 9,13
|
||||
23002="":
|
||||
23002="foo": 3
|
||||
23002="afoo":
|
||||
23002="~foo": 4
|
||||
23002="\x00foo": 4
|
||||
23002="foo foo ~foo": 3,8,15
|
||||
23003="":
|
||||
23003="foo":
|
||||
23003="afoo": 4
|
||||
23003="~foo":
|
||||
23003="\x00foo":
|
||||
23003="foo foo ~foo":
|
||||
23004="wordalpha":
|
||||
23004="nonword~alpha": 13
|
||||
23004="wordXalpha":
|
||||
23004="word~alpha": 10
|
||||
23004="nonword~~alpha": 14
|
||||
23005="":
|
||||
23005="~": 1
|
||||
23005="~~": 1,2
|
||||
23005="a~":
|
||||
23006="foo": 3
|
||||
23006="fooA":
|
||||
23006="foofoo": 6
|
||||
23006="foo~": 3
|
||||
23006="foo~foo": 3,7
|
||||
23006="foo~foo~": 3,7
|
||||
23007="foo":
|
||||
23007="fooA": 3
|
||||
23007="foofoo": 3
|
||||
23007="foo~":
|
||||
23007="foo~foo":
|
||||
23007="foo~foo~":
|
||||
23008="foo": 3
|
||||
23008="fooA":
|
||||
23008="foo~":
|
||||
23008="foo\n": 3
|
||||
23008="foo\n\n":
|
||||
23008="foofoo": 6
|
||||
23009="foo": 3
|
||||
23009="fooA":
|
||||
23009="foo~":
|
||||
23009="foo\n":
|
||||
23009="foo\n\n":
|
||||
23009="foofoo": 6
|
||||
23010="foobar":
|
||||
23010="foo bar": 7
|
||||
23010="foo\x00bar": 7
|
||||
23010="fooAbar":
|
||||
23010="foo~bar": 7
|
||||
23010="foo~~~bar": 9
|
||||
23010="foo~~~bar0bar": 9
|
||||
23011="foobar":
|
||||
23011="foo bar": 7
|
||||
23011="foo\x00bar": 7
|
||||
23011="fooAbar":
|
||||
23011="foo~bar": 7
|
||||
23011="foo~~~bar": 9
|
||||
23011="foo~~~bar0bar": 9
|
||||
23012="foobar":
|
||||
23012="fooXbar":
|
||||
23012="foo~bar": 7
|
||||
23012="foo~bar~bar": 7,11
|
||||
23012="fooxbar~bar":
|
||||
23012="foo~barxbar": 7
|
||||
23012="foofoobar":
|
||||
23013="foobar": 6
|
||||
23013="fooXbar": 7
|
||||
23013="foo~bar":
|
||||
23013="foo~bar~bar":
|
||||
23013="fooxbar~bar": 7
|
||||
23013="foo~barxbar":
|
||||
23013="foofoobar": 9
|
||||
23014="foobar":
|
||||
23014="fooXbar":
|
||||
23014="foo~bar":
|
||||
23014="foo~bar~bar":
|
||||
23014="fooxbar~bar":
|
||||
23014="foo~barxbar": 11
|
||||
23014="foofoobar":
|
||||
23015="":
|
||||
23015="foo": 3
|
||||
23015="afoo":
|
||||
23015="~foo": 4
|
||||
23015="\x00foo": 4
|
||||
23015="foo foo ~foo": 3,8,15
|
||||
23016="":
|
||||
23016="foo":
|
||||
23016="afoo": 4
|
||||
23016="~foo":
|
||||
23016="\x00foo":
|
||||
23016="foo foo ~foo":
|
||||
23017="":
|
||||
23017="~": 1
|
||||
23017="~~": 1,2
|
||||
23017="a~":
|
||||
23018="foo": 3
|
||||
23018="fooA":
|
||||
23018="foofoo": 6
|
||||
23018="foo~": 3
|
||||
23018="foo~foo": 3,7
|
||||
23018="foo~foo~": 3,7
|
||||
23019="foo":
|
||||
23019="fooA": 3
|
||||
23019="foofoo": 3
|
||||
23019="foo~":
|
||||
23019="foo~foo":
|
||||
23019="foo~foo~":
|
||||
23020="foo": 3
|
||||
23020="fooA":
|
||||
23020="foo~":
|
||||
23020="foo\n": 3
|
||||
23020="foo\n\n":
|
||||
23020="foofoo": 6
|
||||
23021="foo": 3
|
||||
23021="fooA":
|
||||
23021="foo~":
|
||||
23021="foo\n":
|
||||
23021="foo\n\n":
|
||||
23021="foofoo": 6
|
||||
23022="a":
|
||||
23022="ab": 2
|
||||
23022="a~":
|
||||
23022="abb": 3
|
||||
23022="ab~": 2
|
||||
23022="a~b": 2,3
|
||||
23022="a~~":
|
||||
23022="abbb": 4
|
||||
23022="ab~~": 2
|
||||
23022="a~bb": 2,4
|
||||
23022="a~~~":
|
||||
23022="abb~": 3
|
||||
23022="ab~b": 2,3,4
|
||||
23022="a~b~": 2,3
|
||||
23022="a~~b": 3,4
|
||||
23023="a":
|
||||
23023="ba": 2
|
||||
23023="~a":
|
||||
23023="bba": 3
|
||||
23023="b~a": 3
|
||||
23023="~ba": 3
|
||||
23023="~~a":
|
||||
23023="bbba": 4
|
||||
23023="b~~a": 4
|
||||
23023="~bba": 4
|
||||
23023="~~~a":
|
||||
23023="bb~a": 4
|
||||
23023="b~ba": 4
|
||||
23023="~b~a": 4
|
||||
23023="~~ba": 4
|
||||
23024="":
|
||||
23024="a": 1
|
||||
23024="aa": 1
|
||||
23024="~a": 2
|
||||
23024="a~a": 1,3
|
||||
23024="aaa": 1
|
||||
23025="":
|
||||
23025="a": 0,1
|
||||
23025="~":
|
||||
23025="a~": 0,1
|
||||
23025="~a": 1,2
|
||||
23025="aa": 0,2
|
||||
23025="~~":
|
||||
23025="a~a": 0,1,2,3
|
||||
23025="~a~": 1,2
|
||||
23025="aaa": 0,3
|
||||
23025="~~~":
|
||||
23025="a~~": 0,1
|
||||
23025="~aa": 1,3
|
||||
23025="aa~": 0,2
|
||||
23025="~~a": 2,3
|
||||
23026="": 0
|
||||
23026="a":
|
||||
23026="~": 0,1
|
||||
23026="a~": 2
|
||||
23026="~a": 0
|
||||
23026="aa": 1
|
||||
23026="~~": 0,1,2
|
||||
23026="a~a":
|
||||
23026="~a~": 0,3
|
||||
23026="aaa": 1,2
|
||||
23026="~~~": 0,1,2,3
|
||||
23026="a~~": 2,3
|
||||
23026="~aa": 0,2
|
||||
23026="aa~": 1,3
|
||||
23026="~~a": 0,1
|
||||
23027="":
|
||||
23027="a": 1
|
||||
23027="~":
|
||||
23027="a~":
|
||||
23027="~a": 2
|
||||
23027="aa": 2
|
||||
23027="~~":
|
||||
23028="": 0
|
||||
23028="a":
|
||||
23028="~": 1
|
||||
23028="a~": 2
|
||||
23028="~a":
|
||||
23028="aa":
|
||||
23028="~~": 2
|
||||
23029="":
|
||||
23029="a": 0
|
||||
23029="~":
|
||||
23029="a~": 0
|
||||
23029="~a":
|
||||
23029="aa": 0
|
||||
23029="~~":
|
||||
23030="": 0
|
||||
23030="a":
|
||||
23030="~": 0
|
||||
23030="a~":
|
||||
23030="~a": 0
|
||||
23030="aa":
|
||||
23030="~~": 0
|
||||
23031="":
|
||||
23031="a": 0,1
|
||||
23031="~":
|
||||
23031="a~": 0,1
|
||||
23031="~a": 2
|
||||
23031="aa": 0,1,2
|
||||
23031="~~":
|
||||
23032="":
|
||||
23032="a": 0,1
|
||||
23032="~":
|
||||
23032="a~": 0,1
|
||||
23032="~a": 1,2
|
||||
23032="aa": 0,1,2
|
||||
23032="~~":
|
||||
23033="foo": 3
|
||||
23033="~foo":
|
||||
23033="foofoo": 3
|
||||
23035="foo": 3
|
||||
23035="~foo":
|
||||
23035="foofoo": 3
|
||||
23037="foobar": 6
|
||||
23037="fooXbar": 7
|
||||
23037="foo~bar": 7
|
||||
23037="foo~x~bar": 9
|
||||
23037="foox~xbar": 9
|
||||
23038="threeasserts":
|
||||
23038="three~asserts": 13
|
||||
23038="threeXasserts":
|
||||
23039="threeasserts": 12
|
||||
23039="three~asserts":
|
||||
23039="threeXasserts": 13
|
||||
23042="":
|
||||
23042="a": 0,1
|
||||
23042="~":
|
||||
23042="word": 0,4
|
||||
23042="~~~~":
|
||||
23042="hatstand teakettle badgerbrush": 0,8,9,18,19,30
|
||||
23043="foo bar baz bam": 3,7,11
|
||||
23043="foobarbazbam":
|
||||
23044="":
|
||||
23044="a": 0,1
|
||||
23044="~":
|
||||
23044="aa": 0,2
|
||||
23044="a~": 0,1
|
||||
23044="~a": 1,2
|
||||
23044="~~":
|
||||
23044="aaa": 0,3
|
||||
23044="a~a": 0,1,2,3
|
||||
23044="~aa": 1,3
|
||||
23044="~~a": 2,3
|
||||
23044="aa~": 0,2
|
||||
23044="a~~": 0,1
|
||||
23044="~a~": 1,2
|
||||
23044="~~~":
|
||||
23045="":
|
||||
23045="a": 0,1
|
||||
23045="~":
|
||||
23045="aa": 0,2
|
||||
23045="a~": 0,1
|
||||
23045="~a": 1,2
|
||||
23045="~~":
|
||||
23045="aaa": 0,3
|
||||
23045="a~a": 0,1,2,3
|
||||
23045="~aa": 1,3
|
||||
23045="~~a": 2,3
|
||||
23045="aa~": 0,2
|
||||
23045="a~~": 0,1
|
||||
23045="~a~": 1,2
|
||||
23045="~~~":
|
||||
23045="aaaaaaaaaaaaaaaaaaa": 0,19
|
||||
23045="~~~~~~~~~~~~~~~~~~~":
|
||||
23045="a~a~a~a~a~a~a~a~a~a": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
|
||||
23046="":
|
||||
23046="a": 0,1
|
||||
23046="aa": 0,1,2
|
||||
23046="aaa": 0,1,2,3
|
||||
23046="aaaa": 0,1,2,3,4
|
||||
23046="~aa~~aaa~~~aaaa~~~~aaaaa~~~~~~": 1,2,3,5,6,7,8,11,12,13,14,15,19,20,21,22,23,24
|
||||
23047="":
|
||||
23047="a": 1
|
||||
23047="ab":
|
||||
23047="a b": 1,3
|
||||
23047="a b c": 1,3,5
|
||||
23048="":
|
||||
23048="a": 1
|
||||
23048="aa bb ccc d eeee fffff abc ghi": 2,3,5,6,9,10,11,12,16,17,22,23,26,27
|
||||
23049="": 0
|
||||
23049="\n": 0
|
||||
23049="a":
|
||||
23049="~": 0
|
||||
23049="\na": 0
|
||||
23049="\n~": 0,1
|
||||
23049="foo\n~": 4
|
||||
23049="~\n~": 0,2
|
||||
23049="foo\nfoo":
|
||||
23050="":
|
||||
23050="\n":
|
||||
23050="a": 0
|
||||
23050="~":
|
||||
23050="\na": 1
|
||||
23050="\n~":
|
||||
23057="": 0
|
||||
23057="a":
|
||||
23057="~":
|
||||
23057="\n": 0
|
||||
23057="\na": 0
|
||||
23057="\n~": 0
|
||||
23057="a\n":
|
||||
23057="~\n":
|
||||
23057="\n\n": 0,1
|
||||
23057="\na\n": 0
|
||||
23057="\n~\n": 0
|
||||
23057="\naa\n": 0
|
||||
23057="\n~~\n": 0
|
||||
23057="\n\n\n": 0,1,2
|
||||
23058="": 0
|
||||
23058="a":
|
||||
23058="~":
|
||||
23058="\n": 0
|
||||
23058="\na":
|
||||
23058="\n~":
|
||||
23058="a\n":
|
||||
23058="~\n":
|
||||
23058="\n\n": 1
|
||||
23058="\na\n":
|
||||
23058="\n~\n":
|
||||
23058="\naa\n":
|
||||
23058="\n~~\n":
|
||||
23058="\n\n\n": 2
|
||||
23059="": 0
|
||||
23059="a":
|
||||
23059="~":
|
||||
23059="\n":
|
||||
23059="\na":
|
||||
23059="\n~":
|
||||
23059="a\n":
|
||||
23059="~\n":
|
||||
23059="\n\n":
|
||||
23059="\na\n":
|
||||
23059="\n~\n":
|
||||
23059="\naa\n":
|
||||
23059="\n~~\n":
|
||||
23059="\n\n\n":
|
||||
23060="": 0
|
||||
23060="a":
|
||||
23060="~":
|
||||
23060="\n": 0
|
||||
23060="\na": 0
|
||||
23060="\n~": 0
|
||||
23060="a\n":
|
||||
23060="~\n":
|
||||
23060="\n\n": 0
|
||||
23060="\na\n": 0
|
||||
23060="\n~\n": 0
|
||||
23060="\naa\n": 0
|
||||
23060="\n~~\n": 0
|
||||
23060="\n\n\n": 0
|
||||
23061="": 0
|
||||
23061="a":
|
||||
23061="~":
|
||||
23061="\n": 0
|
||||
23061="\na":
|
||||
23061="\n~":
|
||||
23061="a\n":
|
||||
23061="~\n":
|
||||
23061="\n\n":
|
||||
23061="\na\n":
|
||||
23061="\n~\n":
|
||||
23061="\naa\n":
|
||||
23061="\n~~\n":
|
||||
23061="\n\n\n":
|
||||
23062="": 0
|
||||
23062="a":
|
||||
23062="~":
|
||||
23062="\n":
|
||||
23062="\na":
|
||||
23062="\n~":
|
||||
23062="a\n":
|
||||
23062="~\n":
|
||||
23062="\n\n":
|
||||
23062="\na\n":
|
||||
23062="\n~\n":
|
||||
23062="\naa\n":
|
||||
23062="\n~~\n":
|
||||
23062="\n\n\n":
|
||||
23063="":
|
||||
23063="a": 0,1
|
||||
23063="foo": 0,3
|
||||
23063="~foo": 1,4
|
||||
23063="~foo~": 1,4
|
||||
23063="~~~foo~~~bar~~~": 3,6,9,12
|
||||
23064="": 0
|
||||
23064="a":
|
||||
23064="foo": 1,2
|
||||
23064="~foo": 0,2,3
|
||||
23064="~foo~": 0,2,3,5
|
||||
23064="~~~foo~~~bar~~~": 0,1,2,4,5,7,8,10,11,13,14,15
|
||||
23065="":
|
||||
23065="a":
|
||||
23065="foo": 1,2
|
||||
23065="~foo": 2,3
|
||||
23065="~foo~": 2,3,5
|
||||
23065="~~~foo~~~bar~~~": 4,5,7,8,10,11,13,14,15
|
||||
23066="":
|
||||
23066="a":
|
||||
23066="foo": 3
|
||||
23066="~foo": 1,4
|
||||
23066="~foo~": 1,4
|
||||
23066="~~~foo~~~bar~~~": 3,6,9,12
|
||||
23067="":
|
||||
23067="a": 1
|
||||
23067="foo": 3
|
||||
23067="~foo": 4
|
||||
23067="~foo~": 4
|
||||
23067="~~~foo~~~bar~~~": 6,9,12
|
||||
23068="":
|
||||
23068="a":
|
||||
23068="foo": 2
|
||||
23068="~foo": 2,3
|
||||
23068="~foo~": 2,3,5
|
||||
23068="~~~foo~~~bar~~~": 1,2,4,5,7,8,10,11,13,14,15
|
||||
23069="":
|
||||
23069="a":
|
||||
23069="foo": 1,2
|
||||
23069="~foo": 2,3
|
||||
23069="~foo~": 2,3,5
|
||||
23069="~~~foo~~~bar~~~": 4,5,7,8,10,11,13,14,15
|
||||
23070="":
|
||||
23070="a":
|
||||
23070="foo": 3
|
||||
23070="~foo": 1,4
|
||||
23070="~foo~": 1,4
|
||||
23070="~~~foo~~~bar~~~": 3,6,9,12
|
||||
23071="FKHL0BBBBiBBBG": 4,5,6,7,8,9,10,11,12,13,14
|
||||
23072="\x01n[\xbbx\xd3z\xf8\x8fe\x86QG\xe6{0\xa7a[a0[00\x88bbabb":
|
||||
23073="": 0
|
||||
23073="1":
|
||||
23073="a":
|
||||
23073="\n1": 0
|
||||
23073="\na": 0
|
||||
23074="":
|
||||
23074="1": 0
|
||||
23074="a": 0
|
||||
23074="\n1":
|
||||
23074="\na":
|
||||
23075="a": 1
|
||||
23075="aa": 2
|
||||
23075="abcdef": 6
|
||||
23075="abc abcde abcdef abcdefg abcdef a1bc a234bcdef adf": 3,9,16,31,50
|
||||
23075="a aa a3 aq aaab aaab4": 1,4,15
|
||||
23076="godzilla mothra":
|
||||
23076="godzillamothra":
|
||||
23076="godzilla mothra": 15
|
||||
23076="godzilla mothra": 24
|
||||
23076="godzillax mothra":
|
||||
23076="godzillax mothra":
|
||||
23076="godzillaxmothra":
|
||||
23076="godzilla xmothra": 16
|
||||
23076="godzilla x mothra": 17
|
||||
23076="godzilla xmothra": 24
|
||||
23077="godzilla mothra":
|
||||
23077="godzillamothra":
|
||||
23077="godzilla mothra": 15
|
||||
23077="godzilla mothra": 24
|
||||
23077="godzilla xmothra":
|
||||
23077="godzilla xmothra":
|
||||
23077="godzillaxmothra":
|
||||
23077="godzillax mothra": 16
|
||||
23077="godzilla x mothra": 17
|
||||
23077="godzillax mothra": 24
|
||||
23078="godzilla mothra":
|
||||
23078="godzillamothra":
|
||||
23078="godzilla mothra": 15
|
||||
23078="godzilla mothra": 24
|
||||
23078="godzilla xmothra":
|
||||
23078="godzilla xmothra":
|
||||
23078="godzillax mothra":
|
||||
23078="godzillax mothra":
|
||||
23078="godzillaxmothra":
|
||||
23078="godzilla x mothra": 17
|
66
tools/hscollider/test_cases/corpora/benefits.txt
Normal file
66
tools/hscollider/test_cases/corpora/benefits.txt
Normal file
@@ -0,0 +1,66 @@
|
||||
19501="a__b": 4
|
||||
19501="aa_bb": 4,5
|
||||
19501="aaabbb": 4,5,6
|
||||
19501="ba_b_b":
|
||||
19501="bba_b_b":
|
||||
19501="bbba_b_b":
|
||||
19501="bbbba_b_b":
|
||||
19502="a__bc": 5
|
||||
19502="a_abcbca__bcbc": 5,7,12
|
||||
19503="ab__c": 5
|
||||
19503="ababc_c": 5,7
|
||||
19503="ababc_c_c": 5,7
|
||||
19504="ab__c":
|
||||
19504="ababc_c": 7
|
||||
19504="ababc_c_c": 7,9
|
||||
19504="ab__cxx": 7
|
||||
19504="ababc_cxx": 7,9
|
||||
19504="ababc_c_cxx": 7,9
|
||||
19505="ab__c":
|
||||
19505="abaBc_c": 7
|
||||
19505="ababc_C_c": 7,9
|
||||
19505="aB__cxx": 7
|
||||
19505="Ababc_cxx": 7,9
|
||||
19505="ababC_c_cxx": 7,9
|
||||
19506="ab__c":
|
||||
19506="abaBc_c":
|
||||
19506="ababc_C_c": 9
|
||||
19506="aB__cxx":
|
||||
19506="Ababc_cxx": 9
|
||||
19506="ababC_c_cxx": 9
|
||||
19507="abcdefgh____abcd1234efgh": 24
|
||||
19507="abcdefgh____abcdefghefghabcdefghefgh": 24,36
|
||||
19508="foo__ba": 7
|
||||
19508="foo__ba_": 7
|
||||
19508="foo__ba\n": 7
|
||||
19509="foo__ba": 7
|
||||
19509="foo__ba_":
|
||||
19509="foo__ba\n":
|
||||
19510="aaa-aaa-aaaa": 12
|
||||
19510="aaba-aac-deff": 13
|
||||
19510="aba-aac-deff": 12
|
||||
19510="aa--aaa-aaaa":
|
||||
19510="aba-aacadeff":
|
||||
19511="abcdefghi Abcdefghi aBcdefghi abCdefghi abcDefghi abcdEfghi abcdeFghi abcdefGhi abcdefgHi abcdefghI abCDEFghi abCdEFghi abCDEfghi ABcdefGHI abCdEfghi": 9,39,49,59,69,109,119,129,149
|
||||
19512="AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDd":
|
||||
19512="AAAAAAAAAAbbbbbbbbbbccccccccccdddddddddd":
|
||||
19512="Aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd":
|
||||
19512="_aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd": 41
|
||||
19512="aaaaaaaaaabbbbbbbBbbccccCcccccDddddddddd":
|
||||
19512="aaaaaaaaaabbbbbbbbbbCCCCCCCCCCdddddddddd": 40
|
||||
19512="aaaaaaaaaabbbbbbbbbbccccCcccccDddddddddd":
|
||||
19512="aaaaaaaaaabbbbbbbbbbccccCcccccdddddddddd": 40
|
||||
19512="aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd": 40
|
||||
19513="fYm_W fym_W fYP_W fyP_W fYi_W fyi_W fYU_W fyU_W": 5,11,17,23,29,35,41,47
|
||||
19513="FYM_W FYI_W":
|
||||
19513="FYm\nW":
|
||||
19514="godzilla GODZILLA gODZILLA gOdZiLlA Godzilla GODzILLA godZilla odzilla godzillA GodzillA GODZILLa": 8,44,62,97
|
||||
19515="godzilla GODZILLA gODZILLA gOdZiLlA Godzilla GODzILLA godZilla odzilla godzillA GodzillA GODZILLa": 8,26,35,62,79
|
||||
19516="godzilla GODZILLA gODZILLA gOdZiLlA Godzilla GODzILLA godZilla odzilla godzillA GodzillA GODZILLa": 17,44,53,88,97
|
||||
19517="godzilla GODZILLA gODZILLA gOdZiLlA Godzilla GODzILLA godZilla odzilla godzillA GodzillA GODZILLa": 8,44,53,79,88
|
||||
19518="godzilla GODZILLA gODZILLA gOdZiLlA Godzilla GODzILLA godZilla odzilla godzillA GodzillA GODZILLa": 8,79
|
||||
19519="NqTqkffffffffffffffbdrrk\xbeTrpqqQ":
|
||||
19519="nqtqkffffffFFFFffffbdrrk_trcqqq":
|
||||
19519="nqtqkffffffffffffffbdrrk_tRPQQQ": 31
|
||||
19519="nqtqkffffffffffffffbdrrk_trcqqq": 31
|
||||
19520="BCADabaaEbcd BCAcabaaEbcd bCACabaaEbcd": 12,25,38
|
78
tools/hscollider/test_cases/corpora/capturing.txt
Normal file
78
tools/hscollider/test_cases/corpora/capturing.txt
Normal file
@@ -0,0 +1,78 @@
|
||||
25000="bab'\xbbebcdddd": 10,11,12
|
||||
25001="A\x14AA\x03AA9AAAAAAA":
|
||||
25001="B >A\x10?\xb7AAAAAAA\x97":
|
||||
25002="cbaaaccc\x98abbabaa": 4,5,6,11,14,16
|
||||
25002="f\x14c\xbf2cc\x15aabVabb": 10,11,14
|
||||
25002="zb(ga cc.accb\x06babb": 11,17
|
||||
25002="\xd1b\xa5ccccagabab": 11,13
|
||||
25002="'\x8d\xcda\xf7\xa9c\xe3baabaab\x7f": 11,12,14,15
|
||||
25003="\xa0AAAAA\x83AlA\xd5\x0bAAAAAAA[AAAAAAA\xdc": 19,21,22,23,24,25,26,27
|
||||
25004="\x9dAAE~A\xffA\xde\xcb{AAAAAAAAAA\xf9A\xdeA": 16,17,18,19,20,21
|
||||
25005="a\xe6\xdfaaaa\xeea": 5,6,7
|
||||
25005="av\xa9a\x18&o\xe5aaaa\x14": 10,11,12
|
||||
25005="a\x1baa|\xba\x92X_aaaa": 4,11,12,13
|
||||
25005="\x82aW.aaaa1\xc4": 6,7,8
|
||||
25005="arI\xbe)aaa8aa": 7,8,11
|
||||
25005="a~\xc5aaaaa": 5,6,7,8
|
||||
25006=":b'aa\xd4aa": 5,8
|
||||
25007="bb\xc8b\xb7b\x15bbbbb\x8fbbb\xd3": 10,11,12,16
|
||||
25007="\x89b\xf1bbpbbbb\x10bbb\nbbbgb\xb6": 10,14,18
|
||||
25008="a\xa5bddbdcccc\x0fR\xa9&NlI)\xc6\xbd\x83\x0c\xad": 9,10,11
|
||||
25008="acbddbcccc<\xd7\x0f\xb3\x07jT\x9a\xbc": 8,9,10
|
||||
25008="acbdd`dcccc`\xd3 \x94\xb5\xda\x13\xb5\x94\x86\x93\xd3&\x0122\x1a\xa1l%\x7f=\xc5\xbe)\xc6\x8a7;\xca\x01:<\xc0m\x909\x1f\xe4lD\x16\xdf\n\xb7": 9,10,11
|
||||
25008="acbd\xfbdbdcccc\xa0Lb-o\xd6\xa0": 10,11,12
|
||||
25009="aaq\x14\x87a]aaa\xe6:aaa\xd2a\x7f\x07J\xf9YKa\xdc\x02\xc3\x9c\xb5\x0ea2<\xdb\xd3\xa7O\x14": 10,15
|
||||
25010="\x05\x01\xc6,h\xf493\xcc\x06\x96\x14@sH\xe1S\xc0\xf3l_\xe0\xf6:\x07\x85\x19R\xe2\xbc\xbd\x86]\"Qd\xb5)7aaaaaa": 42,43,44,45
|
||||
25010="<;\x92p\xf7Xj0@\xdf5\xb5G\x8d\x12\x5c\xe33U\xc0\xed\xe0\x00$\xdeaaaaaa": 28,29,30,31
|
||||
25010="\xe1\x98\xac\xd9\xf4@\x17\x1f\xf5\x5ciI\xcd\xab\x1fy\xa2aaaaaa": 20,21,22,23
|
||||
25010="\xe2\x1b\x07\x8cq\x02\xe5.\xd9\x91i\x9d\x14\x04\x83\xb4\xa3\x7fo7\xad<#aaaaaa": 26,27,28,29
|
||||
25010="\xf4\xfdt*\xd1\x98aaaaaa": 9,10,11,12
|
||||
25011="I\xaeS\x7f\x7f\xb0\xc1\xd3\x94\xa6\xdf#r\xbf\x9b\x12\x15\xbd\x19\xa2\x02\x9d\x18\x8fw\xa9H\r\xaa\xb2\xde\x92\x00\xd1\xb0\x1e \x10\x90SU\x0f\x16gmP\x18\"\xac\xd0cM\r\x1a{#bb\xcf\xac\xb4M\xddS\xbd-\x10|\xdc?o\xd1\xed$\xd7\xfa\x13\x8e\xbb^\xfd\xbdK\xa9vekwgBBAAAA": 58,91,92,93,94,95
|
||||
25012="\x8b9\xde\xd0\xc9\xd0fYS%U\xc1\t\x18\x0c\x7fc\x90\xb6%\xdd\xa5L\xbf\xa8B\xf3<\xa8t\x0c\xd2L\x89B\xb5\xf8G\xad\xea\x0b\xa1K\xb3X\xf6\xd2Z%'\x1e\xa1k\n\xff\xb2\xeb\x91\x8d3\xa49\xa4\x90a\x85\xe4\xf9k0\x82\x15plhg\x01\xd9`\xc5hgh": 76,82,83
|
||||
25013="\x8b\xafo\xfa\x9dhb\xc1\x89\xc0\nf%^\x88\xac\xcfn@\xbe\xc5\x89F=G\x867\x81A\xa6\rk\xf4\x1b\xb4\x040#\x05\x90Ke9P)7wt\xa5\x84S\x02\xe9{\xe7\xc5b\r\x9b\x82\xed\xe0/\xf7t\xe9\x9aC\xab>s\x95BK\x84\n!KEEEE": 42,79,80,81,82
|
||||
25013="\x97\xd2\xad\xda\xfc:\xf3\x91\xb9 \xde \xf162,\xd2\xf7\xf7\xc4\xe4KE4\xc4\xa0\xfda8\x80\x98\xaa\xcc\x11KE": 23,36
|
||||
25013="qqqqqqqqqqqqKEqke": 14,17
|
||||
25014="_aa_9_____^u___?_&-__-___D__m_._m_EEq_________:_$______k____\n___/__?___u_-pa+I__": 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80
|
||||
25015="Ln\xdf\xe6\xa4)<\xfd\xf7\xaeB\xa4\x9d!\xa3\xe0\x89": 2,4,12,13
|
||||
25016="P___!____mF_\n_+_@J__p____O_k7__3PZ___!___h___=h_____Fu_4": 2,3,4,5,6,7,8,9,10,11,12,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56
|
||||
25017="aaa\xd9\xf8\xd0\xb0\nX{\x8a\xa3}\xf3\xf1\xa2\xeb+U\xfdp\xeban\xe9\xb0\xb4\xf5\xfd=\xa1\xabt\xf0B\xe3?\xdaZ\x1d\xec\x9c^vfR\x12u\xea\xdc\x13\xbft\x9b\xd2\xc7/o\xc8\x0b": 1,2,3,23
|
||||
25018="aaaaa\n\x01\xca\xd2Y\xc6I\xb3O": 5,6
|
||||
25019="\x10\xd9e\xc5\xff=Z92T\x8a\xef&\xb0_\xdd?&\xa72/:8x^\x85\xdc\xbe\xdeB4\x18\xce\xc8\x99\xd2,8\xaeE\x10\xf8\x80\x199\x0e\x88\x0c\x80\xd1\xc68\x9f\x9dP\x9c\xc1\xcb\xfa\xa2\x9e\xb1\x0f\x05\xea\x13\x80\xd1<\xc1\xcd\x96p\xecNI\x99\xebpD\nv\xb4oN\xf3\xd8": 2,3,6,7,9,10,11,13,14,15,18,19,20,23,25,27,28,29,30,32,34,35,36,37,38,43,44,45,48,49,50,51,52,55,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,77,79,86
|
||||
25020="BAABA\x02G\xeb\xe5\xe1\xd2{\x9eZ|M\xb2\xb0\xf6D\x90\x1f\x04\x12\x1a\xb6\x113\x01x\x85\xfa^\x93W\xa3\xf8\x89V|\n\xc7\x97G\xc0\xb23\x12\x01\x7f\xf51h\x99\xea\xdcI\xbc\xc5|a\xe1\x16 \x13/\x0c\xa0~\xa4\xc8s\xbfq\xd9\xf5X9F*\xea\xe7\x92~\xb7\xb8\xb6@3H\x9f\x9cO\x9f\x1c\xfd\x04\x9c": 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
|
||||
25021="foobar": 6
|
||||
25021="Foobar":
|
||||
25021="FOOBAR":
|
||||
25022="foobar": 6
|
||||
25022="Foobar": 6
|
||||
25022="FOOBAR": 6
|
||||
25023="foo_bar": 7
|
||||
25023="FOO_BAR":
|
||||
25023="foO_bAr":
|
||||
25024="foo_bar": 7
|
||||
25024="FOO_BAR": 7
|
||||
25024="foO_bAr": 7
|
||||
25025="foobar": 6
|
||||
25025="Foobar":
|
||||
25025="FOOBAR":
|
||||
25025="goobar": 6
|
||||
25025="Goobar":
|
||||
25025="GOObar":
|
||||
25026="foobar": 6
|
||||
25026="Foobar": 6
|
||||
25026="FOOBAR": 6
|
||||
25026="goobar": 6
|
||||
25026="Goobar": 6
|
||||
25026="GOObar": 6
|
||||
25027="foobar": 6
|
||||
25027="f0obar": 6
|
||||
25027="F0obar": 6
|
||||
25027="FOobar": 6
|
||||
25027="FOOBAR": 6
|
||||
25028="foobar": 6
|
||||
25028="fooBar": 6
|
||||
25028="fooBAR": 6
|
||||
25028="FOOBAR":
|
||||
25029="foobar": 6
|
||||
25029="Foobar": 6
|
||||
25029="FOobar":
|
||||
25029="FOOBAR":
|
172
tools/hscollider/test_cases/corpora/charclass.txt
Normal file
172
tools/hscollider/test_cases/corpora/charclass.txt
Normal file
@@ -0,0 +1,172 @@
|
||||
11000="0t Q\nF\r\x00_%": 10
|
||||
11001="\x00": 1
|
||||
11001="\xff": 1
|
||||
11001="7": 1
|
||||
11002="\x00": 1
|
||||
11002="\xff": 1
|
||||
11002="7": 1
|
||||
11003="\x00": 1
|
||||
11003="\xff": 1
|
||||
11003="7": 1
|
||||
11004="\x00": 1
|
||||
11004="\xff": 1
|
||||
11004="7": 1
|
||||
11005="\x00": 1
|
||||
11005="\xff": 1
|
||||
11005="7": 1
|
||||
11006="0f7 \x1a7%": 7
|
||||
11007="l@; Rwf": 7
|
||||
11008="0": 1
|
||||
11008="1": 1
|
||||
11008="A": 1
|
||||
11008="q": 1
|
||||
11008="%": 1
|
||||
11009="1": 1
|
||||
11009="2": 1
|
||||
11009="A": 1
|
||||
11009="_": 1
|
||||
11010="Aa0arg": 6
|
||||
11010="Aa04t9":
|
||||
11010="Ff97AZ": 6
|
||||
11010="Dd76q@": 6
|
||||
11011="~a": 2
|
||||
11011="^a":
|
||||
11011="^\n":
|
||||
11012="\x00": 1
|
||||
11012="\x05": 1
|
||||
11012="\x1f": 1
|
||||
11013="]": 1
|
||||
11013="[": 1
|
||||
11013="_": 1
|
||||
11013="w": 1
|
||||
11013="W": 1
|
||||
11013="z": 1
|
||||
11013="a": 1
|
||||
11013="C": 1
|
||||
11014="A": 1
|
||||
11014="a": 1
|
||||
11014="q": 1
|
||||
11014="5": 1
|
||||
11014="_":
|
||||
11015="-": 1
|
||||
11015="a": 1
|
||||
11016="-": 1
|
||||
11016="A": 1
|
||||
11017="-": 1
|
||||
11017="T": 1
|
||||
11018="-": 1
|
||||
11018="d": 1
|
||||
11018="0": 1
|
||||
11020="\x08": 1
|
||||
11020="b":
|
||||
11021=".$": 2
|
||||
11021=".":
|
||||
11022="]": 1
|
||||
11022="a": 1
|
||||
11023="f": 1
|
||||
11023="]":
|
||||
11023="a":
|
||||
11024="]-_^ABC": 1,3,4
|
||||
11100="]": 1
|
||||
11100="[":
|
||||
11101="]": 1
|
||||
11101="[":
|
||||
11102="[": 1
|
||||
11102="]": 1
|
||||
11103="^": 1
|
||||
11103="X":
|
||||
11104="+": 1
|
||||
11104=",": 1
|
||||
11104="-": 1
|
||||
11104="a":
|
||||
11105="A": 1
|
||||
11105="7": 1
|
||||
11105="-": 1
|
||||
11105=",":
|
||||
11106="ABCDEFGHIJKL-": 1,2,3,5,6,7,13
|
||||
11107="ABCDEFGHIJKL-": 1,2,3,5,13
|
||||
11108="\x00 01234567890\x5c": 1
|
||||
11109="\x00 01234567890\x5c": 2
|
||||
11110="\x00 01234567890\x5c": 2
|
||||
11111="\x00 01234567890\x5c": 2,3,13
|
||||
11112="\x00 01234567890\x5c": 2,4
|
||||
11113="\x00 01234567890\x5c": 4,11
|
||||
11114="\x00 01234567890\x5c": 1
|
||||
11115="\x00 01234567890\x5c": 4
|
||||
11116="\x00 01234567890\x5c": 4
|
||||
11117="\x00 01234567890\x5c": 4
|
||||
11121="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 19,27,35
|
||||
11122="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 14
|
||||
11123="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 14,36
|
||||
11124="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 32,33
|
||||
11125="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 36
|
||||
11127="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,35,36
|
||||
11128="\x00 01234567890abcdefhjiklmnopq{}\x5cQE[]": 14,22
|
||||
11200=">":
|
||||
11200="^":
|
||||
11201="B":
|
||||
11201="S":
|
||||
11202="B":
|
||||
11202="S":
|
||||
11203="^":
|
||||
11204="!":
|
||||
11205="-": 1
|
||||
11205="*":
|
||||
11205="_": 1
|
||||
11205="`":
|
||||
11205=">": 1
|
||||
11302="foofoofoofoobarfoobarbar": 15,21,24
|
||||
11306="foobazfoofoobazfoobarfoobarbarbaz": 33
|
||||
11307="abcdefABCDEF0123456789": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
|
||||
11307="~!@#$%ghijklmnopqrstuvwxyzGHIJKLMNOPQRSTUVWXYZa": 47
|
||||
11308="_7\xff0qq\xff": 7
|
||||
11309="A\x00aal*g": 7
|
||||
11310="\x7f": 1
|
||||
11312="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 49,50,51,52,53,54,55,56,57,58,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123
|
||||
11313="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11314="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123
|
||||
11315="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11316="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128
|
||||
11317="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11318="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 10,33
|
||||
11319="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11320="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,128
|
||||
11321="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11322="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 49,50,51,52,53,54,55,56,57,58
|
||||
11323="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11324="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
|
||||
11325="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11326="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123
|
||||
11327="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11328="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127
|
||||
11329="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11330="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 10,11,12,13,14,33
|
||||
11331="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11332="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91
|
||||
11333="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11334="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 49,50,51,52,53,54,55,56,57,58,66,67,68,69,70,71,98,99,100,101,102,103
|
||||
11335="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,60,61,62,63,64,65,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11336="\x0c": 1
|
||||
11337="\x07": 1
|
||||
11338="\x1b": 1
|
||||
11339="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127
|
||||
11340="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,49,50,51,52,53,54,55,56,57,58,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11341="abcdef-\x00\xff": 1,2,7
|
||||
11342="abcdef-\x00\xff": 1,2,7
|
||||
11343="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11344="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11345="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11346="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,92,93,94,95,96,97,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256
|
||||
11347="abcdef-q0": 1,2,7
|
||||
11348="abcdef-q0": 1,2,7
|
||||
11349="a a q q": 7
|
||||
11350="abc\x00\x01 \xff": 1,2,3,4,5,6,7
|
||||
11351="a(c_ab_a\xbf": 2,6,9
|
||||
11352="a\x00aba.a\xff": 1,2,3,5,7
|
||||
11353="\xf3\x93\x8c\x8a":
|
||||
11353="\xf3\x89\xb8\x91":
|
||||
11353="\x14\xf3\xa8\xa5\x8d": 1
|
||||
11354="a9gz": 1,2,3,4
|
||||
11354="\xee\x80\x80\xc2\xb6": 3,5
|
||||
11355="a . ; :": 3,5,7
|
||||
11355="\xc2\xb4":
|
72
tools/hscollider/test_cases/corpora/comp.txt
Normal file
72
tools/hscollider/test_cases/corpora/comp.txt
Normal file
@@ -0,0 +1,72 @@
|
||||
15800="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 9,15,18,24,27,33,36,42,45,48
|
||||
15800="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 10,16,19,25,28,34,37,43,46,49
|
||||
15800="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 11,17,20,26,29,35,38,44,47,50
|
||||
15800="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 12,18,21,27,30,36,39,45,48,51
|
||||
15800="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 13,19,22,28,31,37,40,46,49,52
|
||||
15800="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 14,20,23,29,32,38,41,47,50,53
|
||||
15800="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,21,24,30,33,39,42,48,51,54
|
||||
15800="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 16,22,25,31,34,40,43,49,52,55
|
||||
15800="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 17,23,26,32,35,41,44,50,53,56
|
||||
15800="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,51,54,57
|
||||
15800="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 19,25,28,34,37,43,46,52,55,58
|
||||
15801="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15801="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15802="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,24,33,42,48
|
||||
15802="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 10,16,19,25,28,34,37,43,46,49
|
||||
15802="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 11,17,20,26,29,35,38,44,47,50
|
||||
15802="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 12,18,21,27,30,36,39,45,48,51
|
||||
15802="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 13,22,31,40,49
|
||||
15802="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 14,23,32,41,50
|
||||
15802="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,24,33,42,51
|
||||
15802="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15802="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15802="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15802="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz":
|
||||
15803="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,18,24,27,33,36,42,45,48
|
||||
15803="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 10,16,19,25,28,34,37,43,46,49
|
||||
15803="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 11,17,20,26,29,35,38,44,47,50
|
||||
15803="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 12,18,21,27,30,36,39,45,48,51
|
||||
15803="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 13,19,22,28,31,37,40,46,49,52
|
||||
15803="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 14,20,23,29,32,38,41,47,50,53
|
||||
15803="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,21,24,30,33,39,42,48,51,54
|
||||
15803="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 16,22,25,31,34,40,43,49,52,55
|
||||
15803="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 17,23,26,32,35,41,44,50,53,56
|
||||
15803="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,51,54,57
|
||||
15803="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 19,25,28,34,37,43,46,52,55,58
|
||||
15804="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,48
|
||||
15804="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 10,19,25,28,34,37,43,46,49
|
||||
15804="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 11,20,26,29,35,38,44,47,50
|
||||
15804="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 12,21,27,30,36,39,45,48,51
|
||||
15804="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 13,22,28,31,37,40,46,49,52
|
||||
15804="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 14,23,29,32,38,41,47,50,53
|
||||
15804="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,21,24,30,33,39,42,48,51,54
|
||||
15804="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 16,22,25,31,34,40,43,49,52,55
|
||||
15804="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 17,23,26,32,35,41,44,50,53,56
|
||||
15804="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,51,54,57
|
||||
15804="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 19,25,28,34,37,43,46,52,55,58
|
||||
15805="foobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,48
|
||||
15805="Xfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 10,19,25,28,34,37,43,46,49
|
||||
15805="XXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 11,20,26,29,35,38,44,47,50
|
||||
15805="XXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 12,21,27,30,36,39,45,48,51
|
||||
15805="XXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 13,22,28,31,37,40,46,49,52
|
||||
15805="XXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 14,23,29,32,38,41,47,50,53
|
||||
15805="XXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 15,21,24,30,33,39,42,48,51,54
|
||||
15805="XXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 16,22,25,31,34,40,43,49,52,55
|
||||
15805="XXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 17,23,26,32,35,41,44,50,53,56
|
||||
15805="XXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 18,24,27,33,36,42,45,51,54,57
|
||||
15805="XXXXXXXXXXfoobazbarfoobazbarfoobazbarfoobazbarfoobazbarbaz": 19,25,28,34,37,43,46,52,55,58
|
||||
15806="anorak.*trainspotter": 20
|
||||
15806="anorak.*trainspotterA": 20
|
||||
15807="anorak.*trainspotter": 20
|
||||
15807="anorak.*trainspotterA": 20
|
||||
15808="anorak.*trainspotter": 20
|
||||
15808="anorak.*trainspotterA": 20
|
80
tools/hscollider/test_cases/corpora/comptree.txt
Normal file
80
tools/hscollider/test_cases/corpora/comptree.txt
Normal file
@@ -0,0 +1,80 @@
|
||||
1000="foobar":
|
||||
1000="foofoobar": 9
|
||||
1000="foofoofoobar": 12
|
||||
1000="foofoofoofoobar": 15
|
||||
1000="xfoobar":
|
||||
1000="xfoofoobar": 10
|
||||
1000="xfoofoofoobar": 13
|
||||
1000="xfoofoofoofoobar": 16
|
||||
1001="foobar":
|
||||
1001="foofoobar": 9
|
||||
1001="foofoofoobar": 12
|
||||
1001="foofoofoofoobar": 15
|
||||
1001="xfoobar":
|
||||
1001="xfoofoobar": 10
|
||||
1001="xfoofoofoobar": 13
|
||||
1001="xfoofoofoofoobar": 16
|
||||
1002="foobar":
|
||||
1002="foofoobar": 9
|
||||
1002="foofoofoobar": 12
|
||||
1002="foofoofoofoobar": 15
|
||||
1002="xfoobar":
|
||||
1002="xfoofoobar":
|
||||
1002="xfoofoofoobar":
|
||||
1002="xfoofoofoofoobar":
|
||||
1003="foobar":
|
||||
1003="foofoobar": 9
|
||||
1003="foofoofoobar": 12
|
||||
1003="foofoofoofoobar":
|
||||
1003="xfoobar":
|
||||
1003="xfoofoobar":
|
||||
1003="xfoofoofoobar":
|
||||
1003="xfoofoofoofoobar":
|
||||
1004="foobar":
|
||||
1004="foofoobar": 9
|
||||
1004="foofoofoobar": 12
|
||||
1004="foofoofoofoobar": 15
|
||||
1004="xfoobar":
|
||||
1004="xfoofoobar": 10
|
||||
1004="xfoofoofoobar": 13
|
||||
1004="xfoofoofoofoobar": 16
|
||||
1005="foobar":
|
||||
1005="foofoobar": 9
|
||||
1005="foofoofoobar": 12
|
||||
1005="foofoofoofoobar": 15
|
||||
1005="xfoobar":
|
||||
1005="xfoofoobar": 10
|
||||
1005="xfoofoofoobar": 13
|
||||
1005="xfoofoofoofoobar": 16
|
||||
1006="foobar":
|
||||
1006="foofoobar":
|
||||
1006="foofoofoobar": 12
|
||||
1006="foofoofoofoobar": 15
|
||||
1006="xfoobar":
|
||||
1006="xfoofoobar":
|
||||
1006="xfoofoofoobar": 13
|
||||
1006="xfoofoofoofoobar": 16
|
||||
1007="foobar":
|
||||
1007="foofoobar":
|
||||
1007="foofoofoobar": 12
|
||||
1007="foofoofoofoobar": 15
|
||||
1007="xfoobar":
|
||||
1007="xfoofoobar":
|
||||
1007="xfoofoofoobar": 13
|
||||
1007="xfoofoofoofoobar": 16
|
||||
1008="foobar":
|
||||
1008="foofoobar": 9
|
||||
1008="foofoofoobar": 12
|
||||
1008="foofoofoofoobar": 15
|
||||
1008="xfoobar":
|
||||
1008="xfoofoobar": 10
|
||||
1008="xfoofoofoobar": 13
|
||||
1008="xfoofoofoofoobar": 16
|
||||
1009="foobar":
|
||||
1009="foofoobar": 9
|
||||
1009="foofoofoobar": 12
|
||||
1009="foofoofoofoobar": 15
|
||||
1009="xfoobar":
|
||||
1009="xfoofoobar": 10
|
||||
1009="xfoofoofoobar": 13
|
||||
1009="xfoofoofoofoobar": 16
|
552
tools/hscollider/test_cases/corpora/extparams.txt
Normal file
552
tools/hscollider/test_cases/corpora/extparams.txt
Normal file
@@ -0,0 +1,552 @@
|
||||
16200="foobar": 6
|
||||
16200="foo bar": 7
|
||||
16201="foobar":
|
||||
16201="foo bar":
|
||||
16201="foo bar":
|
||||
16201="foo bar":
|
||||
16201="foo bar": 10
|
||||
16201="foo bar": 11
|
||||
16201="foo bar": 12
|
||||
16202="foobar": 6
|
||||
16202="foo bar": 7
|
||||
16202="foo bar": 8
|
||||
16202="foo bar": 9
|
||||
16202="foo bar": 10
|
||||
16202="foo bar":
|
||||
16202="foo bar":
|
||||
16203="foobar":
|
||||
16203="foo bar":
|
||||
16203="foo bar":
|
||||
16203="foo bar":
|
||||
16203="foo bar": 10
|
||||
16203="foo bar":
|
||||
16203="foo bar":
|
||||
16204="foo bar":
|
||||
16204="foo bar": 10
|
||||
16204="foo bar": 11
|
||||
16204="foo bar": 12
|
||||
16204="foo bar": 13
|
||||
16204="foo bar": 14
|
||||
16204="foo bar": 15
|
||||
16204="foo bar":
|
||||
16204="foo bar":
|
||||
16204="foo bar":
|
||||
16205="ab":
|
||||
16205="a b":
|
||||
16205="a b":
|
||||
16205="a b": 5
|
||||
16205="a b": 6
|
||||
16205="a b_": 5
|
||||
16205="_a b": 6
|
||||
16205="_a b_": 6
|
||||
16206="ab":
|
||||
16206="a b":
|
||||
16206="a b":
|
||||
16206="a b":
|
||||
16206="a b":
|
||||
16206="a b_":
|
||||
16206="_a b":
|
||||
16206="_a b_":
|
||||
16206=" a b":
|
||||
16206=" a b": 10
|
||||
16206=" a b": 11
|
||||
16206=" a b": 12
|
||||
16206=" a b": 13
|
||||
16207="preamble_q": 10
|
||||
16207="preamble_____________________q": 30
|
||||
16207="preamble______________________q":
|
||||
16207="preamble_______________________q":
|
||||
16207="preamble________________________q":
|
||||
16208="preambleq":
|
||||
16208="preamble_q":
|
||||
16208="preamble__q":
|
||||
16208="preamble___q": 12
|
||||
16208="preamble____q": 13
|
||||
16208="preamble_____q": 14
|
||||
16209="aaaa":
|
||||
16209="aaxaa": 5
|
||||
16209="aaxxxxxaa": 9
|
||||
16209="aaxxxxxxaa": 10
|
||||
16209="aaxxxxxxxaa":
|
||||
16209="_aaxxxxxaa": 10
|
||||
16209="_aaxxxxxxaa":
|
||||
16209="_aaxxxxxxxaa":
|
||||
16210="01234567890123456789012345678901": 32
|
||||
16210="012345678901234567890123456789012345678901234567890123456789": 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
|
||||
16211="\x04\xe8F\x0eI\xe1\xcb5\x0b{\x04\xea\x17%Jt\xf2\x11\x8e!\x11vOu9\x07\x12":
|
||||
16212="aaaaaaaaaaaaaaaaaaaa": 10
|
||||
16212="xaaaaaaaaaaaaaaaaaaa": 10
|
||||
16212="aaaaaaaaaxaaaaaaaaaa":
|
||||
16212="aaaaaaaaaaxaaaaaaaaa": 10
|
||||
16213="aaaaaaaaaaaaaaaaaaax": 20
|
||||
16213="aaaaaaaaaaaaaaaaaaaa":
|
||||
16213="aaaaaaaaaaaaaaaaaaaax": 21
|
||||
16213="aaaaaaaaaaaaaaaaaax":
|
||||
16213="aaaaaaaaaaaaaaaaaaxa":
|
||||
16214="foo":
|
||||
16214="foo_":
|
||||
16214="foo__":
|
||||
16214="foo___":
|
||||
16214="foo____":
|
||||
16214="foo_____":
|
||||
16214="foo______":
|
||||
16214="foo_______": 10
|
||||
16214="foo________": 10,11
|
||||
16214="foo_________": 10,11,12
|
||||
16214="foo__________": 10,11,12,13
|
||||
16214="foofoo_______": 10,11,12,13
|
||||
16214="foofoo________": 10,11,12,13,14
|
||||
16214="foofoo_________": 10,11,12,13,14,15
|
||||
16214="foofoo__________": 10,11,12,13,14,15,16
|
||||
16214="foofoo___________": 10,11,12,13,14,15,16,17
|
||||
16215="foo":
|
||||
16215="foo_":
|
||||
16215="foo__":
|
||||
16215="foo___":
|
||||
16215="foo____":
|
||||
16215="foo_____":
|
||||
16215="foo______":
|
||||
16215="foo_______": 10
|
||||
16215="foo________": 10,11
|
||||
16215="foo_________": 10,11,12
|
||||
16215="foo__________": 10,11,12,13
|
||||
16215="foofoo_______": 10,11,12,13
|
||||
16215="foofoo________": 10,11,12,13,14
|
||||
16215="foofoo_________": 10,11,12,13,14,15
|
||||
16215="foofoo__________": 10,11,12,13,14,15,16
|
||||
16215="foofoo___________": 10,11,12,13,14,15,16,17
|
||||
16216="hatstandteakettle":
|
||||
16216="hatstand_teakettle":
|
||||
16216="hatstand__teakettle":
|
||||
16216="hatstand___teakettle":
|
||||
16216="hatstand____teakettle":
|
||||
16216="hatstand_____teakettle":
|
||||
16216="hatstand______teakettle":
|
||||
16216="hatstand_______teakettle":
|
||||
16216="hatstand________teakettle": 25
|
||||
16216="hatstand_________teakettle": 26
|
||||
16217="hatstand":
|
||||
16217="_hatstand":
|
||||
16217="__hatstand": 10
|
||||
16217="___hatstand": 11
|
||||
16217="____hatstand": 12
|
||||
16217="_____hatstand": 13
|
||||
16217="______hatstand": 14
|
||||
16217="_______hatstand": 15
|
||||
16217="________hatstand":
|
||||
16217="_________hatstand":
|
||||
16218="abc":
|
||||
16218="_abc":
|
||||
16218="__abc": 5
|
||||
16218="___abc": 6
|
||||
16218="____abc": 7
|
||||
16218="_____abc": 8
|
||||
16218="______abc": 9
|
||||
16218="_______abc": 10
|
||||
16218="________abc":
|
||||
16219="foobar":
|
||||
16219="foo_bar":
|
||||
16219="foo__bar":
|
||||
16219="foo___bar":
|
||||
16219="foo____bar": 10
|
||||
16219="foofoo_bar": 10
|
||||
16219="foofoo_____bar": 14
|
||||
16220="foobar":
|
||||
16220="foo_bar":
|
||||
16220="foo__bar":
|
||||
16220="foo___bar":
|
||||
16220="foo____bar": 10
|
||||
16220="foofoo_bar": 10
|
||||
16220="foofoo_____bar": 14
|
||||
16221="0":
|
||||
16221="01":
|
||||
16221="012":
|
||||
16221="0123": 4
|
||||
16221="01234": 4,5
|
||||
16222="0":
|
||||
16222="01":
|
||||
16222="012":
|
||||
16222="0123": 4
|
||||
16222="01234": 4,5
|
||||
16223="hatstand":
|
||||
16223="hatstandhatstand":
|
||||
16223="___hatstandhatstand":
|
||||
16223="____hatstandhatstand": 20
|
||||
16223="_____hatstandhatstand": 21
|
||||
16223="hatstandhatstandhatstand": 24
|
||||
16224="hatstand":
|
||||
16224="hatstandhatstand":
|
||||
16224="___hatstandhatstand":
|
||||
16224="____hatstandhatstand": 20
|
||||
16224="_____hatstandhatstand": 21
|
||||
16224="hatstandhatstandhatstand": 24
|
||||
16225="hatstand":
|
||||
16225="hatstandhatstandhatstand": 20,21,22,23,24
|
||||
16225="hatstand___________":
|
||||
16225="hatstand____________": 20
|
||||
16225="hatstand_____________": 20,21
|
||||
16226="long cat is lng":
|
||||
16226="long cat is long": 16
|
||||
16226="long cat is loong": 17
|
||||
16226="long cat is looong": 18
|
||||
16226="long cat is loooooooooooooooooooong": 35
|
||||
16227="":
|
||||
16227="W":
|
||||
16227="l": 1
|
||||
16227="ll": 1
|
||||
16227="l l l l l l l l l l l l": 1
|
||||
16227=" l l l l l l l l l l l l":
|
||||
16228="rascal": 6
|
||||
16228="_rascal":
|
||||
16228="__rascal":
|
||||
16229="": 0
|
||||
16229="\x0b\x80vdwn\xd5\x19vdwn\x8a\x1fvdwnp\x8evdwn": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
|
||||
16230="abc_ef":
|
||||
16230="abc_def":
|
||||
16230="abc_ddef":
|
||||
16230="abc_dddef":
|
||||
16230="abc_ddddef": 10
|
||||
16230="abc_dddddef": 11
|
||||
16230="abc_ddddddef": 12
|
||||
16230="abc_dddddddef": 13
|
||||
16230="_abc_def":
|
||||
16230="__abc_def":
|
||||
16230="___abc_def":
|
||||
16230="____abc_def":
|
||||
16230="______abc_def":
|
||||
16230="_______abc_def":
|
||||
16230="________abc_def":
|
||||
16230="_________abc_def":
|
||||
16230="__________abc_def":
|
||||
16230="___________abc_def":
|
||||
16230="____________abc_def":
|
||||
16230="_____________abc_def":
|
||||
16230="______________abc_def":
|
||||
16230="_______________abc_def":
|
||||
16230="________________abc_def":
|
||||
16230="_________________abc_def":
|
||||
16230="__________________abc_def":
|
||||
16230="___________________abc_def":
|
||||
16230="____________________abc_def":
|
||||
16230="_____________________abc_def":
|
||||
16230="______________________abc_def":
|
||||
16230="_______________________abc_def":
|
||||
16230="________________________abc_def":
|
||||
16230="_________________________abc_def":
|
||||
16231="egs\n": 3
|
||||
16231="g": 1
|
||||
16231="g\n": 1
|
||||
16231="t": 1
|
||||
16232="h":
|
||||
16232="_ab": 3
|
||||
16232="_ab\n": 3
|
||||
16233="abc":
|
||||
16233="abcd":
|
||||
16233="abcde": 5
|
||||
16233="abcdef": 5,6
|
||||
16233="__abc":
|
||||
16233="__abcd":
|
||||
16233="__abcde": 7
|
||||
16233="__abcdef": 7,8
|
||||
16234="kne":
|
||||
16234="knee":
|
||||
16234="kneee": 5
|
||||
16234="kneeee": 5,6
|
||||
16234="kneeeee": 5,6,7
|
||||
16234="kneeeeee": 5,6,7,8
|
||||
16234="kneeeeeee": 5,6,7,8,9
|
||||
16234="kneeeeeeee": 5,6,7,8,9,10
|
||||
16234="kneeeeeeeee": 5,6,7,8,9,10,11
|
||||
16234="kneeeeeeeeee": 5,6,7,8,9,10,11,12
|
||||
16234="kneeeeeeeeeee": 5,6,7,8,9,10,11,12
|
||||
16234="knereeeereeee": 5,6,7,8,9,10,11,12
|
||||
16235="s":
|
||||
16235="c":
|
||||
16235="zzzz": 4
|
||||
16235="ycdliejrcnrjfh akjshdna y": 4,9,21
|
||||
16236="__h__C]z________zJ]_____9___x": 8,17
|
||||
16237="O\xa4\x12\x0b\xd6\xa8j\xfdtL!Ia\xaa\xd3\xfa\xf31!\xbej":
|
||||
16238="kgh_\xc5\xc9\xde\xcb\xc2\xfe\x0b\xb3\x83M\xf8\xa5g\"\x82c4a-\xd8[\xf8\xed\x9b\xdd\xb9g\xe8\xbf": 2
|
||||
16239="p":
|
||||
16239="pp":
|
||||
16239="ppp":
|
||||
16239="pppp":
|
||||
16239="ppppp": 5
|
||||
16239="pppppp": 5,6
|
||||
16239="ppppppp": 5,6,7
|
||||
16239="pppppppp": 5,6,7,8
|
||||
16239="ppppppppp": 5,6,7,8,9
|
||||
16239="pppppppppp": 5,6,7,8,9,10
|
||||
16239="ppppppppppp": 5,6,7,8,9,10,11
|
||||
16239="pppppppppppp": 5,6,7,8,9,10,11,12
|
||||
16239="ppppppppppppp": 5,6,7,8,9,10,11,12,13
|
||||
16239="pppppppppppppp": 5,6,7,8,9,10,11,12,13,14
|
||||
16239="ppppppppppppppp": 5,6,7,8,9,10,11,12,13,14,15
|
||||
16239="pppppppppppppppp": 5,6,7,8,9,10,11,12,13,14,15
|
||||
16239="ppppppppppppppppp": 5,6,7,8,9,10,11,12,13,14,15
|
||||
16239="pppppppppppppppppp": 5,6,7,8,9,10,11,12,13,14,15
|
||||
16239="ppppppppppppppppppp": 5,6,7,8,9,10,11,12,13,14,15
|
||||
16239="\npppp":
|
||||
16239="\nppppp": 6
|
||||
16239="\npppppp": 6,7
|
||||
16240="":
|
||||
16240="a":
|
||||
16240="c":
|
||||
16240="cc":
|
||||
16240="ccc":
|
||||
16240="cccc": 4
|
||||
16240="ccccc": 4,5
|
||||
16240="acacacacacac": 4,6,8,10,12
|
||||
16241="ykmy_g":
|
||||
16241="ykmy_gg":
|
||||
16241="ykmy_ggg": 8
|
||||
16241="ykmy_gggg": 8,9
|
||||
16241="ykmy_ggggg": 8,9,10
|
||||
16241="_ykmy_ggggg": 9,10,11
|
||||
16242="qrhhhhh":
|
||||
16242="qrhhhhhh": 8
|
||||
16242="qrhhhhhhh": 8,9
|
||||
16242="qrhhhhhhhh": 8,9,10
|
||||
16242="qrhhhhhhhhh": 8,9,10,11
|
||||
16242="qrhhhhhhhhhh": 8,9,10,11,12
|
||||
16242="qrhhhhhhhhhhh": 8,9,10,11,12,13
|
||||
16242="qrhhhhhhhhhhhh": 8,9,10,11,12,13,14
|
||||
16242="qrhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15
|
||||
16242="qrhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16
|
||||
16242="qrhhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16,17
|
||||
16242="qrhhhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16,17,18
|
||||
16242="qrhhhhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16,17,18,19
|
||||
16242="qrhhhhhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16,17,18,19,20
|
||||
16242="qrhhhhhhhhhhhhhhhhhhh": 8,9,10,11,12,13,14,15,16,17,18,19,20
|
||||
16242="z":
|
||||
16242="qmhhhhhhhhhhz": 8,9,10,11,12
|
||||
16243="cjmwjnnnn": 9
|
||||
16244="\x08$\x82Zz\x8b\x0e\xe2a\x91\x8c\x9eQ\xc7\x84IQYEaYSC=\xbaB\x0b\xcd\xc8\xe5t\x8b\x06m\xa40\x1a%0KP":
|
||||
16244="__qyeysa":
|
||||
16244="__qye_ysa":
|
||||
16244="__qye__ysa": 9
|
||||
16244="__qye__ys:":
|
||||
16245="foo": 3
|
||||
16245="afoo":
|
||||
16245="aafoo":
|
||||
16245="aaafoo":
|
||||
16245=" foo": 4
|
||||
16245=" foo": 5
|
||||
16245=" foo": 9
|
||||
16245=" foo": 10
|
||||
16245=" foo":
|
||||
16245=" afoo":
|
||||
16245=" afoo":
|
||||
16245=" afoo":
|
||||
16246="foo": 3
|
||||
16246="foo ": 3
|
||||
16246="fooa":
|
||||
16246="_______foo": 10
|
||||
16246="_______foo ": 10
|
||||
16246="________foo ":
|
||||
16246="______foo ": 9
|
||||
16246="_____foo ": 8
|
||||
16247="foo": 3
|
||||
16247="foo ": 3
|
||||
16247=" foo ": 4
|
||||
16247="______ foo ": 10
|
||||
16247="_____ foo ": 9
|
||||
16247="_____ fooa":
|
||||
16247="_______ foo ":
|
||||
16247="________ foo ":
|
||||
16248="foobar":
|
||||
16248="foo bar": 7
|
||||
16248=" foo bar": 8
|
||||
16248=" foo bar": 9
|
||||
16248=" foo bar": 10
|
||||
16248=" foo bar": 11
|
||||
16248=" foo bar": 12
|
||||
16248=" foo bar": 13
|
||||
16248=" foo bar": 14
|
||||
16248=" foo bar": 15
|
||||
16248=" foo bar ": 9
|
||||
16248=" foo bar ": 10
|
||||
16248=" foo bar ": 11
|
||||
16248=" foo bar ": 12
|
||||
16248=" foo bar ": 13
|
||||
16248=" foo bar ": 14
|
||||
16248=" foo bar ": 15
|
||||
16249="foobar":
|
||||
16249="foo bar":
|
||||
16249=" foo bar":
|
||||
16249=" foo bar":
|
||||
16249=" foo bar":
|
||||
16249=" foo bar":
|
||||
16249=" foo bar": 12
|
||||
16249=" foo bar": 13
|
||||
16249=" foo bar": 14
|
||||
16249=" foo bar": 15
|
||||
16249=" foo bar ":
|
||||
16249=" foo bar ":
|
||||
16249=" foo bar ":
|
||||
16249=" foo bar ": 12
|
||||
16249=" foo bar ": 13
|
||||
16249=" foo bar ": 14
|
||||
16249=" foo bar ": 15
|
||||
16250="foobar":
|
||||
16250="foo bar": 7
|
||||
16250=" foo bar": 8
|
||||
16250=" foo bar": 9
|
||||
16250=" foo bar": 10
|
||||
16250=" foo bar": 11
|
||||
16250=" foo bar": 12
|
||||
16250=" foo bar": 13
|
||||
16250=" foo bar": 14
|
||||
16250=" foo bar": 15
|
||||
16250=" foo bar ": 9
|
||||
16250=" foo bar ": 10
|
||||
16250=" foo bar ": 11
|
||||
16250=" foo bar ": 12
|
||||
16250=" foo bar ": 13
|
||||
16250=" foo bar ": 14
|
||||
16250=" foo bar ": 15
|
||||
16251="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16251="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51
|
||||
16251="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51,52
|
||||
16251="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51,52,53
|
||||
16252="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16252="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16252="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 52
|
||||
16252="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 52,53
|
||||
16253="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16253="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16253="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16253="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 53
|
||||
16254="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16254="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51
|
||||
16254="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51,52
|
||||
16254="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 51,52,53
|
||||
16255="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16255="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16255="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 52
|
||||
16255="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 52,53
|
||||
16256="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16256="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16256="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
16256="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 53
|
||||
16257="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16257="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54
|
||||
16257="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54,55
|
||||
16257="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54,55,56
|
||||
16258="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16258="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16258="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 55
|
||||
16258="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 55,56
|
||||
16259="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16259="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16259="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16259="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 56
|
||||
16260="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16260="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54
|
||||
16260="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54,55
|
||||
16260="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 54,55,56
|
||||
16261="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16261="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16261="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 55
|
||||
16261="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 55,56
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 56
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 56,57
|
||||
16262="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 56,57,58
|
||||
16263="unambiguous": 11
|
||||
16263="extremely unambiguous": 21
|
||||
16264=" \n a":
|
||||
16264=" \na": 13
|
||||
16264=" a":
|
||||
16264=" g": 12
|
||||
16264=" \n a":
|
||||
16264=" \na": 12
|
||||
16264=" a":
|
||||
16264=" g": 11
|
||||
16264=" \na": 11
|
||||
16264=" a":
|
||||
16264=" g": 10
|
||||
16264="\na":
|
||||
16264="a":
|
||||
16264="g":
|
||||
16265="_apple2":
|
||||
16265="apple2": 6
|
||||
16265="foo": 3
|
||||
16265=" foobar":
|
||||
16265="foo__bar": 3
|
||||
16265="foo_bar": 3
|
||||
16265="foobar": 3,6
|
||||
16265="jabberwocky":
|
||||
16266="aaaaaaaa":
|
||||
16266="bbbbbbbbb":
|
||||
16266="cccccccccc": 10
|
||||
16266="floating":
|
||||
16266=" floating":
|
||||
16266=" floating": 10
|
||||
16266=" floating": 11
|
||||
16266=" floating": 12
|
||||
16266=" floating": 13
|
||||
16267="abcdef_____":
|
||||
16267="abcdefabcdefabcdefabcdef_____": 20,21,22,23,24,25,26,27,28,29
|
||||
16267="_________abcdef_____": 20
|
||||
16267="_________abcdef____":
|
||||
16267="_________abcdef______": 20,21
|
||||
16267="_________abcdefabcdef": 20,21
|
||||
16267="_____________abcdefabcdef": 24,25
|
||||
16268="abcdef_":
|
||||
16268="012345678901abcdef_":
|
||||
16268="0123456789012abcdef_": 20
|
||||
16268="01234567890123abcdef_": 21
|
||||
16268="012345678901234abcdef_": 22
|
||||
16268="01234567890123abcdef":
|
||||
16268="012345678901234abcdef":
|
||||
16269="012345678901abcdef__": 20
|
||||
16269="0123456789012abcdef__": 21
|
||||
16269="01234567890123abcdef__": 22
|
||||
16269="012345678901234abcdef__": 23
|
||||
16269="01234567890123abcdef_":
|
||||
16269="012345678901234abcdef_":
|
||||
16270="abcdef":
|
||||
16270="_abcdef":
|
||||
16270="__abcdef":
|
||||
16270="___abcdef":
|
||||
16270="____abcdef": 10
|
||||
16270="_____abcdef": 11
|
||||
16270="______abcdef": 12
|
||||
16270="_______abcdef": 13
|
||||
16270="________abcdef": 14
|
||||
16270="_________abcdef": 15
|
||||
16270="__________abcdef": 16
|
||||
16270="___________abcdef": 17
|
||||
16270="____________abcdef": 18
|
||||
16270="_____________abcdef": 19
|
||||
16270="______________abcdef": 20
|
||||
16270="_______________abcdef":
|
||||
16270="________________abcdef":
|
||||
16270="abcdefabcdefabcdefabcdefabcdefabcdef": 12,18
|
||||
16270="defabcdefabcdefabcdefabcdefabcdef": 15
|
||||
16271="abcdef":
|
||||
16271="_abcdef":
|
||||
16271="__abcdef":
|
||||
16271="___abcdef":
|
||||
16271="____abcdef": 10
|
||||
16271="_____abcdef":
|
||||
16271="______abcdef":
|
||||
16271="_______abcdef":
|
||||
16271="________abcdef":
|
||||
16271="abcdefabcdefabcdefabcdefabcdefabcdef":
|
||||
16271="cdefabcdefabcdefabcdefabcdefabcdef": 10
|
||||
16272="abcdef__":
|
||||
16272="__abcdef__": 10
|
||||
16272="_abcdef__":
|
||||
16272="___abcdef__":
|
||||
16272="__abcdef_":
|
||||
16272="_abcdef_":
|
||||
16272="___abcdef_":
|
||||
16273="\xe0\xb7\x81\xf1\x81\x90\xb9b\n":
|
||||
16273="\xf3\xa3\x87\x9d\xf4\x8f\xb8\xa0b": 9
|
||||
16273="___b":
|
||||
16273="__b":
|
||||
16273="__b\n":
|
368
tools/hscollider/test_cases/corpora/highlander.txt
Normal file
368
tools/hscollider/test_cases/corpora/highlander.txt
Normal file
@@ -0,0 +1,368 @@
|
||||
15300="fo":
|
||||
15300="foo": 3
|
||||
15300="ffoo": 4
|
||||
15300="fofoo": 5
|
||||
15300="foofoo": 3,6
|
||||
15300="fooXXXfoo": 3,9
|
||||
15300="XXXfooXXXfoo": 6,12
|
||||
15300="foofoofoofoo": 3,6,9,12
|
||||
15301="foo":
|
||||
15301="foobar": 6
|
||||
15301="foobarbar": 6,9
|
||||
15301="foobar\nfoobarbar": 6,13,16
|
||||
15302="foo":
|
||||
15302="foobar": 6
|
||||
15302="foobarbar": 6,9
|
||||
15302="foobar\nfoobarbar": 6,13,16
|
||||
15303="bar123456781X3456789":
|
||||
15303="blahfoo12345678123456789": 22
|
||||
15303="foo":
|
||||
15303="foo12345678123456":
|
||||
15303="foo123456781234567": 18
|
||||
15303="foo1234567812345678": 18
|
||||
15303="foo12345678123456789": 18
|
||||
15303="foo1234567812345678X": 18
|
||||
15303="foo123456781234567X": 18
|
||||
15303="foo12345678123456X":
|
||||
15303="foo1234567812345X":
|
||||
15303="foo123456781X3456789":
|
||||
15303="foofoo12345678123456789": 18,21
|
||||
15303="foofoo12345678123456789": 18,21
|
||||
15303="foofooX23456781foo23456789YYYYYYYY": 33
|
||||
15303="fooX2345678123456789":
|
||||
15303="fooXfoo12345678123456789": 22
|
||||
15303="XXX12345678123456789":
|
||||
15304="bar123456781X3456789":
|
||||
15304="blahfoo12345678123456789": 23
|
||||
15304="foo":
|
||||
15304="foo12345678123456":
|
||||
15304="foo123456781234567":
|
||||
15304="foo1234567812345678": 19
|
||||
15304="foo12345678123456789": 19
|
||||
15304="foo1234567812345678X": 19
|
||||
15304="foo123456781234567X":
|
||||
15304="foo12345678123456X":
|
||||
15304="foo1234567812345X":
|
||||
15304="foo123456781X3456789":
|
||||
15304="foofoo12345678123456789": 19,22
|
||||
15304="foofoo12345678123456789": 19,22
|
||||
15304="foofooX23456781foo23456789YYYYYYYY": 34
|
||||
15304="fooX2345678123456789":
|
||||
15304="fooXfoo12345678123456789": 23
|
||||
15304="XXX12345678123456789":
|
||||
15305="bar123456781X3456789":
|
||||
15305="blahfoo12345678123456789": 24
|
||||
15305="foo":
|
||||
15305="foo12345678123456":
|
||||
15305="foo123456781234567":
|
||||
15305="foo1234567812345678":
|
||||
15305="foo12345678123456789": 20
|
||||
15305="foo1234567812345678X":
|
||||
15305="foo123456781234567X":
|
||||
15305="foo12345678123456X":
|
||||
15305="foo1234567812345X":
|
||||
15305="foo123456781X3456789":
|
||||
15305="foofoo12345678123456789": 20,23
|
||||
15305="foofoo12345678123456789": 20,23
|
||||
15305="foofooX23456781foo23456789YYYYYYYY":
|
||||
15305="fooX2345678123456789":
|
||||
15305="fooXfoo12345678123456789": 24
|
||||
15305="XXX12345678123456789":
|
||||
15306="bar123456781X3456789":
|
||||
15306="blahfoo12345678123456789": 24
|
||||
15306="foo":
|
||||
15306="foo12345678123456":
|
||||
15306="foo123456781234567":
|
||||
15306="foo1234567812345678":
|
||||
15306="foo12345678123456789": 20
|
||||
15306="foo1234567812345678X":
|
||||
15306="foo123456781234567X":
|
||||
15306="foo12345678123456X":
|
||||
15306="foo1234567812345X":
|
||||
15306="foo123456781X3456789":
|
||||
15306="foofoo12345678123456789": 20,21,22,23
|
||||
15306="foofoo12345678123456789": 20,21,22,23
|
||||
15306="foofooX23456781foo23456789YYYYYYYY": 24,25,26,27,28,29,30,31,32,33,34
|
||||
15306="fooX2345678123456789":
|
||||
15306="fooXfoo12345678123456789": 21,22,23,24
|
||||
15306="XXX12345678123456789":
|
||||
15307="bar123456781X3456789":
|
||||
15307="blahfoo12345678123456789":
|
||||
15307="foo":
|
||||
15307="foo12345678123456":
|
||||
15307="foo123456781234567":
|
||||
15307="foo1234567812345678":
|
||||
15307="foo12345678123456789":
|
||||
15307="foo1234567812345678X":
|
||||
15307="foo123456781234567X":
|
||||
15307="foo12345678123456X":
|
||||
15307="foo1234567812345X":
|
||||
15307="foo123456781X3456789":
|
||||
15307="foofoo12345678123456789":
|
||||
15307="foofoo12345678123456789":
|
||||
15307="foofooX23456781foo23456789YYYYYYYY":
|
||||
15307="fooX2345678123456789":
|
||||
15307="fooXfoo12345678123456789":
|
||||
15307="XXX12345678123456789":
|
||||
15308="bar123456781X3456789":
|
||||
15308="blahfoo12345678123456789": 24
|
||||
15308="foo":
|
||||
15308="foo12345678123456":
|
||||
15308="foo123456781234567":
|
||||
15308="foo1234567812345678":
|
||||
15308="foo12345678123456789": 20
|
||||
15308="foo1234567812345678X":
|
||||
15308="foo123456781234567X":
|
||||
15308="foo12345678123456X":
|
||||
15308="foo1234567812345X":
|
||||
15308="foo123456781X3456789":
|
||||
15308="foofoo12345678123456789": 20,23
|
||||
15308="foofoo12345678123456789": 20,23
|
||||
15308="foofooX23456781foo23456789YYYYYYYY":
|
||||
15308="fooX2345678123456789":
|
||||
15308="fooXfoo12345678123456789": 24
|
||||
15308="XXX12345678123456789":
|
||||
15309="bar123456781X3456789":
|
||||
15309="blahfoo12345678123456789": 24
|
||||
15309="foo":
|
||||
15309="foo12345678123456":
|
||||
15309="foo123456781234567":
|
||||
15309="foo1234567812345678":
|
||||
15309="foo12345678123456789": 20
|
||||
15309="foo1234567812345678X":
|
||||
15309="foo123456781234567X":
|
||||
15309="foo12345678123456X":
|
||||
15309="foo1234567812345X":
|
||||
15309="foo123456781X3456789":
|
||||
15309="foofoo12345678123456789": 23
|
||||
15309="foofoo12345678123456789": 23
|
||||
15309="foofooX23456781foo23456789YYYYYYYY":
|
||||
15309="fooX2345678123456789":
|
||||
15309="fooXfoo12345678123456789": 24
|
||||
15309="XXX12345678123456789":
|
||||
15310="bar123456781X3456789":
|
||||
15310="blahfoo12345678123456789": 17,18,19,20,21,22,23,24
|
||||
15310="foo":
|
||||
15310="foo12345678123456": 17
|
||||
15310="foo123456781234567": 17,18
|
||||
15310="foo1234567812345678": 17,18,19
|
||||
15310="foo12345678123456789": 17,18,19,20
|
||||
15310="foo1234567812345678X": 17,18,19
|
||||
15310="foo123456781234567X": 17,18
|
||||
15310="foo12345678123456X": 17
|
||||
15310="foo1234567812345X":
|
||||
15310="foo123456781X3456789":
|
||||
15310="foofoo12345678123456789": 17,18,19,20,21,22,23
|
||||
15310="foofoo12345678123456789": 17,18,19,20,21,22,23
|
||||
15310="foofooX23456781foo23456789YYYYYYYY": 24,25,26,27,28,29,30,31,32,33,34
|
||||
15310="fooX2345678123456789":
|
||||
15310="fooXfoo12345678123456789": 21,22,23,24
|
||||
15310="XXX12345678123456789": 20
|
||||
15311="bar123456781X3456789":
|
||||
15311="blahfoo12345678123456789": 17
|
||||
15311="foo":
|
||||
15311="foo12345678123456": 17
|
||||
15311="foo123456781234567": 17
|
||||
15311="foo1234567812345678": 17
|
||||
15311="foo12345678123456789": 17
|
||||
15311="foo1234567812345678X": 17
|
||||
15311="foo123456781234567X": 17
|
||||
15311="foo12345678123456X": 17
|
||||
15311="foo1234567812345X":
|
||||
15311="foo123456781X3456789":
|
||||
15311="foofoo12345678123456789": 17
|
||||
15311="foofoo12345678123456789": 17
|
||||
15311="foofooX23456781foo23456789YYYYYYYY":
|
||||
15311="fooX2345678123456789":
|
||||
15311="fooXfoo12345678123456789":
|
||||
15311="XXX12345678123456789":
|
||||
15312="bar123456781X3456789":
|
||||
15312="blahfoo12345678123456789": 22
|
||||
15312="foo":
|
||||
15312="foo12345678123456":
|
||||
15312="foo123456781234567": 18
|
||||
15312="foo1234567812345678": 18
|
||||
15312="foo12345678123456789": 18
|
||||
15312="foo1234567812345678X": 18
|
||||
15312="foo123456781234567X": 18
|
||||
15312="foo12345678123456X":
|
||||
15312="foo1234567812345X":
|
||||
15312="foo123456781X3456789":
|
||||
15312="foofoo12345678123456789": 18,20,21
|
||||
15312="foofoo12345678123456789": 18,20,21
|
||||
15312="foofooX23456781foo23456789YYYYYYYY": 32,33
|
||||
15312="fooX2345678123456789":
|
||||
15312="fooXfoo12345678123456789": 21,22
|
||||
15312="XXX12345678123456789":
|
||||
15313="bar123456781X3456789":
|
||||
15313="blahfoo12345678123456789": 23
|
||||
15313="foo":
|
||||
15313="foo12345678123456":
|
||||
15313="foo123456781234567":
|
||||
15313="foo1234567812345678": 19
|
||||
15313="foo12345678123456789": 19
|
||||
15313="foo1234567812345678X": 19
|
||||
15313="foo123456781234567X":
|
||||
15313="foo12345678123456X":
|
||||
15313="foo1234567812345X":
|
||||
15313="foo123456781X3456789":
|
||||
15313="foofoo12345678123456789": 19,21,22
|
||||
15313="foofoo12345678123456789": 19,21,22
|
||||
15313="foofooX23456781foo23456789YYYYYYYY": 33,34
|
||||
15313="fooX2345678123456789":
|
||||
15313="fooXfoo12345678123456789": 22,23
|
||||
15313="XXX12345678123456789":
|
||||
15314="bar123456781X3456789":
|
||||
15314="blahfoo12345678123456789": 24
|
||||
15314="foo":
|
||||
15314="foo12345678123456":
|
||||
15314="foo123456781234567":
|
||||
15314="foo1234567812345678":
|
||||
15314="foo12345678123456789": 20
|
||||
15314="foo1234567812345678X":
|
||||
15314="foo123456781234567X":
|
||||
15314="foo12345678123456X":
|
||||
15314="foo1234567812345X":
|
||||
15314="foo123456781X3456789":
|
||||
15314="foofoo12345678123456789": 20,22,23
|
||||
15314="foofoo12345678123456789": 20,22,23
|
||||
15314="foofooX23456781foo23456789YYYYYYYY": 34
|
||||
15314="fooX2345678123456789":
|
||||
15314="fooXfoo12345678123456789": 23,24
|
||||
15314="XXX12345678123456789":
|
||||
15315="bar123456781X3456789":
|
||||
15315="blahfoo12345678123456789": 22
|
||||
15315="foo":
|
||||
15315="foo12345678123456":
|
||||
15315="foo123456781234567": 18
|
||||
15315="foo1234567812345678": 18
|
||||
15315="foo12345678123456789": 18
|
||||
15315="foo1234567812345678X": 18
|
||||
15315="foo123456781234567X": 18
|
||||
15315="foo12345678123456X":
|
||||
15315="foo1234567812345X":
|
||||
15315="foo123456781X3456789":
|
||||
15315="foofoo12345678123456789": 18,21
|
||||
15315="foofoo12345678123456789": 18,21
|
||||
15315="foofooX23456781foo23456789YYYYYYYY": 33
|
||||
15315="fooX2345678123456789":
|
||||
15315="fooXfoo12345678123456789": 22
|
||||
15315="XXX12345678123456789":
|
||||
15316="bar123456781X3456789":
|
||||
15316="blahfoo12345678123456789": 23
|
||||
15316="foo":
|
||||
15316="foo12345678123456":
|
||||
15316="foo123456781234567":
|
||||
15316="foo1234567812345678": 19
|
||||
15316="foo12345678123456789": 19
|
||||
15316="foo1234567812345678X": 19
|
||||
15316="foo123456781234567X":
|
||||
15316="foo12345678123456X":
|
||||
15316="foo1234567812345X":
|
||||
15316="foo123456781X3456789":
|
||||
15316="foofoo12345678123456789": 19,22
|
||||
15316="foofoo12345678123456789": 19,22
|
||||
15316="foofooX23456781foo23456789YYYYYYYY": 34
|
||||
15316="fooX2345678123456789":
|
||||
15316="fooXfoo12345678123456789": 23
|
||||
15316="XXX12345678123456789":
|
||||
15317="bar123456781X3456789":
|
||||
15317="blahfoo12345678123456789": 24
|
||||
15317="foo":
|
||||
15317="foo12345678123456":
|
||||
15317="foo123456781234567":
|
||||
15317="foo1234567812345678":
|
||||
15317="foo12345678123456789": 20
|
||||
15317="foo1234567812345678X":
|
||||
15317="foo123456781234567X":
|
||||
15317="foo12345678123456X":
|
||||
15317="foo1234567812345X":
|
||||
15317="foo123456781X3456789":
|
||||
15317="foofoo12345678123456789": 20,23
|
||||
15317="foofoo12345678123456789": 20,23
|
||||
15317="foofooX23456781foo23456789YYYYYYYY":
|
||||
15317="fooX2345678123456789":
|
||||
15317="fooXfoo12345678123456789": 24
|
||||
15317="XXX12345678123456789":
|
||||
15318="foo": 3
|
||||
15318="foofoo": 3,6
|
||||
15318="bar": 3
|
||||
15318="bar": 3
|
||||
15318="foobar": 3,6
|
||||
15318="barfoo": 3,6
|
||||
15318="XXfoo": 5
|
||||
15318="XXfoofoo": 5,8
|
||||
15318="XXbar": 5
|
||||
15318="XXbar": 5
|
||||
15318="XXfoobar": 5,8
|
||||
15318="XXbarfoo": 5,8
|
||||
15319="foobarX": 4,7
|
||||
15319="barfooX": 4,7
|
||||
15320="___\na___aa_": 0,4,5,10
|
||||
15321="foo bar baz": 7,11
|
||||
15321="foobarbarbazbarbaz": 6,9,12,15,18
|
||||
15321="foobarbaz": 6,9
|
||||
15321="foobarbazfoobarbaz": 6,9,15,18
|
||||
15322="foo bar baz": 7,11
|
||||
15322="foobarbarbazbarbaz": 6,9,12,15,18
|
||||
15322="foobarbaz": 6,9
|
||||
15322="foobarbazfoobarbaz": 6,9,15,18
|
||||
15323="foo barrr": 7,8,9
|
||||
15323="foobar": 6
|
||||
15323="foobarbarrr": 6,9,10,11
|
||||
15323="foobarr": 6,7
|
||||
15323="foobarrr": 6,7,8
|
||||
15323="foofoobarrr": 9,10,11
|
||||
15324=" foo eod bar eod baz eod": 12,20,24
|
||||
15324="foobarbarbazbarbaz": 6,9,12,15,18
|
||||
15324="foobarbaz": 6,9
|
||||
15324="foobarbazeod": 6,9,12
|
||||
15324="foobarbazfoobarbaz": 6,9,15,18
|
||||
15324="foobareod": 6,9
|
||||
15325="foo eod": 7
|
||||
15325="foo eod_":
|
||||
15325="foo eodd": 8
|
||||
15325="fooeod": 6
|
||||
15325="fooeodd": 7
|
||||
15325="fooeoddd": 8
|
||||
15326="foo eod": 7
|
||||
15326="foo eod\n": 7
|
||||
15326="foo eod_":
|
||||
15326="foo eod_\n":
|
||||
15326="foo eodd": 8
|
||||
15326="foo eodd\n": 8
|
||||
15326="fooeod": 6
|
||||
15326="fooeod\n": 6
|
||||
15326="fooeodd": 7
|
||||
15326="fooeodd\n": 7
|
||||
15326="fooeoddd": 8
|
||||
15326="fooeoddd\n": 8
|
||||
15327="":
|
||||
15327="0":
|
||||
15327="A": 1
|
||||
15327="B": 1
|
||||
15327="C": 1
|
||||
15327="D": 1
|
||||
15327="E": 1
|
||||
15327="F": 1
|
||||
15327="_ABCDEF": 2,3,4,5,6,7
|
||||
15327="_abcdef": 2,3,4,5,6,7
|
||||
15327="a": 1
|
||||
15327="b": 1
|
||||
15327="c": 1
|
||||
15327="d": 1
|
||||
15327="e": 1
|
||||
15327="f": 1
|
||||
15328="":
|
||||
15328="A":
|
||||
15328="B":
|
||||
15328="C":
|
||||
15328="_":
|
||||
15328="____abc___ABC": 5,6,7
|
||||
15328="a": 1
|
||||
15328="b": 1
|
||||
15328="c": 1
|
||||
15328="d":
|
||||
15329="____pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp": 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204
|
||||
15329="____qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163
|
||||
15329="____qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp": 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364
|
51
tools/hscollider/test_cases/corpora/longlits.txt
Normal file
51
tools/hscollider/test_cases/corpora/longlits.txt
Normal file
@@ -0,0 +1,51 @@
|
||||
50000:ukdnsybecoqlszhxiwfcpvmnoqobdfuoovmotdeefiwdoxukyxldjxthcmnxqebsiyvwwtadafmibpxnwuxqtpcndwzaiwurnvbkgzpfutisauyagfwacajrcmjlgmomzdakzjgpgnlepnjcynzhptporgjcrjkrnhvnucgvjjgfboisxjfaywypljihrstqvmwsqdvq
|
||||
50000:ihcntajbgquaruyfimiabusvmmqcpaxpowhhucnzlpfxzmmbcqahdmposiymqscqugtmictrnomnccfcdxzlksyuqkbjvgekaebwmcmzydebtltpcfbmckvwoqtinlplzopauzkcyiinbcjrfjkncggcowuifvwvoavxrkuaxuwjhnnyotkgbrkggwkafzvzmkgijnsr
|
||||
50000:vtymzjxeeyazemvcwsvcacdzihfbgiaqwjxmcncgdzafmhtvbvnmjrpfudnflcvfbkwcfsmdfaqtawqqcbigfrnjzwrdvndstesayfgjsiofshzvtabtgblrgbksqechctlngykpladacvwiffqwjktuosdjvdonjixekrlvvxeeqenylwjgqicdpgjhojsyyhuhtphc
|
||||
50000:oxqvlanpjsnxnoodzpjhsnmgkwjfyqxmqlbqmteabqdbnwtvnpeodvvkukcxqfczyrftogophbmkeuzcxmpyqfigkynftdstdudfynmfxhssbrpdhebywvnpltqxtvdthpppdllyofyktnrwzhbiklpfrclizidkkqbgimzmdrznwkmbledtmsazljcvmfzdlpzgwymm
|
||||
50000:jtaanwnxkvwesndylwqcnsqlccnikybengkimrxauuvytagyasdomvupykaagpcthrrnkzjnysqywwyqpfbyqclabrcftwgvfcxdrhkgxlngnsxmkrvguvfugbgqruspkzojxrhqkrgjrybyoqktjrexxodbcdlfiyhclsvhsaysihhoycnpksoivyxxbglvyzhkbajh
|
||||
50000:ntafhsdlngeeeqphxqspxswcmubcwycbzusxunxrmqgmdktwblavcrdgjhecpfnqsyckxuxaboljmrvetofhgbeydypoeyydrxhordcgqafbnoylylqnvxynfcoygtiwiniwlctwmwornplgfpjbretneadneemlzzodtkkdmcyqrggrmjzlkzzjxoirfilosenpjexy
|
||||
50000:ckalndydcrodvvmyyuqbihprzzgnqympoeinwewgfqpzuhyygivfdhdxnnatccuaghjrddogabtgmcvpspptpicpftxdfdfsiilngteqvqjjsoevnqfiztgcvolmpqkemqeizzmlingcuyxyidvrlczmiifutjljifxiramtoxvtbkwzsrczyzdgbtkboudipjonydtt
|
||||
50000:fbbeioibbkbiiupjzcqrwjuvqjmbavnkvtogebhltedefahasbnvvvspugdtecfpstxsbtfluycxzfxgcvzhfyhgbgzyfcwltvyyoofolnolasemxqqywlrikjocwvhpqofufqyuhcisckvoveaeectwodmmcodisfwynzcctloqyheedjfpwcuwrixkdznnefgizrap
|
||||
50000:eosktuskzdokmshljlcazpmahliwzzmhmpzmsiymtvpctaqwdpmffcnkmkypkcrclmlcxmnysqhslegqetflncttxqiprjddowzkhyjlzytudxqnvcctpebufelzmxnzsfwqbahrgwbjrpbobfdwjfsbfjrhjsbqdlsurllezccluashcrywxhnbqqclikrnefkyutdo
|
||||
50000:gvoiwjevplfxkeempnspkgljnqdckunshelsuogizffvbplhbyhxnjfabmjiigideullxtxbnjxczvaoveafcechrilvdkyzehhuhlohtjxiocfvjzdrjosuawxqmlbcwsnfnpxusoqldoumsedxbbwummwtbqrwkcjxkvyukcxekpjacjlezesaihhpqdatiosxgbbb
|
||||
|
||||
50000:____________________________________________________________________________________________________ukdnsybecoqlszhxiwfcpvmnoqobdfuoovmotdeefiwdoxukyxldjxthcmnxqebsiyvwwtadafmibpxnwuxqtpcndwzaiwurnvbkgzpfutisauyagfwacajrcmjlgmomzdakzjgpgnlepnjcynzhptporgjcrjkrnhvnucgvjjgfboisxjfaywypljihrstqvmwsqdvq
|
||||
50000:____________________________________________________________________________________________________ihcntajbgquaruyfimiabusvmmqcpaxpowhhucnzlpfxzmmbcqahdmposiymqscqugtmictrnomnccfcdxzlksyuqkbjvgekaebwmcmzydebtltpcfbmckvwoqtinlplzopauzkcyiinbcjrfjkncggcowuifvwvoavxrkuaxuwjhnnyotkgbrkggwkafzvzmkgijnsr
|
||||
50000:____________________________________________________________________________________________________vtymzjxeeyazemvcwsvcacdzihfbgiaqwjxmcncgdzafmhtvbvnmjrpfudnflcvfbkwcfsmdfaqtawqqcbigfrnjzwrdvndstesayfgjsiofshzvtabtgblrgbksqechctlngykpladacvwiffqwjktuosdjvdonjixekrlvvxeeqenylwjgqicdpgjhojsyyhuhtphc
|
||||
50000:____________________________________________________________________________________________________oxqvlanpjsnxnoodzpjhsnmgkwjfyqxmqlbqmteabqdbnwtvnpeodvvkukcxqfczyrftogophbmkeuzcxmpyqfigkynftdstdudfynmfxhssbrpdhebywvnpltqxtvdthpppdllyofyktnrwzhbiklpfrclizidkkqbgimzmdrznwkmbledtmsazljcvmfzdlpzgwymm
|
||||
50000:____________________________________________________________________________________________________jtaanwnxkvwesndylwqcnsqlccnikybengkimrxauuvytagyasdomvupykaagpcthrrnkzjnysqywwyqpfbyqclabrcftwgvfcxdrhkgxlngnsxmkrvguvfugbgqruspkzojxrhqkrgjrybyoqktjrexxodbcdlfiyhclsvhsaysihhoycnpksoivyxxbglvyzhkbajh
|
||||
50000:____________________________________________________________________________________________________ntafhsdlngeeeqphxqspxswcmubcwycbzusxunxrmqgmdktwblavcrdgjhecpfnqsyckxuxaboljmrvetofhgbeydypoeyydrxhordcgqafbnoylylqnvxynfcoygtiwiniwlctwmwornplgfpjbretneadneemlzzodtkkdmcyqrggrmjzlkzzjxoirfilosenpjexy
|
||||
50000:____________________________________________________________________________________________________ckalndydcrodvvmyyuqbihprzzgnqympoeinwewgfqpzuhyygivfdhdxnnatccuaghjrddogabtgmcvpspptpicpftxdfdfsiilngteqvqjjsoevnqfiztgcvolmpqkemqeizzmlingcuyxyidvrlczmiifutjljifxiramtoxvtbkwzsrczyzdgbtkboudipjonydtt
|
||||
50000:____________________________________________________________________________________________________fbbeioibbkbiiupjzcqrwjuvqjmbavnkvtogebhltedefahasbnvvvspugdtecfpstxsbtfluycxzfxgcvzhfyhgbgzyfcwltvyyoofolnolasemxqqywlrikjocwvhpqofufqyuhcisckvoveaeectwodmmcodisfwynzcctloqyheedjfpwcuwrixkdznnefgizrap
|
||||
50000:____________________________________________________________________________________________________eosktuskzdokmshljlcazpmahliwzzmhmpzmsiymtvpctaqwdpmffcnkmkypkcrclmlcxmnysqhslegqetflncttxqiprjddowzkhyjlzytudxqnvcctpebufelzmxnzsfwqbahrgwbjrpbobfdwjfsbfjrhjsbqdlsurllezccluashcrywxhnbqqclikrnefkyutdo
|
||||
50000:____________________________________________________________________________________________________gvoiwjevplfxkeempnspkgljnqdckunshelsuogizffvbplhbyhxnjfabmjiigideullxtxbnjxczvaoveafcechrilvdkyzehhuhlohtjxiocfvjzdrjosuawxqmlbcwsnfnpxusoqldoumsedxbbwummwtbqrwkcjxkvyukcxekpjacjlezesaihhpqdatiosxgbbb
|
||||
|
||||
50000: ukdnsybecoqlszhxiwfcpvmnoqobdfuoovmotdeefiwdoxukyxldjxthcmnxqebsiyvwwtadafmibpxnwuxqtpcndwzaiwurnvbkgzpfutisauyagfwacajrcmjlgmomzdakzjgpgnlepnjcynzhptporgjcrjkrnhvnucgvjjgfboisxjfaywypljihrstqvmwsqdvq ihcntajbgquaruyfimiabusvmmqcpaxpowhhucnzlpfxzmmbcqahdmposiymqscqugtmictrnomnccfcdxzlksyuqkbjvgekaebwmcmzydebtltpcfbmckvwoqtinlplzopauzkcyiinbcjrfjkncggcowuifvwvoavxrkuaxuwjhnnyotkgbrkggwkafzvzmkgijnsr vtymzjxeeyazemvcwsvcacdzihfbgiaqwjxmcncgdzafmhtvbvnmjrpfudnflcvfbkwcfsmdfaqtawqqcbigfrnjzwrdvndstesayfgjsiofshzvtabtgblrgbksqechctlngykpladacvwiffqwjktuosdjvdonjixekrlvvxeeqenylwjgqicdpgjhojsyyhuhtphc oxqvlanpjsnxnoodzpjhsnmgkwjfyqxmqlbqmteabqdbnwtvnpeodvvkukcxqfczyrftogophbmkeuzcxmpyqfigkynftdstdudfynmfxhssbrpdhebywvnpltqxtvdthpppdllyofyktnrwzhbiklpfrclizidkkqbgimzmdrznwkmbledtmsazljcvmfzdlpzgwymm jtaanwnxkvwesndylwqcnsqlccnikybengkimrxauuvytagyasdomvupykaagpcthrrnkzjnysqywwyqpfbyqclabrcftwgvfcxdrhkgxlngnsxmkrvguvfugbgqruspkzojxrhqkrgjrybyoqktjrexxodbcdlfiyhclsvhsaysihhoycnpksoivyxxbglvyzhkbajh ntafhsdlngeeeqphxqspxswcmubcwycbzusxunxrmqgmdktwblavcrdgjhecpfnqsyckxuxaboljmrvetofhgbeydypoeyydrxhordcgqafbnoylylqnvxynfcoygtiwiniwlctwmwornplgfpjbretneadneemlzzodtkkdmcyqrggrmjzlkzzjxoirfilosenpjexy ckalndydcrodvvmyyuqbihprzzgnqympoeinwewgfqpzuhyygivfdhdxnnatccuaghjrddogabtgmcvpspptpicpftxdfdfsiilngteqvqjjsoevnqfiztgcvolmpqkemqeizzmlingcuyxyidvrlczmiifutjljifxiramtoxvtbkwzsrczyzdgbtkboudipjonydtt fbbeioibbkbiiupjzcqrwjuvqjmbavnkvtogebhltedefahasbnvvvspugdtecfpstxsbtfluycxzfxgcvzhfyhgbgzyfcwltvyyoofolnolasemxqqywlrikjocwvhpqofufqyuhcisckvoveaeectwodmmcodisfwynzcctloqyheedjfpwcuwrixkdznnefgizrap eosktuskzdokmshljlcazpmahliwzzmhmpzmsiymtvpctaqwdpmffcnkmkypkcrclmlcxmnysqhslegqetflncttxqiprjddowzkhyjlzytudxqnvcctpebufelzmxnzsfwqbahrgwbjrpbobfdwjfsbfjrhjsbqdlsurllezccluashcrywxhnbqqclikrnefkyutdo gvoiwjevplfxkeempnspkgljnqdckunshelsuogizffvbplhbyhxnjfabmjiigideullxtxbnjxczvaoveafcechrilvdkyzehhuhlohtjxiocfvjzdrjosuawxqmlbcwsnfnpxusoqldoumsedxbbwummwtbqrwkcjxkvyukcxekpjacjlezesaihhpqdatiosxgbbb ukdnsybecoqlszhxiwfcpvmnoqobdfuoovmotdeefiwdoxukyxldjxthcmnxqebsiyvwwtadafmibpxnwuxqtpcndwzaiwurnvbkgzpfutisauyagfwacajrcmjlgmomzdakzjgpgnlepnjcynzhptporgjcrjkrnhvnucgvjjgfboisxjfaywypljihrstqvmwsqdvq
|
||||
|
||||
50000:kdnsybecoqlszhxiwfcpvmnoqobdfuoovmotdeefiwdoxukyxldjxthcmnxqebsiyvwwtadafmibpxnwuxqtpcndwzaiwurnvbkgzpfutisauyagfwacajrcmjlgmomzdakzjgpgnlepnjcynzhptporgjcrjkrnhvnucgvjjgfboisxjfaywypljihrstqvmwsqdvq
|
||||
50000:hcntajbgquaruyfimiabusvmmqcpaxpowhhucnzlpfxzmmbcqahdmposiymqscqugtmictrnomnccfcdxzlksyuqkbjvgekaebwmcmzydebtltpcfbmckvwoqtinlplzopauzkcyiinbcjrfjkncggcowuifvwvoavxrkuaxuwjhnnyotkgbrkggwkafzvzmkgijnsr
|
||||
50000:tymzjxeeyazemvcwsvcacdzihfbgiaqwjxmcncgdzafmhtvbvnmjrpfudnflcvfbkwcfsmdfaqtawqqcbigfrnjzwrdvndstesayfgjsiofshzvtabtgblrgbksqechctlngykpladacvwiffqwjktuosdjvdonjixekrlvvxeeqenylwjgqicdpgjhojsyyhuhtphc
|
||||
50000:xqvlanpjsnxnoodzpjhsnmgkwjfyqxmqlbqmteabqdbnwtvnpeodvvkukcxqfczyrftogophbmkeuzcxmpyqfigkynftdstdudfynmfxhssbrpdhebywvnpltqxtvdthpppdllyofyktnrwzhbiklpfrclizidkkqbgimzmdrznwkmbledtmsazljcvmfzdlpzgwymm
|
||||
50000:taanwnxkvwesndylwqcnsqlccnikybengkimrxauuvytagyasdomvupykaagpcthrrnkzjnysqywwyqpfbyqclabrcftwgvfcxdrhkgxlngnsxmkrvguvfugbgqruspkzojxrhqkrgjrybyoqktjrexxodbcdlfiyhclsvhsaysihhoycnpksoivyxxbglvyzhkbajh
|
||||
50000:tafhsdlngeeeqphxqspxswcmubcwycbzusxunxrmqgmdktwblavcrdgjhecpfnqsyckxuxaboljmrvetofhgbeydypoeyydrxhordcgqafbnoylylqnvxynfcoygtiwiniwlctwmwornplgfpjbretneadneemlzzodtkkdmcyqrggrmjzlkzzjxoirfilosenpjexy
|
||||
50000:kalndydcrodvvmyyuqbihprzzgnqympoeinwewgfqpzuhyygivfdhdxnnatccuaghjrddogabtgmcvpspptpicpftxdfdfsiilngteqvqjjsoevnqfiztgcvolmpqkemqeizzmlingcuyxyidvrlczmiifutjljifxiramtoxvtbkwzsrczyzdgbtkboudipjonydtt
|
||||
50000:bbeioibbkbiiupjzcqrwjuvqjmbavnkvtogebhltedefahasbnvvvspugdtecfpstxsbtfluycxzfxgcvzhfyhgbgzyfcwltvyyoofolnolasemxqqywlrikjocwvhpqofufqyuhcisckvoveaeectwodmmcodisfwynzcctloqyheedjfpwcuwrixkdznnefgizrap
|
||||
50000:osktuskzdokmshljlcazpmahliwzzmhmpzmsiymtvpctaqwdpmffcnkmkypkcrclmlcxmnysqhslegqetflncttxqiprjddowzkhyjlzytudxqnvcctpebufelzmxnzsfwqbahrgwbjrpbobfdwjfsbfjrhjsbqdlsurllezccluashcrywxhnbqqclikrnefkyutdo
|
||||
50000:voiwjevplfxkeempnspkgljnqdckunshelsuogizffvbplhbyhxnjfabmjiigideullxtxbnjxczvaoveafcechrilvdkyzehhuhlohtjxiocfvjzdrjosuawxqmlbcwsnfnpxusoqldoumsedxbbwummwtbqrwkcjxkvyukcxekpjacjlezesaihhpqdatiosxgbbb
|
||||
|
||||
50001:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
50001: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
50001:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
50001:aaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
50002:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50002: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50002:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50002:AAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
|
||||
50003:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50003: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50003:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50003:AAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
50003:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
50003:AAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAaaaaaa
|
29
tools/hscollider/test_cases/corpora/lookaround.txt
Normal file
29
tools/hscollider/test_cases/corpora/lookaround.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
27000:AAAAAAAAAAAAABCDfoobaraaaaaabcdfoobarzzzzzzzzzzzzzzzzzzz
|
||||
27000:aaaaaaaaaaaABCDfoobaraaaaaabcdfoobarzzzzzzzzzzzz
|
||||
27000:aaaaaaaaaaLMNOfoobarzzzzzzzzzzzzzzzzzzz
|
||||
27000:aaaaaaaaaaaaafoobarLLLLLLLLfoobarzzzzzzzzzzzz
|
||||
27000:aaaaaaaaaaaAAfoobarzzzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||
27000:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNNfoobaraaaaaaNNNfoobarzzzzzzzzzzzzzzzzzzzzzzzzzz
|
||||
27001:aaaaaaaaaaaaaarFOOBARfoobarFOOBARRRRfoobarfoobarzzzzzzzzzzzzzzzzzz
|
||||
27001:foobarfoobarfoobarFfoobarFfoobarfoobarfoobarzzzzzzzzzzzzzzz
|
||||
27002:aaaaaaaaaaaaFFaafoobaraaaaaaaaaafoobarzzzzzzzzzzzzzzzz
|
||||
27002:aaaaaaaaaaaaa:afoobar aaaaaaafoobarzzzzzzzzzz
|
||||
27002:bbbbbaaaaaAfoobar
|
||||
27002:bbbbbaaaaafoobar
|
||||
27002:bbbbbaaaaaaAAAAAAAAfoobarzzzzzzzzzz
|
||||
27003:aaaaaaaaaaaaaaaaaaafoobarzzzzzzzzzzzzzzzzzzzz
|
||||
27003:aaaaaabcdefghKKKKKKKKKKKKfoobarKKKKKKKKKKKKKKKKKK
|
||||
27003:aaaaaabcdefghiKKKKKKKKKKKKfoobarKKKKKKKKKKKKKKKKK
|
||||
27003:aaaaaabcdefghiiiiiiiiiiiifoobarKKKKKKKKKKKKKK
|
||||
27004:abcdefghijklmnofoobarabcdefghijklmnopqfoobarfoobar
|
||||
27004:abcdefghijklmnfoobarfoobarabcdefghijklfoobar
|
||||
27004:aaabcdefghikl__fffffoobarABCDEFGHIKLM_____foobar
|
||||
27004:aaaaaacdefghiklmnopfoobarzzzzzzzzzzfoobar
|
||||
27005: %foobfoobar d foobar______EEEEfoobar BEEfoobar
|
||||
27005:ddddddddddededefoobar foobar foobar
|
||||
27005: _foobar1111115WWWfoobarzzzzzzzzzzzzz
|
||||
27006:0123012301230123012301230123foobar012301230123
|
||||
27006:00000000000000A0cdDEEEEE00foobar0000
|
||||
27006:00000000AABaaEEEEEfoobarfoobar
|
||||
27006:00000000ddddDEEEEEEEfoobar
|
||||
27007:c\xa1CCCCC[cdCAKDDDd\xc7vbEaaCC
|
1692
tools/hscollider/test_cases/corpora/mangle.txt
Normal file
1692
tools/hscollider/test_cases/corpora/mangle.txt
Normal file
File diff suppressed because it is too large
Load Diff
245
tools/hscollider/test_cases/corpora/mcclellan.txt
Normal file
245
tools/hscollider/test_cases/corpora/mcclellan.txt
Normal file
@@ -0,0 +1,245 @@
|
||||
15900="foobarbar": 9
|
||||
15901="foobarbar": 6,9
|
||||
15902="foobarteabartea": 9,15
|
||||
15903="fo": 2
|
||||
15903="foobarfo": 2,8
|
||||
15903="foobarteafo": 2,9,11
|
||||
15904="fo": 2
|
||||
15904="foobarfo": 8
|
||||
15904="foobarteafo": 9,11
|
||||
15904="foo3baR\xee\xdbtea": 12
|
||||
15905="foobarteacofeee": 6,15
|
||||
15905="footeabarcofeee": 9,15
|
||||
15906="foogaz": 6
|
||||
15906="fofoogaz": 8
|
||||
15906="fobargaz": 8
|
||||
15906="bafoogaz": 8
|
||||
15906="foobarfgazfobarfoobarbbarbabargbargabar": 10
|
||||
15907="foobarfgazfobarfoobarbbarbabargbargabar": 6,10,15,21,25,30,34,39
|
||||
15908="foobartea": 9
|
||||
15908="foobgaztea": 10
|
||||
15908="foobagaztea": 11
|
||||
15908="fooabartea": 10
|
||||
15908="fooabgaztea": 11
|
||||
15908="fooabagaztea": 12
|
||||
15908="fooabagabartea": 14
|
||||
15909="fooabagabartea": 14
|
||||
15909="fooabagabagazaeteaet": 18
|
||||
15909="fooabagaba gazbagazaeteaet": 24
|
||||
15910="fooabagabartea": 14
|
||||
15910="fooabagabagazaeteaet": 16,18,20
|
||||
15910="fooabagaba gazbagazaeteaet": 22,24,26
|
||||
15911="foobafoobartea":
|
||||
15912="foobafoobarteaet":
|
||||
15913="p;;:": 4
|
||||
15913="p;;:_:": 4,6
|
||||
15913="p;;;;:_:": 6,8
|
||||
15913="p;;ab:_:": 6,8
|
||||
15913="p;;ab_:_:": 7,9
|
||||
15913="p;;ab_x:": 8
|
||||
15913="p;;ab_xj:": 9
|
||||
15913="p;p;;ab_xj:":
|
||||
15913="aap;;ab_xj:":
|
||||
15914="p;;:": 4
|
||||
15914="p;;:_:": 4,6
|
||||
15914="p;;;;:_:": 6,8
|
||||
15914="p;;ab:_:": 6,8
|
||||
15914="p;;ab_:_:": 7,9
|
||||
15914="p;;ab_x:": 8
|
||||
15914="p;;ab_xj:": 9
|
||||
15914="p;p;;ab_xj:": 11
|
||||
15914="aap;;ab_xj:": 11
|
||||
15915="p;;:": 4
|
||||
15915="p;;:_:": 4,6
|
||||
15915="p;;;;:_:": 6,8
|
||||
15915="p;;ab:_:": 6,8
|
||||
15915="p;;ab_:_:": 7,9
|
||||
15915="p;;ab_x:": 8
|
||||
15915="p;;ab_xj:": 9
|
||||
15915="p;p;;ab_xj:": 11
|
||||
15915="aap;;ab_xj:": 11
|
||||
15916="AAaZ": 4
|
||||
15916="AAbZ": 4
|
||||
15916="AAcZ":
|
||||
15916="AAaXX": 5
|
||||
15916="AAbXX":
|
||||
15916="AAcXX":
|
||||
15916="AAaYY":
|
||||
15916="AAbYY": 5
|
||||
15916="AAcYY":
|
||||
15916="AAzaZ": 5
|
||||
15916="AAzbZ": 5
|
||||
15916="AAzcZ":
|
||||
15916="AAzazXX": 7
|
||||
15916="AAzbzXX":
|
||||
15916="AAzczXX":
|
||||
15916="AAzazYY":
|
||||
15916="AAzbzYY": 7
|
||||
15916="AAzczYY":
|
||||
15916="AAzazZ": 6
|
||||
15916="AAzbzZ": 6
|
||||
15916="AAzczZ":
|
||||
15916="AAzazXX": 7
|
||||
15916="AAzbzXX":
|
||||
15916="AAzczXX":
|
||||
15916="AAzazYY":
|
||||
15916="AAzbzYY": 7
|
||||
15916="AAzczYY":
|
||||
15916="AAaZZXXX": 4,5,7,8
|
||||
15916="AAbZZYYY": 4,5,7,8
|
||||
15916="AAabZZXXXYYY": 5,6,8,9,11,12
|
||||
15916="AAbaZZXXXYYY": 5,6,8,9,11,12
|
||||
15916="AAa_bZZXXXYYY": 6,7,9,10,12,13
|
||||
15916="AAb_aZZXXXYYY": 6,7,9,10,12,13
|
||||
15916="AAa_b_ZZXX_XYYY": 7,8,10,14,15
|
||||
15916="AAb_a_ZZXX_XYYY": 7,8,10,14,15
|
||||
15917="AAaZ": 4
|
||||
15917="AAbZ": 4
|
||||
15917="AAcZ":
|
||||
15917="AAaXX": 5
|
||||
15917="AAbXX":
|
||||
15917="AAcXX":
|
||||
15917="AAaYY":
|
||||
15917="AAbYY":
|
||||
15917="AAcYY":
|
||||
15917="AAzaZ": 5
|
||||
15917="AAzbZ": 5
|
||||
15917="AAzcZ":
|
||||
15917="AAzazXX": 7
|
||||
15917="AAzbzXX":
|
||||
15917="AAzczXX":
|
||||
15917="AAzazYY":
|
||||
15917="AAzbzYY":
|
||||
15917="AAzczYY":
|
||||
15917="AAzazZ": 6
|
||||
15917="AAzbzZ": 6
|
||||
15917="AAzczZ":
|
||||
15917="AAzazXX": 7
|
||||
15917="AAzbzXX":
|
||||
15917="AAzczXX":
|
||||
15917="AAzazYY":
|
||||
15917="AAzbzYY":
|
||||
15917="AAzczYY":
|
||||
15917="AAaZZXXX": 4,5,7,8
|
||||
15917="AAbZZYYY": 4,5
|
||||
15917="AAabZZXXXYYY": 5,6,8,9
|
||||
15917="AAbaZZXXXYYY": 5,6,8,9
|
||||
15917="AAa_bZZXXXYYY": 6,7,9,10
|
||||
15917="AAb_aZZXXXYYY": 6,7,9,10
|
||||
15917="AAa_b_ZZXX_XYYY": 7,8,10
|
||||
15917="AAb_a_ZZXX_XYYY": 7,8,10
|
||||
15918="ppp;;:":
|
||||
15918="ppp;;:_:":
|
||||
15918="ppp;;;;:_:":
|
||||
15918="ppp;;ab:_:":
|
||||
15918="ppp;;ab_:_:":
|
||||
15918="ppp;;ab_x:":
|
||||
15918="ppp;;ab_xj:":
|
||||
15918="p;ppp;;ab_xj:":
|
||||
15918="aappp;;ab_xj:":
|
||||
15919="ppp;;:":
|
||||
15919="ppp;;:_:":
|
||||
15919="ppp;;;;:_:":
|
||||
15919="ppp;;ab:_:":
|
||||
15919="ppp;;ab_:_:":
|
||||
15919="ppp;;ab_x:":
|
||||
15919="ppp;;ab_xj:":
|
||||
15919="p;ppp;;ab_xj:":
|
||||
15919="aappp;;ab_xj:":
|
||||
15920="ppp;;:":
|
||||
15920="ppp;;:_:":
|
||||
15920="ppp;;;;:_:":
|
||||
15920="ppp;;ab:_:":
|
||||
15920="ppp;;ab_:_:":
|
||||
15920="ppp;;ab_x:":
|
||||
15920="ppp;;ab_xj:":
|
||||
15920="p;ppp;;ab_xj:":
|
||||
15920="aappp;;ab_xj:":
|
||||
15921="AAAAAaZ": 7
|
||||
15921="AAAAAbZ": 7
|
||||
15921="AAAAAcZ":
|
||||
15921="AAAAAaXX": 8
|
||||
15921="AAAAAbXX":
|
||||
15921="AAAAAcXX":
|
||||
15921="AAAAAaYY":
|
||||
15921="AAAAAbYY": 8
|
||||
15921="AAAAAcYY":
|
||||
15921="AAAAAzaZ": 8
|
||||
15921="AAAAAzbZ": 8
|
||||
15921="AAAAAzcZ":
|
||||
15921="AAAAAzazXX": 10
|
||||
15921="AAAAAzbzXX":
|
||||
15921="AAAAAzczXX":
|
||||
15921="AAAAAzazYY":
|
||||
15921="AAAAAzbzYY": 10
|
||||
15921="AAAAAzczYY":
|
||||
15921="AAAAAzazZ": 9
|
||||
15921="AAAAAzbzZ": 9
|
||||
15921="AAAAAzczZ":
|
||||
15921="AAAAAzazXX": 10
|
||||
15921="AAAAAzbzXX":
|
||||
15921="AAAAAzczXX":
|
||||
15921="AAAAAzazYY":
|
||||
15921="AAAAAzbzYY": 10
|
||||
15921="AAAAAzczYY":
|
||||
15921="AAAAAaZZXXX": 7,8,10,11
|
||||
15921="AAAAAbZZYYY": 7,8,10,11
|
||||
15921="AAAAAabZZXXXYYY": 8,9,11,12,14,15
|
||||
15921="AAAAAbaZZXXXYYY": 8,9,11,12,14,15
|
||||
15921="AAAAAa_bZZXXXYYY": 9,10,12,13,15,16
|
||||
15921="AAAAAb_aZZXXXYYY": 9,10,12,13,15,16
|
||||
15921="AAAAAa_b_ZZXX_XYYY": 10,11,13,17,18
|
||||
15921="AAAAAb_a_ZZXX_XYYY": 10,11,13,17,18
|
||||
15922="AAAAAaZ":
|
||||
15922="AAAAAbZ":
|
||||
15922="AAAAAcZ":
|
||||
15922="AAAAAaXX":
|
||||
15922="AAAAAbXX":
|
||||
15922="AAAAAcXX":
|
||||
15922="AAAAAaYY":
|
||||
15922="AAAAAbYY":
|
||||
15922="AAAAAcYY":
|
||||
15922="AAAAAzaZ":
|
||||
15922="AAAAAzbZ":
|
||||
15922="AAAAAzcZ":
|
||||
15922="AAAAAzazXX":
|
||||
15922="AAAAAzbzXX":
|
||||
15922="AAAAAzczXX":
|
||||
15922="AAAAAzazYY":
|
||||
15922="AAAAAzbzYY":
|
||||
15922="AAAAAzczYY":
|
||||
15922="AAAAAzazZ":
|
||||
15922="AAAAAzbzZ":
|
||||
15922="AAAAAzczZ":
|
||||
15922="AAAAAzazXX":
|
||||
15922="AAAAAzbzXX":
|
||||
15922="AAAAAzczXX":
|
||||
15922="AAAAAzazYY":
|
||||
15922="AAAAAzbzYY":
|
||||
15922="AAAAAzczYY":
|
||||
15922="AAAAAaZZXXX":
|
||||
15922="AAAAAbZZYYY":
|
||||
15922="AAAAAabZZXXXYYY":
|
||||
15922="AAAAAbaZZXXXYYY":
|
||||
15922="AAAAAa_bZZXXXYYY":
|
||||
15922="AAAAAb_aZZXXXYYY":
|
||||
15922="AAAAAa_b_ZZXX_XYYY":
|
||||
15922="AAAAAb_a_ZZXX_XYYY":
|
||||
15923="bbbbkbj_": 2,3,4,5,6,7
|
||||
15924:literal123456789
|
||||
15924:literaliteral1
|
||||
15924:literal1literal123456789
|
||||
15924:literaliteraliteral1
|
||||
15925:literal123456789
|
||||
15925:literaliteral1
|
||||
15925:literal1literal123456789
|
||||
15925:literaliteraliteral1
|
||||
15926:literal123456789
|
||||
15926:literaliteral1
|
||||
15926:literal1literal123456789
|
||||
15926:literaliteraliteral1
|
||||
15927:literal123456789
|
||||
15927:literaliteral1
|
||||
15927:literal1literal123456789
|
||||
15927:literaliteraliteral1
|
||||
15928:\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xe5\x9b\xbb\xee\x80\x80\xee\x80\x80\xee\x80\x80\xec\x88\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xe2\x8b\xba\xee\x80\x80\xe9\xa8\x8e\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80\xee\x80\x80b\xe0\xb9\x82a8a
|
51
tools/hscollider/test_cases/corpora/metacharacters.txt
Normal file
51
tools/hscollider/test_cases/corpora/metacharacters.txt
Normal file
@@ -0,0 +1,51 @@
|
||||
24000="":
|
||||
24000="a": 1
|
||||
24000="C": 1
|
||||
24000="\x00": 1
|
||||
24000="\xff": 1
|
||||
24000="abcdef": 1,2,3,4,5,6
|
||||
24001="\x07": 1
|
||||
24002="\x1a": 1
|
||||
24002="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 27
|
||||
24003=";": 1
|
||||
24003="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 60
|
||||
24004="{": 1
|
||||
24004="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 124
|
||||
24005="\x01": 1
|
||||
24005="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 2
|
||||
24006="p": 1
|
||||
24006="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 113
|
||||
24007="\x1b": 1
|
||||
24008="\x0c": 1
|
||||
24009="\n": 1
|
||||
24010="\r": 1
|
||||
24011="\t": 1
|
||||
24012="\xdc\xdc\x00\xff": 4
|
||||
24015="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 2
|
||||
24016="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 27
|
||||
24017="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 60
|
||||
24018="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 124
|
||||
24019="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 2
|
||||
24020="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 113
|
||||
24021="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff": 2
|
||||
24022="\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\x5c]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff":
|
||||
24022="\x1cn": 2
|
||||
24023="8 literal 9": 11
|
||||
24024="bignum 1111111111":
|
||||
24024="bignum I1111111": 15
|
||||
24025="bignum 2147483639":
|
||||
24025="bignum \x8c7483639": 15
|
||||
24026="bignum \x018888": 12
|
||||
24027="bignum \n8888": 12
|
||||
24028="bignum S8888": 12
|
||||
24029="bignum \xff8888": 12
|
||||
24030:0
|
||||
24031:0
|
||||
24032:\n
|
||||
24033:\n
|
||||
24034:\n0
|
||||
24034:P
|
||||
24035:\n0
|
||||
24035:P
|
||||
24036:\xff
|
||||
24037:80
|
921
tools/hscollider/test_cases/corpora/notbob.txt
Normal file
921
tools/hscollider/test_cases/corpora/notbob.txt
Normal file
@@ -0,0 +1,921 @@
|
||||
15500="Anotbobnotbobnotboo": 7,13
|
||||
15500="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15500="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15500="notbobnotbobnotboo": 6,12
|
||||
15500="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15501="Anotbobnotbobnotboo":
|
||||
15501="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15501="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15501="notbobnotbobnotboo": 6
|
||||
15501="notbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15502="Anotbobnotbobnotboo":
|
||||
15502="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15502="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15502="notbobnotbobnotboo": 6
|
||||
15502="notbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15503="Anotbobnotbobnotboo": 7,13
|
||||
15503="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15503="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15503="notbobnotbobnotboo": 12
|
||||
15503="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15504="Anotbobnotbobnotboo": 7
|
||||
15504="Anotbobnotbobnotnotbarnotbobnotbar": 7
|
||||
15504="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15504="notbobnotbobnotboo":
|
||||
15504="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15505="Anotbobnotbobnotboo": 7
|
||||
15505="Anotbobnotbobnotnotbarnotbobnotbar": 7
|
||||
15505="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15505="notbobnotbobnotboo":
|
||||
15505="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15506="Anotbobnotbobnotboo": 13
|
||||
15506="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15506="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15506="notbobnotbobnotboo": 12
|
||||
15506="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15507="Anotbobnotbobnotboo":
|
||||
15507="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15507="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15507="notbobnotbobnotboo": 12
|
||||
15507="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15508="Anotbobnotbobnotboo":
|
||||
15508="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15508="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15508="notbobnotbobnotboo": 12
|
||||
15508="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15509="Anotbobnotbobnotboo": 7,13
|
||||
15509="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15509="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15509="notbobnotbobnotboo": 6,12
|
||||
15509="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15510="Anotbobnotbobnotboo": 7,13
|
||||
15510="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15510="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15510="notbobnotbobnotboo": 6,12
|
||||
15510="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15511="Anotbobnotbobnotboo": 7,13
|
||||
15511="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15511="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15511="notbobnotbobnotboo": 6,12
|
||||
15511="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15512="Anotbobnotbobnotboo": 7,13
|
||||
15512="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15512="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15512="notbobnotbobnotboo": 12
|
||||
15512="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15513="Anotbobnotbobnotboo": 7,13
|
||||
15513="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15513="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15513="notbobnotbobnotboo": 12
|
||||
15513="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15514="Anotbobnotbobnotboo": 7,13
|
||||
15514="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15514="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15514="notbobnotbobnotboo": 12
|
||||
15514="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15515="Anotbobnotbobnotboo": 13
|
||||
15515="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15515="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15515="notbobnotbobnotboo": 12
|
||||
15515="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15516="Anotbobnotbobnotboo": 13
|
||||
15516="Anotbobnotbobnotnotbarnotbobnotbar": 13
|
||||
15516="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15516="notbobnotbobnotboo": 12
|
||||
15516="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15517="Anotbobnotbobnotboo": 13
|
||||
15517="Anotbobnotbobnotnotbarnotbobnotbar": 13
|
||||
15517="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15517="notbobnotbobnotboo": 12
|
||||
15517="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15518="Anotbobnotbobnotboo": 7,13
|
||||
15518="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15518="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15518="notbobnotbobnotboo": 6,12
|
||||
15518="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15519="Anotbobnotbobnotboo": 7,13
|
||||
15519="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15519="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15519="notbobnotbobnotboo": 6,12
|
||||
15519="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15520="Anotbobnotbobnotboo": 7,13
|
||||
15520="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15520="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15520="notbobnotbobnotboo": 6,12
|
||||
15520="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15521="Anotbobnotbobnotboo":
|
||||
15521="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15521="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15521="notbobnotbobnotboo": 6,12
|
||||
15521="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15522="Anotbobnotbobnotboo":
|
||||
15522="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15522="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15522="notbobnotbobnotboo": 6,12
|
||||
15522="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15523="Anotbobnotbobnotboo": 7,13
|
||||
15523="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15523="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15523="notbobnotbobnotboo": 12
|
||||
15523="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15524="Anotbobnotbobnotboo": 7,13
|
||||
15524="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15524="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15524="notbobnotbobnotboo":
|
||||
15524="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15525="Anotbobnotbobnotboo": 7,13
|
||||
15525="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15525="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15525="notbobnotbobnotboo":
|
||||
15525="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15526="Anotbobnotbobnotboo": 13
|
||||
15526="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15526="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15526="notbobnotbobnotboo": 12
|
||||
15526="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15527="Anotbobnotbobnotboo":
|
||||
15527="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15527="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15527="notbobnotbobnotboo": 12
|
||||
15527="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15528="Anotbobnotbobnotboo":
|
||||
15528="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15528="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15528="notbobnotbobnotboo": 12
|
||||
15528="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15529="Anotbobnotbobnotboo": 7,13
|
||||
15529="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15529="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15529="notbobnotbobnotboo": 6,12
|
||||
15529="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15530="Anotbobnotbobnotboo": 7,13
|
||||
15530="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15530="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15530="notbobnotbobnotboo": 6,12
|
||||
15530="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15531="Anotbobnotbobnotboo": 7,13
|
||||
15531="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15531="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15531="notbobnotbobnotboo": 6,12
|
||||
15531="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15532="Anotbobnotbobnotboo": 7,13
|
||||
15532="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15532="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15532="notbobnotbobnotboo": 12
|
||||
15532="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15533="Anotbobnotbobnotboo": 7,13
|
||||
15533="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15533="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15533="notbobnotbobnotboo": 12
|
||||
15533="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15534="Anotbobnotbobnotboo": 7,13
|
||||
15534="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15534="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15534="notbobnotbobnotboo": 12
|
||||
15534="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15535="Anotbobnotbobnotboo": 13
|
||||
15535="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15535="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15535="notbobnotbobnotboo": 12
|
||||
15535="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15536="Anotbobnotbobnotboo": 13
|
||||
15536="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15536="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15536="notbobnotbobnotboo": 12
|
||||
15536="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15537="Anotbobnotbobnotboo": 13
|
||||
15537="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15537="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15537="notbobnotbobnotboo": 12
|
||||
15537="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15538="Anotbobnotbobnotboo": 7,13
|
||||
15538="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15538="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15538="notbobnotbobnotboo": 6,12
|
||||
15538="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15539="Anotbobnotbobnotboo": 7,13
|
||||
15539="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15539="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15539="notbobnotbobnotboo": 6,12
|
||||
15539="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15540="Anotbobnotbobnotboo":
|
||||
15540="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15540="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15540="notbobnotbobnotboo":
|
||||
15540="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15541="Anotbobnotbobnotboo":
|
||||
15541="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15541="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15541="notbobnotbobnotboo":
|
||||
15541="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15542="Anotbobnotbobnotboo":
|
||||
15542="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15542="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15542="notbobnotbobnotboo":
|
||||
15542="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15543="Anotbobnotbobnotboo":
|
||||
15543="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15543="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15543="notbobnotbobnotboo":
|
||||
15543="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15544="Anotbobnotbobnotboo":
|
||||
15544="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15544="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15544="notbobnotbobnotboo":
|
||||
15544="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15545="Anotbobnotbobnotboo":
|
||||
15545="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15545="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15545="notbobnotbobnotboo":
|
||||
15545="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15546="Anotbobnotbobnotboo":
|
||||
15546="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15546="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15546="notbobnotbobnotboo":
|
||||
15546="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15547="Anotbobnotbobnotboo":
|
||||
15547="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15547="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15547="notbobnotbobnotboo":
|
||||
15547="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15548="Anotbobnotbobnotboo":
|
||||
15548="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15548="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15548="notbobnotbobnotboo":
|
||||
15548="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15549="Anotbobnotbobnotboo":
|
||||
15549="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15549="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15549="notbobnotbobnotboo":
|
||||
15549="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15550="Anotbobnotbobnotboo":
|
||||
15550="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15550="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15550="notbobnotbobnotboo":
|
||||
15550="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15551="Anotbobnotbobnotboo":
|
||||
15551="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15551="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15551="notbobnotbobnotboo":
|
||||
15551="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15552="Anotbobnotbobnotboo":
|
||||
15552="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15552="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15552="notbobnotbobnotboo":
|
||||
15552="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15553="Anotbobnotbobnotboo":
|
||||
15553="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15553="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15553="notbobnotbobnotboo":
|
||||
15553="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15554="Anotbobnotbobnotboo":
|
||||
15554="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15554="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15554="notbobnotbobnotboo":
|
||||
15554="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15555="Anotbobnotbobnotboo":
|
||||
15555="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15555="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15555="notbobnotbobnotboo":
|
||||
15555="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15556="Anotbobnotbobnotboo":
|
||||
15556="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15556="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15556="notbobnotbobnotboo":
|
||||
15556="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15557="Anotbobnotbobnotboo":
|
||||
15557="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15557="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15557="notbobnotbobnotboo":
|
||||
15557="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15558="Anotbobnotbobnotboo":
|
||||
15558="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15558="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15558="notbobnotbobnotboo":
|
||||
15558="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15559="Anotbobnotbobnotboo":
|
||||
15559="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15559="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15559="notbobnotbobnotboo":
|
||||
15559="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15560="Anotbobnotbobnotboo":
|
||||
15560="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15560="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15560="notbobnotbobnotboo":
|
||||
15560="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15561="Anotbobnotbobnotboo":
|
||||
15561="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15561="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15561="notbobnotbobnotboo":
|
||||
15561="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15562="Anotbobnotbobnotboo":
|
||||
15562="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15562="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15562="notbobnotbobnotboo":
|
||||
15562="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15563="Anotbobnotbobnotboo":
|
||||
15563="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15563="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15563="notbobnotbobnotboo":
|
||||
15563="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15564="Anotbobnotbobnotboo":
|
||||
15564="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15564="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15564="notbobnotbobnotboo":
|
||||
15564="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15565="Anotbobnotbobnotboo":
|
||||
15565="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15565="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15565="notbobnotbobnotboo":
|
||||
15565="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15565="_notbobnoA___bbar": 17
|
||||
15566="Anotbobnotbobnotboo":
|
||||
15566="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15566="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15566="notbobnotbobnotboo":
|
||||
15566="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15567="Anotbobnotbobnotboo":
|
||||
15567="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15567="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15567="notbobnotbobnotboo":
|
||||
15567="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15568="Anotbobnotbobnotboo":
|
||||
15568="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15568="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15568="notbobnotbobnotboo":
|
||||
15568="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15569="Anotbobnotbobnotboo":
|
||||
15569="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15569="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15569="notbobnotbobnotboo":
|
||||
15569="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15570="Anotbobnotbobnotboo":
|
||||
15570="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15570="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15570="notbobnotbobnotboo":
|
||||
15570="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15571="Anotbobnotbobnotboo":
|
||||
15571="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15571="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15571="notbobnotbobnotboo":
|
||||
15571="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15572="Anotbobnotbobnotboo":
|
||||
15572="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15572="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15572="notbobnotbobnotboo":
|
||||
15572="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15573="Anotbobnotbobnotboo":
|
||||
15573="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15573="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15573="notbobnotbobnotboo":
|
||||
15573="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15574="Anotbobnotbobnotboo":
|
||||
15574="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15574="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15574="notbobnotbobnotboo":
|
||||
15574="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15575="Anotbobnotbobnotboo":
|
||||
15575="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15575="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15575="notbobnotbobnotboo":
|
||||
15575="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15576="Anotbobnotbobnotboo":
|
||||
15576="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15576="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15576="notbobnotbobnotboo":
|
||||
15576="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15577="Anotbobnotbobnotboo":
|
||||
15577="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15577="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15577="notbobnotbobnotboo":
|
||||
15577="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15578="Anotbobnotbobnotboo":
|
||||
15578="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15578="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15578="notbobnotbobnotboo":
|
||||
15578="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15579="Anotbobnotbobnotboo":
|
||||
15579="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15579="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15579="notbobnotbobnotboo":
|
||||
15579="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15580="Anotbobnotbobnotboo":
|
||||
15580="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15580="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40
|
||||
15580="notbobnotbobnotboo":
|
||||
15580="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15581="Anotbobnotbobnotboo":
|
||||
15581="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15581="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40
|
||||
15581="notbobnotbobnotboo":
|
||||
15581="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15582="Anotbobnotbobnotboo":
|
||||
15582="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15582="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40
|
||||
15582="notbobnotbobnotboo":
|
||||
15582="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15583="Anotbobnotbobnotboo":
|
||||
15583="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15583="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68
|
||||
15583="notbobnotbobnotboo":
|
||||
15583="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15584="Anotbobnotbobnotboo":
|
||||
15584="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15584="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15584="notbobnotbobnotboo":
|
||||
15584="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15585="Anotbobnotbobnotboo":
|
||||
15585="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15585="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15585="notbobnotbobnotboo":
|
||||
15585="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15586="Anotbobnotbobnotboo":
|
||||
15586="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15586="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15586="notbobnotbobnotboo":
|
||||
15586="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15587="Anotbobnotbobnotboo":
|
||||
15587="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15587="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15587="notbobnotbobnotboo":
|
||||
15587="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15588="Anotbobnotbobnotboo":
|
||||
15588="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15588="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15588="notbobnotbobnotboo":
|
||||
15588="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15589="Anotbobnotbobnotboo":
|
||||
15589="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15589="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15589="notbobnotbobnotboo":
|
||||
15589="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15590="Anotbobnotbobnotboo": 7,13
|
||||
15590="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,22,28,34
|
||||
15590="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,22,28,35,41,47,56,62,68
|
||||
15590="notbobnotbobnotboo": 6,12
|
||||
15590="notbobnotbobnotnotbarnotbobnotbar": 6,12,21,27,33
|
||||
15600="Anotbobnotbobnotboo": 7,13
|
||||
15600="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15600="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15600="notbobnotbobnotboo": 6,12
|
||||
15600="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15601="Anotbobnotbobnotboo":
|
||||
15601="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15601="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15601="notbobnotbobnotboo": 6
|
||||
15601="notbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15602="Anotbobnotbobnotboo":
|
||||
15602="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15602="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15602="notbobnotbobnotboo": 6
|
||||
15602="notbobnotbobnotnotbarnotbobnotbar": 6
|
||||
15603="Anotbobnotbobnotboo": 7,13
|
||||
15603="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15603="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15603="notbobnotbobnotboo": 12
|
||||
15603="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15604="Anotbobnotbobnotboo": 7
|
||||
15604="Anotbobnotbobnotnotbarnotbobnotbar": 7
|
||||
15604="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15604="notbobnotbobnotboo":
|
||||
15604="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15605="Anotbobnotbobnotboo": 7
|
||||
15605="Anotbobnotbobnotnotbarnotbobnotbar": 7
|
||||
15605="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15605="notbobnotbobnotboo":
|
||||
15605="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15606="Anotbobnotbobnotboo": 13
|
||||
15606="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15606="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15606="notbobnotbobnotboo": 12
|
||||
15606="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15607="Anotbobnotbobnotboo":
|
||||
15607="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15607="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41
|
||||
15607="notbobnotbobnotboo": 12
|
||||
15607="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15608="Anotbobnotbobnotboo":
|
||||
15608="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15608="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15608="notbobnotbobnotboo": 12
|
||||
15608="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15609="Anotbobnotbobnotboo": 7,13
|
||||
15609="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15609="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15609="notbobnotbobnotboo": 6,12
|
||||
15609="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15610="Anotbobnotbobnotboo": 7,13
|
||||
15610="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15610="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15610="notbobnotbobnotboo": 6,12
|
||||
15610="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15611="Anotbobnotbobnotboo": 7,13
|
||||
15611="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15611="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15611="notbobnotbobnotboo": 6,12
|
||||
15611="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15612="Anotbobnotbobnotboo": 7,13
|
||||
15612="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15612="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15612="notbobnotbobnotboo": 12
|
||||
15612="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15613="Anotbobnotbobnotboo": 7,13
|
||||
15613="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15613="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15613="notbobnotbobnotboo": 12
|
||||
15613="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15613="-----\nnotbob": 12
|
||||
15613="\nnotbob": 7
|
||||
15614="Anotbobnotbobnotboo": 7,13
|
||||
15614="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15614="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15614="notbobnotbobnotboo": 12
|
||||
15614="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15615="Anotbobnotbobnotboo": 13
|
||||
15615="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15615="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15615="notbobnotbobnotboo": 12
|
||||
15615="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15616="Anotbobnotbobnotboo": 13
|
||||
15616="Anotbobnotbobnotnotbarnotbobnotbar": 13
|
||||
15616="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41
|
||||
15616="notbobnotbobnotboo": 12
|
||||
15616="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15617="Anotbobnotbobnotboo": 13
|
||||
15617="Anotbobnotbobnotnotbarnotbobnotbar": 13
|
||||
15617="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15617="notbobnotbobnotboo": 12
|
||||
15617="notbobnotbobnotnotbarnotbobnotbar": 12
|
||||
15618="Anotbobnotbobnotboo": 7,13
|
||||
15618="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15618="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15618="notbobnotbobnotboo": 6,12
|
||||
15618="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15619="Anotbobnotbobnotboo": 7,13
|
||||
15619="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15619="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15619="notbobnotbobnotboo": 6,12
|
||||
15619="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15619="\nnotbob": 7
|
||||
15620="Anotbobnotbobnotboo": 7,13
|
||||
15620="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15620="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15620="notbobnotbobnotboo": 6,12
|
||||
15620="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15621="Anotbobnotbobnotboo":
|
||||
15621="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15621="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15621="notbobnotbobnotboo": 6,12
|
||||
15621="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15622="Anotbobnotbobnotboo":
|
||||
15622="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15622="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15622="notbobnotbobnotboo": 6,12
|
||||
15622="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15623="Anotbobnotbobnotboo": 7,13
|
||||
15623="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15623="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15623="notbobnotbobnotboo": 12
|
||||
15623="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15624="Anotbobnotbobnotboo": 7,13
|
||||
15624="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15624="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15624="notbobnotbobnotboo":
|
||||
15624="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15625="Anotbobnotbobnotboo": 7,13
|
||||
15625="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15625="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15625="notbobnotbobnotboo":
|
||||
15625="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15626="Anotbobnotbobnotboo": 13
|
||||
15626="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15626="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15626="notbobnotbobnotboo": 12
|
||||
15626="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15627="Anotbobnotbobnotboo":
|
||||
15627="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15627="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15627="notbobnotbobnotboo": 12
|
||||
15627="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15628="Anotbobnotbobnotboo":
|
||||
15628="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15628="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15628="notbobnotbobnotboo": 12
|
||||
15628="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15629="Anotbobnotbobnotboo": 7,13
|
||||
15629="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15629="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15629="notbobnotbobnotboo": 6,12
|
||||
15629="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15630="Anotbobnotbobnotboo": 7,13
|
||||
15630="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15630="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15630="notbobnotbobnotboo": 6,12
|
||||
15630="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15631="Anotbobnotbobnotboo": 7,13
|
||||
15631="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15631="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15631="notbobnotbobnotboo": 6,12
|
||||
15631="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15632="Anotbobnotbobnotboo": 7,13
|
||||
15632="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15632="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15632="notbobnotbobnotboo": 12
|
||||
15632="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15633="Anotbobnotbobnotboo": 7,13
|
||||
15633="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15633="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15633="notbobnotbobnotboo": 12
|
||||
15633="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15634="Anotbobnotbobnotboo": 7,13
|
||||
15634="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15634="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15634="notbobnotbobnotboo": 12
|
||||
15634="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15635="Anotbobnotbobnotboo": 13
|
||||
15635="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15635="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15635="notbobnotbobnotboo": 12
|
||||
15635="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15636="Anotbobnotbobnotboo": 13
|
||||
15636="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15636="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15636="notbobnotbobnotboo": 12
|
||||
15636="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15637="Anotbobnotbobnotboo": 13
|
||||
15637="Anotbobnotbobnotnotbarnotbobnotbar": 13,28
|
||||
15637="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 12,28,41,47,62
|
||||
15637="notbobnotbobnotboo": 12
|
||||
15637="notbobnotbobnotnotbarnotbobnotbar": 12,27
|
||||
15638="Anotbobnotbobnotboo": 7,13
|
||||
15638="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15638="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15638="notbobnotbobnotboo": 6,12
|
||||
15638="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15639="Anotbobnotbobnotboo": 7,13
|
||||
15639="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,28
|
||||
15639="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,28,41,47,62
|
||||
15639="notbobnotbobnotboo": 6,12
|
||||
15639="notbobnotbobnotnotbarnotbobnotbar": 6,12,27
|
||||
15640="Anotbobnotbobnotboo":
|
||||
15640="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15640="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15640="notbobnotbobnotboo":
|
||||
15640="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15641="Anotbobnotbobnotboo":
|
||||
15641="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15641="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15641="notbobnotbobnotboo":
|
||||
15641="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15642="Anotbobnotbobnotboo":
|
||||
15642="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15642="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15642="notbobnotbobnotboo":
|
||||
15642="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15643="Anotbobnotbobnotboo":
|
||||
15643="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15643="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15643="notbobnotbobnotboo":
|
||||
15643="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15644="Anotbobnotbobnotboo":
|
||||
15644="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15644="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15644="notbobnotbobnotboo":
|
||||
15644="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15645="Anotbobnotbobnotboo":
|
||||
15645="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15645="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15645="notbobnotbobnotboo":
|
||||
15645="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15646="Anotbobnotbobnotboo":
|
||||
15646="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15646="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15646="notbobnotbobnotboo":
|
||||
15646="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15647="Anotbobnotbobnotboo":
|
||||
15647="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15647="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15647="notbobnotbobnotboo":
|
||||
15647="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15648="Anotbobnotbobnotboo":
|
||||
15648="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15648="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15648="notbobnotbobnotboo":
|
||||
15648="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15649="Anotbobnotbobnotboo":
|
||||
15649="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15649="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15649="notbobnotbobnotboo":
|
||||
15649="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15650="Anotbobnotbobnotboo":
|
||||
15650="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15650="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15650="notbobnotbobnotboo":
|
||||
15650="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15651="Anotbobnotbobnotboo":
|
||||
15651="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15651="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15651="notbobnotbobnotboo":
|
||||
15651="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15652="Anotbobnotbobnotboo":
|
||||
15652="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15652="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15652="notbobnotbobnotboo":
|
||||
15652="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15653="Anotbobnotbobnotboo":
|
||||
15653="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15653="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15653="notbobnotbobnotboo":
|
||||
15653="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15654="Anotbobnotbobnotboo":
|
||||
15654="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15654="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15654="notbobnotbobnotboo":
|
||||
15654="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15655="Anotbobnotbobnotboo":
|
||||
15655="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15655="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15655="notbobnotbobnotboo":
|
||||
15655="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15656="Anotbobnotbobnotboo":
|
||||
15656="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15656="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15656="notbobnotbobnotboo":
|
||||
15656="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15657="Anotbobnotbobnotboo":
|
||||
15657="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15657="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15657="notbobnotbobnotboo":
|
||||
15657="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15658="Anotbobnotbobnotboo":
|
||||
15658="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15658="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15658="notbobnotbobnotboo":
|
||||
15658="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15659="Anotbobnotbobnotboo":
|
||||
15659="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15659="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15659="notbobnotbobnotboo":
|
||||
15659="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15660="Anotbobnotbobnotboo":
|
||||
15660="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15660="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15660="notbobnotbobnotboo":
|
||||
15660="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15661="Anotbobnotbobnotboo":
|
||||
15661="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15661="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15661="notbobnotbobnotboo":
|
||||
15661="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15662="Anotbobnotbobnotboo":
|
||||
15662="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15662="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15662="notbobnotbobnotboo":
|
||||
15662="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15663="Anotbobnotbobnotboo":
|
||||
15663="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15663="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15663="notbobnotbobnotboo":
|
||||
15663="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15664="Anotbobnotbobnotboo":
|
||||
15664="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15664="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15664="notbobnotbobnotboo":
|
||||
15664="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15665="Anotbobnotbobnotboo":
|
||||
15665="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15665="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15665="notbobnotbobnotboo":
|
||||
15665="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15666="Anotbobnotbobnotboo":
|
||||
15666="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15666="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15666="notbobnotbobnotboo":
|
||||
15666="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15667="Anotbobnotbobnotboo":
|
||||
15667="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15667="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15667="notbobnotbobnotboo":
|
||||
15667="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15668="Anotbobnotbobnotboo":
|
||||
15668="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15668="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15668="notbobnotbobnotboo":
|
||||
15668="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15669="Anotbobnotbobnotboo":
|
||||
15669="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15669="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15669="notbobnotbobnotboo":
|
||||
15669="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15670="Anotbobnotbobnotboo":
|
||||
15670="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15670="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15670="notbobnotbobnotboo":
|
||||
15670="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15671="Anotbobnotbobnotboo":
|
||||
15671="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15671="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15671="notbobnotbobnotboo":
|
||||
15671="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15672="Anotbobnotbobnotboo":
|
||||
15672="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15672="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15672="notbobnotbobnotboo":
|
||||
15672="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15673="Anotbobnotbobnotboo":
|
||||
15673="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15673="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15673="notbobnotbobnotboo":
|
||||
15673="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15674="Anotbobnotbobnotboo":
|
||||
15674="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15674="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15674="notbobnotbobnotboo":
|
||||
15674="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15675="Anotbobnotbobnotboo":
|
||||
15675="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15675="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15675="notbobnotbobnotboo":
|
||||
15675="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15675:----notbobnoQ--bar
|
||||
15675:-----notbobnoQ-bar
|
||||
15675:---------notbobnoQbar
|
||||
15675:---------notbobnotbobnoQbar
|
||||
15676="Anotbobnotbobnotboo":
|
||||
15676="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15676="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15676="notbobnotbobnotboo":
|
||||
15676="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15677="Anotbobnotbobnotboo":
|
||||
15677="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15677="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15677="notbobnotbobnotboo":
|
||||
15677="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15678="Anotbobnotbobnotboo":
|
||||
15678="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15678="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15678="notbobnotbobnotboo":
|
||||
15678="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15679="Anotbobnotbobnotboo":
|
||||
15679="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15679="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15679="notbobnotbobnotboo":
|
||||
15679="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15680="Anotbobnotbobnotboo":
|
||||
15680="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15680="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40,56
|
||||
15680="notbobnotbobnotboo":
|
||||
15680="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15680="\n\r\xd5\xe7E<\xd6\xa6\xc4\xd4\x19fl\xe6\xae\xf1\x9f\x96\x9b\x18\x84\x99\x8ar4\x00\xcf*\xe9Fc\x87\xd2:p\x97v\xc6\xbd\xbb\x1b": 40,41
|
||||
15680="\nV\xaf \x99.<\x918\xc0\xed\xa2\xcf\xf1aA\xaf6{\x8c?\n$\x9c@K\x8d\x9b\xaeHU/\x9e\x04O72\x8b\xc8kK": 40,41
|
||||
15681="Anotbobnotbobnotboo":
|
||||
15681="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15681="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40,56
|
||||
15681="notbobnotbobnotboo":
|
||||
15681="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15681="\ny\xfe\x9c\x84\xef\xdar\x19\xc4\xb3\x96\x9c\xca7f\xed\xe1\x88~\xf2\"\x18MH\x85\xb8\xe7)xn\xfd\xf1\xec\x9a\xf6\xdd\xf4\xe8v\xb9": 40,41
|
||||
15682="Anotbobnotbobnotboo":
|
||||
15682="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15682="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40
|
||||
15682="notbobnotbobnotboo":
|
||||
15682="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15683="Anotbobnotbobnotboo":
|
||||
15683="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15683="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68
|
||||
15683="notbobnotbobnotboo":
|
||||
15683="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15684="Anotbobnotbobnotboo":
|
||||
15684="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15684="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15684="notbobnotbobnotboo":
|
||||
15684="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15685="Anotbobnotbobnotboo":
|
||||
15685="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15685="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15685="notbobnotbobnotboo":
|
||||
15685="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15686="Anotbobnotbobnotboo":
|
||||
15686="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15686="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15686="notbobnotbobnotboo":
|
||||
15686="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15687="Anotbobnotbobnotboo":
|
||||
15687="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15687="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15687="notbobnotbobnotboo":
|
||||
15687="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15688="Anotbobnotbobnotboo":
|
||||
15688="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15688="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15688="notbobnotbobnotboo":
|
||||
15688="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15689="Anotbobnotbobnotboo":
|
||||
15689="Anotbobnotbobnotnotbarnotbobnotbar":
|
||||
15689="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar":
|
||||
15689="notbobnotbobnotboo":
|
||||
15689="notbobnotbobnotnotbarnotbobnotbar":
|
||||
15690="Anotbobnotbobnotboo": 7,13
|
||||
15690="Anotbobnotbobnotnotbarnotbobnotbar": 7,13,22,28,34
|
||||
15690="notbobnotbobnot\nnotbarnotbob\nnotbarnotbobnotbobnotnotbarnotbobnotbar": 6,12,22,28,35,41,47,56,62,68
|
||||
15690="notbobnotbobnotboo": 6,12
|
||||
15690="notbobnotbobnotnotbarnotbobnotbar": 6,12,21,27,33
|
79
tools/hscollider/test_cases/corpora/options.txt
Normal file
79
tools/hscollider/test_cases/corpora/options.txt
Normal file
@@ -0,0 +1,79 @@
|
||||
24500="foo bar": 7
|
||||
24500="foo\nbar": 7
|
||||
24500="foobar": 6
|
||||
24501="foo bar baz": 11
|
||||
24501="foo bar\nbaz": 11
|
||||
24501="foo\nbar baz":
|
||||
24501="foobar\x01baz": 10
|
||||
24502="foo bar": 7
|
||||
24502="foo\nbar":
|
||||
24502="foobar": 6
|
||||
24503="foo bar": 7
|
||||
24503="foo\nbar":
|
||||
24503="foobar": 6
|
||||
24504="foo bar baz": 11
|
||||
24504="foo bar\nbaz": 11
|
||||
24504="foo\nbar baz":
|
||||
24504="foo\nbar\nbaz":
|
||||
24504="foo__bar\x01c___xbaz": 17
|
||||
24504="foobarbaz": 9
|
||||
24600="FOOBAR": 6
|
||||
24600="fOoBaR": 6
|
||||
24600="fooBAR": 6
|
||||
24600="foobar": 6
|
||||
24601="FOOBAR": 6
|
||||
24601="fOoBaR": 6
|
||||
24601="fooBAR": 6
|
||||
24601="foobar": 6
|
||||
24602="FOOBAR":
|
||||
24602="fOoBaR":
|
||||
24602="fooBAR":
|
||||
24602="foobar": 6
|
||||
24603="FOOBAR":
|
||||
24603="FOObar": 6
|
||||
24603="foobar": 6
|
||||
24604="FOOBAR":
|
||||
24604="fooBAR": 6
|
||||
24604="foobar": 6
|
||||
24605="FOOBAR":
|
||||
24605="FOObar": 6
|
||||
24605="foobar": 6
|
||||
24700="__foobar": 8
|
||||
24700="firstline\nfoobar\nfoobar": 16,23
|
||||
24700="foobar": 6
|
||||
24701="__foobar": 8
|
||||
24701="firstline\nfoobar\nfoobar": 23
|
||||
24701="foobar": 6
|
||||
24800="foo bar":
|
||||
24800="foobar": 6
|
||||
24801="foo bar baz":
|
||||
24801="foobar baz": 10
|
||||
24801="foobarbaz":
|
||||
24900="firstline\nfoobarbaz": 19
|
||||
24900="foo\nbar\nbaz": 11
|
||||
24900="foobarbaz": 9
|
||||
24901="ABBREVIATION": 6,12
|
||||
24901="aBBr":
|
||||
24901="abbrev": 6
|
||||
24901="abbreviation": 6,12
|
||||
24902="foo\nBAR": 7
|
||||
24902="foo\nbaR": 7
|
||||
24902="foo_bar": 7
|
||||
24903="foo\nBAR":
|
||||
24903="foo\nbaR":
|
||||
24903="foo_bar": 7
|
||||
24904="fooBaRbaz": 9
|
||||
24904="foobarBAZ":
|
||||
24905="nestedCASELESScaSEfulCASELESSliteral":
|
||||
24905="nestedCASELESScasefulCASELESSliteral": 36
|
||||
24905="nestedcaselesscasefulcaselessliteral": 36
|
||||
24906="ab aB ac aC": 2,5,8,11
|
||||
24907="hatstand teakettle HATSTAND TEAKETTLE Hatstand Teakettle": 8,18,27,37,46,56
|
||||
24908="foo BAR baz bing": 16
|
||||
24908="foo BAR\nbaz bing":
|
||||
24908="foo bar baz bing": 16
|
||||
24908="foo bar\nbaz bing":
|
||||
24908="foo\nBAR baz\nbing": 16
|
||||
24908="foo\nBAR\nbaz\nbing":
|
||||
24908="foo\nbar baz\nbing": 16
|
||||
24908="foo\nbar\nbaz\nbing":
|
66
tools/hscollider/test_cases/corpora/passthrough.txt
Normal file
66
tools/hscollider/test_cases/corpora/passthrough.txt
Normal file
@@ -0,0 +1,66 @@
|
||||
9000="abc":
|
||||
9000="abcdef":
|
||||
9000="abcxxx": 6
|
||||
9000="abcyyyy": 7
|
||||
9000="defxxx": 6
|
||||
9000="defyyyy": 7
|
||||
9000="abcdefxxxyyy": 9
|
||||
9001="abc":
|
||||
9001="abcdef":
|
||||
9001="abcxxx": 6
|
||||
9001="abcyyyy": 7
|
||||
9001="defxxx": 6
|
||||
9001="defyyyy": 7
|
||||
9001="abcdefxxxyyy":
|
||||
9001="qabc":
|
||||
9001="qabcdef":
|
||||
9001="qabcxxx":
|
||||
9001="qabcyyyy":
|
||||
9001="qdefxxx":
|
||||
9001="qdefyyyy":
|
||||
9001="qabcdefxxxyyy":
|
||||
9001="abcabc":
|
||||
9001="abcabcdef":
|
||||
9001="abcabcxxx":
|
||||
9001="abcabcyyyy":
|
||||
9001="abcdefxxx":
|
||||
9001="abcdefyyyy":
|
||||
9001="abdabcdefxxxyyy":
|
||||
9002="anchoredXXX": 11
|
||||
9002="NOTyanchoredXXX":
|
||||
9002="anchoredYYY": 11
|
||||
9002="NOTanchoredYYY":
|
||||
9002="floatingXXX": 11
|
||||
9002="floatingYYY": 11
|
||||
9002="XXXXXfloatingXXX": 16
|
||||
9002="XXXXXfloatingYYY": 16
|
||||
9005="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 40
|
||||
9005=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 41
|
||||
9005=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 42
|
||||
9005=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 43
|
||||
9005=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 44
|
||||
9005=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 167
|
||||
9005="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
|
||||
9006="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 48
|
||||
9006=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 49
|
||||
9006="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 48,49,50,51,52,53,54,55,56,57,58,59,60
|
||||
9007="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 49
|
||||
9007=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 50
|
||||
9007="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 49,50,51,52,53,54,55,56,57,58,59,60
|
||||
9008="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 50
|
||||
9008=" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 51
|
||||
9008="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 50,51,52,53,54,55,56,57,58,59,60
|
||||
9009="qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 1000
|
||||
9009=" qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 1034
|
||||
9009=" qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq": 1034,1035,1036
|
||||
9009=" qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq":
|
||||
9010="coagulateshyperinnervationagitationreassuranceexchangeability": 61
|
||||
9010="coagulateshyperinnervationagitationreassuranceexchangeabilitycoagulateshyperinnervationagitationreassuranceexchangeability": 61,122
|
||||
9010=" coagulateshyperinnervationagitationreassuranceexchangeability": 84
|
||||
9010="_oagulateshyperinnervationagitationreassuranceexchangeability":
|
||||
9010="coagulateshyperinnervationagitationreassuranceexchangeabilit_":
|
||||
9011="nonplasticerythematoussnakebitesjubilatedworklessnesses": 55
|
||||
9011="nonplasticerythematoussnakebitesjubilatedworklessnessesnonplasticerythematoussnakebitesjubilatedworklessnesses": 55,110
|
||||
9011=" nonplasticerythematoussnakebitesjubilatedworklessnesses": 62
|
||||
9011="_onplasticerythematoussnakebitesjubilatedworklessnesses":
|
||||
9011="nonplasticerythematoussnakebitesjubilatedworklessnesse_":
|
271
tools/hscollider/test_cases/corpora/prefilter.txt
Normal file
271
tools/hscollider/test_cases/corpora/prefilter.txt
Normal file
@@ -0,0 +1,271 @@
|
||||
90000="foo": 3
|
||||
90000="foobar":
|
||||
90000="foofoobar": 3
|
||||
90000="foobarfoobar":
|
||||
90000="foofoofoo": 3,6,9
|
||||
90001="foo":
|
||||
90001="foobaz": 6
|
||||
90001="foo baz": 7
|
||||
90001="foo baz": 9
|
||||
90001="foobabaz": 8
|
||||
90001="foobarbaz":
|
||||
90001="foo barbaz": 10
|
||||
90001="foobar baz":
|
||||
90002="bar": 3
|
||||
90002="foobar":
|
||||
90002="foo bar": 7
|
||||
90002="barbar": 3,6
|
||||
90002="foobarbar": 9
|
||||
90003="foo":
|
||||
90003="foo_____":
|
||||
90003="foobar": 3
|
||||
90003="foo bar": 4
|
||||
90003="foo foo bar": 8
|
||||
90200="sense and sensibility": 21
|
||||
90200="response and responsibility": 27
|
||||
90200="sense and responsibility":
|
||||
90200="response and sensibility":
|
||||
90201="rah rah": 7
|
||||
90201="RAH RAH": 7
|
||||
90201="rah RAH":
|
||||
90201="RAH rah":
|
||||
90202="111":
|
||||
90202="111 112":
|
||||
90202="111 111": 12
|
||||
90202="111111": 6
|
||||
90202="111\n111":
|
||||
90202="012 012": 7
|
||||
90202="999 999": 33
|
||||
90202="999 000 999": 58
|
||||
90203="this is a quoted string":
|
||||
90203="this is a \"quoted string\"": 25
|
||||
90203="this is a 'quoted string'": 25
|
||||
90203="this is a \"quoted string'":
|
||||
90203="this is a 'quoted string\"":
|
||||
90204="<span>blah</span>":
|
||||
90204="<span>blah</div>":
|
||||
90204="<b><i>bold italic</i></b>": 25
|
||||
90205="foobar":
|
||||
90205="foofoo": 6
|
||||
90205="barbar": 6
|
||||
90205="foofoofoobarfoofoobarbar": 6,9,15,18,21,24
|
||||
90205="foo___________bar______foo__________bar": 26,39
|
||||
90205="barfoo":
|
||||
90205="foobarfoobar": 9,12
|
||||
90206="barfoo":
|
||||
90206="foofoofoobarfoofoobarbar": 6,9,18,21,24
|
||||
90206="foofoo": 6
|
||||
90206="barbar": 6
|
||||
90206="foobarfoobar": 12
|
||||
90206="foo___________bar______foo__________bar":
|
||||
90206="foobar":
|
||||
90300="abcc": 4
|
||||
90300="abc":
|
||||
90300="ac":
|
||||
90320="possessive":
|
||||
90320="possessive 0123": 15
|
||||
90320="possessive 01234": 16
|
||||
90320="possessive 0123456": 18
|
||||
90320="possessive 0123456789": 21
|
||||
90320="possessive 012": 14
|
||||
90320="possessive 012345": 17
|
||||
90320="possessive 0": 12
|
||||
90320="possessive 01": 13
|
||||
90321="possessive":
|
||||
90321="possessive 0123": 15
|
||||
90321="possessive 01234": 16
|
||||
90321="possessive 012345": 17
|
||||
90321="possessive 0123456": 18
|
||||
90321="possessive 0123456789": 21
|
||||
90321="possessive 012": 14
|
||||
90321="possessive 01": 13
|
||||
90321="possessive 0": 12
|
||||
90322="possessive":
|
||||
90322="possessive 0": 12
|
||||
90322="possessive 01": 12
|
||||
90323="possessive":
|
||||
90323="possessive 0":
|
||||
90323="possessive 01":
|
||||
90323="possessive 012":
|
||||
90323="possessive 01234": 15
|
||||
90323="possessive 0123": 15
|
||||
90323="possessive 012345": 15
|
||||
90323="possessive 0123456": 15
|
||||
90323="possessive 0123456789": 15
|
||||
90324="possessive":
|
||||
90324="possessive 0123456": 18
|
||||
90324="possessive 012":
|
||||
90324="possessive 0":
|
||||
90324="possessive 01234567": 19
|
||||
90324="possessive 0123":
|
||||
90324="possessive 0123456789": 21
|
||||
90324="possessive 012345678": 20
|
||||
90324="possessive 01234":
|
||||
90324="possessive 012345": 17
|
||||
90324="possessive 01":
|
||||
90325="possessive 012345678":
|
||||
90325="possessive 01234567890": 22
|
||||
90325="possessive 0123456789012345678": 30
|
||||
90325="possessive 0123456789012": 24
|
||||
90325="possessive 012345678901": 23
|
||||
90325="possessive 01234567890123": 25
|
||||
90325="possessive 012345678901234": 26
|
||||
90325="possessive 0123456789": 21
|
||||
90325="possessive 0123456789012345": 27
|
||||
90325="possessive 0123456789012345678901": 31
|
||||
90325="possessive 012345678901234567": 29
|
||||
90325="possessive 01234567890123456789": 31
|
||||
90325="possessive 01234567890123456": 28
|
||||
90325="possessive 012345678901234567890": 31
|
||||
90207="aateakettlea": 12
|
||||
90207="aateakettleb":
|
||||
90207="abteakettleb": 12
|
||||
90207="acteakettlec": 12
|
||||
90207="acteakettlecc": 12
|
||||
90207="aateakettlecc":
|
||||
90208="aateakettlea": 12
|
||||
90208="aateakettleb":
|
||||
90208="abteakettleb": 12
|
||||
90208="acteakettlec": 12
|
||||
90208="acteakettlecc": 12
|
||||
90208="aateakettlecc":
|
||||
90208="____abcabcabcabcteakettleabcabcabcabc_": 28, 31, 34, 37
|
||||
90208="____abcabcabcabcteakettleabcabcabcab__": 28, 31, 34
|
||||
|
||||
90210="_0backref0": 10
|
||||
90210="_0backref3":
|
||||
90210="_3backref3": 10
|
||||
90210="_9backref":
|
||||
90210="_9backref9": 10
|
||||
90210="_backref0":
|
||||
90211="_0backref0": 10
|
||||
90211="_0backref3":
|
||||
90211="_3backref3": 10
|
||||
90211="_9backref":
|
||||
90211="_9backref9": 10
|
||||
90211="_backref0":
|
||||
90212="_0backref0": 10
|
||||
90212="_0backref3":
|
||||
90212="_3backref3": 10
|
||||
90212="_9backref":
|
||||
90212="_9backref9": 10
|
||||
90212="_backref0":
|
||||
90213="_0backref0": 10
|
||||
90213="_0backref3":
|
||||
90213="_3backref3": 10
|
||||
90213="_9backref":
|
||||
90213="_9backref9": 10
|
||||
90213="_backref0":
|
||||
90209="a_aaa": 5
|
||||
90209="a_aba":
|
||||
90209="f_ffff_f_ffff_ff_": 5, 12
|
||||
90207="aateakettlea": 12
|
||||
90207="aateakettleb":
|
||||
90207="abteakettleb": 12
|
||||
90207="acteakettlec": 12
|
||||
90207="acteakettlecc": 12
|
||||
90207="aateakettlecc":
|
||||
90208="aateakettlea": 12
|
||||
90208="aateakettleb":
|
||||
90208="abteakettleb": 12
|
||||
90208="acteakettlec": 12
|
||||
90208="acteakettlecc": 12
|
||||
90208="aateakettlecc":
|
||||
90208="____abcabcabcabcteakettleabcabcabcabc_": 28, 31, 34, 37
|
||||
90208="____abcabcabcabcteakettleabcabcabcab__": 28, 31, 34
|
||||
|
||||
90210="_0backref0": 10
|
||||
90210="_0backref3":
|
||||
90210="_3backref3": 10
|
||||
90210="_9backref":
|
||||
90210="_9backref9": 10
|
||||
90210="_backref0":
|
||||
90211="_0backref0": 10
|
||||
90211="_0backref3":
|
||||
90211="_3backref3": 10
|
||||
90211="_9backref":
|
||||
90211="_9backref9": 10
|
||||
90211="_backref0":
|
||||
90212="_0backref0": 10
|
||||
90212="_0backref3":
|
||||
90212="_3backref3": 10
|
||||
90212="_9backref":
|
||||
90212="_9backref9": 10
|
||||
90212="_backref0":
|
||||
90213="_0backref0": 10
|
||||
90213="_0backref3":
|
||||
90213="_3backref3": 10
|
||||
90213="_9backref":
|
||||
90213="_9backref9": 10
|
||||
90213="_backref0":
|
||||
90209="a_aaa": 5
|
||||
90209="a_aba":
|
||||
90209="f_ffff_f_ffff_ff_": 5, 12
|
||||
90400="a apple": 2
|
||||
90400="a pine": 2
|
||||
90400="a pineapple": 2,11
|
||||
90401="a melon":
|
||||
90401="a orange": 8
|
||||
90401="a watermelon": 12
|
||||
90401="a waterorange":
|
||||
90402="guinea pig":
|
||||
90402="guinea pig party": 11
|
||||
90402="hamster":
|
||||
90402="hamster party": 13
|
||||
90403="guinea pig":
|
||||
90403="guinea pig nothing": 18
|
||||
90403="guinea pig party":
|
||||
90403="hamster":
|
||||
90403="hamster nothing":
|
||||
90403="hamster party": 13
|
||||
90403=" nothing":
|
||||
90403="nothing":
|
||||
90404="guinea pig":
|
||||
90404="guinea pig nothing": 18
|
||||
90404="guinea pig party":
|
||||
90404="hamster":
|
||||
90404="hamster nothing":
|
||||
90404="hamster party": 13
|
||||
90404=" nothing":
|
||||
90404="nothing":
|
||||
90405="guinea pig":
|
||||
90405="guinea pig nothing": 18
|
||||
90405="guinea pig party":
|
||||
90405="hamster":
|
||||
90405="hamster nothing":
|
||||
90405="hamster party": 13
|
||||
90405=" nothing":
|
||||
90405="nothing":
|
||||
90406="water field": 11
|
||||
90406="water-buffalo field": 19
|
||||
90406="water-buffalo":
|
||||
90407="jabber": 6
|
||||
90407="jabberwocky": 6
|
||||
90408="goodbye": 3
|
||||
90408="hell": 3
|
||||
90408="hello": 1,2,3,4,5
|
||||
90409="goodbye and hello": 1,2,3,4,5,6,7
|
||||
90409="hello": 3
|
||||
90410="badgerbrush":
|
||||
90410="foobar":
|
||||
90410="hatstand":
|
||||
90410="hatstandbadgerbrush":
|
||||
90410="hatstandteakettle": 17
|
||||
90410="notbadgerbrush": 14
|
||||
90411="badgerbrush":
|
||||
90411="foobar":
|
||||
90411="hatstand":
|
||||
90411="hatstandbadgerbrush": 19
|
||||
90411="hatstandteakettle":
|
||||
90411="notbadgerbrush":
|
||||
90413="abdbbbCCdAeaaadCdbaddaaCCbaCCbEeaaabadbaabddEdeDadCCEdeDadadbddCCAeacCbbdbdaCCdddCCaCCdAeabcCbdbbddddCCCdbaCCbEeaacCaadddbdbdbaadCCCCbbddddbaCCEeabbdCdCCCCbddadddbadbddCCEeaaCCadCdCCadbCCbAeabbdbdddbdabdaadbbaEeaaabadbdbbdaCCabdbAeaabadadddddCCdaadAeacCcCdbddaddaAeaaabdabCCbbdadbddbdddbCCEeaaaaadbadCCdbbddddddaEeaaaabdbadbbddbadbdddCCbbdEea": 12,13,14,33,34,35,68,90,113,114,146,173,174,191,212,213,214,232,233,251,266,267,268,292,293,294,295,296,315,316,317,318,342
|
||||
90413="CCdadabCCddddabddEdeDadbadbaCCabbadaaAeaa": 40,41
|
||||
90413="CCdadaaCCddddabdabdbCCbadbaddCCCCdddAea": 39
|
||||
90414="qq_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a": 602
|
||||
90414="qqa_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a__a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a": 602
|
||||
90414="qqa_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_a_": 602
|
||||
90415="prefix00112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900": 606
|
||||
90415="prefix_______________________________99_____________________________________________________________________________________________________________01________________________________________________________________________________________________________________________________________________________________": 308
|
||||
90415="prefix____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________": 306
|
||||
90416:afooafooAfooAfooaFOOa
|
||||
90417:dDcB\xf3\xb9\xa5\x8eAcDDe
|
1123
tools/hscollider/test_cases/corpora/priority.txt
Normal file
1123
tools/hscollider/test_cases/corpora/priority.txt
Normal file
File diff suppressed because it is too large
Load Diff
1132
tools/hscollider/test_cases/corpora/puff.txt
Normal file
1132
tools/hscollider/test_cases/corpora/puff.txt
Normal file
File diff suppressed because it is too large
Load Diff
209
tools/hscollider/test_cases/corpora/pug.txt
Normal file
209
tools/hscollider/test_cases/corpora/pug.txt
Normal file
@@ -0,0 +1,209 @@
|
||||
5000="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5000="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 116
|
||||
5000="ax:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 118
|
||||
5001="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5001="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 116
|
||||
5001="ax:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 118
|
||||
5002="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5002="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 118
|
||||
5003="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5003="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 118
|
||||
5003="aaaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 120
|
||||
5004="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5004="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 117
|
||||
5004="ax:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 119
|
||||
5005="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5005="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 117
|
||||
5005="ax:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 119
|
||||
5006="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5006="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 119
|
||||
5006="aaaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 121
|
||||
5007="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5007="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 119
|
||||
5007="aaaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 121
|
||||
5008="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5008="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 118
|
||||
5008="ax:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 120
|
||||
5009="x:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5009="x:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 118
|
||||
5009="ax:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 120
|
||||
5010="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5010="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 120
|
||||
5010="aaaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 122
|
||||
5011="aaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug":
|
||||
5011="aaa:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccpug": 120
|
||||
5011="aaaa:ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx:ccccccccccpug": 122
|
||||
5012="aaaaaaaaaaaaaaaaa:adddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 150
|
||||
5012="aaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 149
|
||||
5012="daaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 150
|
||||
5013="aaaaaaaaaaaaaaaaa:adddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 150
|
||||
5013="aaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 149
|
||||
5013="daaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 150
|
||||
5014="aaaaaaaaaaaaaaaaa:adddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 150
|
||||
5014="aaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 149
|
||||
5014="daaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 150
|
||||
5015="aaaaaaaaaaaaaaaaa:adddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 150
|
||||
5015="aaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 149
|
||||
5015="daaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 150
|
||||
5016="aaaaaaaaaaaaaa:addddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeedddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 149
|
||||
5016="aaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 148
|
||||
5016="daaaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddedddedddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 153
|
||||
5017="aaaaaaaaaaaaaa:addddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeedddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 149
|
||||
5017="aaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 148
|
||||
5017="daaaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddedddedddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 153
|
||||
5018="aaaaaaaaaaaaaa:addddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeedddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 149
|
||||
5018="aaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 148
|
||||
5018="daaaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddedddedddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 153
|
||||
5019="aaaaaaaaaaaaaa:addddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeedddddddddddddddddddddffdddddddddddddddddddddddddddddddddpug": 149
|
||||
5019="aaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeddddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 148
|
||||
5019="daaaaaaaaaaaaaaaaaaa:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddedddedddddddddddddddddddddddddddddddddddddddddddddddddddddddpug": 153
|
||||
5020="aaaaaaaaaaaaa:aadbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc eedbc dbc dggdbc dbc dbc ffdbc dbc dbc dbc dbc dbc dbc dbc dpug": 151
|
||||
5020="aaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedbc ddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc ddpug": 150
|
||||
5020="daaaaaaaaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedddeddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dpug": 156
|
||||
5021="aaaaaaaaaaaaa:aadbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc eedbc dbc dggdbc dbc dbc ffdbc dbc dbc dbc dbc dbc dbc dbc dpug": 151
|
||||
5021="aaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedbc ddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc ddpug": 150
|
||||
5021="daaaaaaaaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedddeddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dpug": 156
|
||||
5022="aaaaaaaaaaaaa:aadbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc eedbc dbc dggdbc dbc dbc ffdbc dbc dbc dbc dbc dbc dbc dbc dpug": 151
|
||||
5022="aaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedbc ddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc ddpug": 150
|
||||
5022="daaaaaaaaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedddeddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dpug": 156
|
||||
5023="aaaaaaaaaaaaa:aadbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc eedbc dbc dggdbc dbc dbc ffdbc dbc dbc dbc dbc dbc dbc dbc dpug": 151
|
||||
5023="aaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedbc ddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc ddpug": 150
|
||||
5023="daaaaaaaaaaaaaaaaaaaaaa:dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dddedddeddggdbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dbc dpug": 156
|
||||
5024="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdpugpug": 155
|
||||
5024="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdapugpug": 153,156
|
||||
5024="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpug": 154,157
|
||||
5025="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdpugpug": 153,154,155
|
||||
5025="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdapugpug": 153,154,155,156
|
||||
5025="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpug": 154,155,156,157
|
||||
5026="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 155
|
||||
5026="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 153,156
|
||||
5026="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 154,157
|
||||
5027="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 153,154,155
|
||||
5027="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 153,154,155,156
|
||||
5027="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpug": 154,155,156,157
|
||||
5028="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpug": 155,158
|
||||
5028="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpug": 156,159
|
||||
5028="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpug": 154,157,160
|
||||
5029="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpug": 154,155,156,157,158
|
||||
5029="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpug": 154,155,156,157,158,159
|
||||
5029="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpug": 154,155,156,157,158,159,160
|
||||
5030="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 155,158
|
||||
5030="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 156,159
|
||||
5030="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 154,157,160
|
||||
5031="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 154,155,156,157,158
|
||||
5031="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 154,155,156,157,158,159
|
||||
5031="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpug": 154,155,156,157,158,159,160
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpug": 158,161,164,167
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpug": 162,165,168,171
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpug": 157,160,163
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpug":
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpug":
|
||||
5032="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpug":
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpug": 158,159,160,161,162,163,164,165,166,167
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpug": 162,163,164,165,166,167,168,169,170,171
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpug": 155,156,157,158,159,160,161,162,163
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpug":
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpug":
|
||||
5033="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpug":
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug": 157,160,163
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpug":
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5034="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpug":
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpug": 155,156,157,158,159,160,161,162,163
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpug":
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpug":
|
||||
5035="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpug":
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpug": 173,176,179,182,185,188,191
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpug": 177,180,183,186,189
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpug":
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpug":
|
||||
5036="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpug":
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpug": 172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpug": 175,176,177,178,179,180,181,182,183,184,185,186,187,188,189
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpug": 169,170,171,172,173,174,175,176,177,178,179,180,181
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdabcdabcda;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpug":
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdabcdabcdaa;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpug":
|
||||
5037="aaa:abcdabcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpug":
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5038="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug": 169,170,171,172,173,174,175,176,177,178,179,180,181
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5039="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpug":
|
||||
5040="aaa:abcdabcdabcdabcdabcdabcdabcdaa;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpugpug": 170,173,176,179,182,185,188,191
|
||||
5040="aaa:abcdabcdabcdabcdabcdabcdabcdabcd;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug": 175,178,181,184,187,190
|
||||
5040="aaa:abcdabcdabcdabcdabcdaaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181
|
||||
5040="aaa:abcdabcdabcdabcdabcdabcd;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5040="aaa:abcdabcdabcdabcdabcdabcdabcda;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5040="aaa:abcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5041="aaa:abcdabcdabcdabcdabcdabcdabcdaa;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpugpug": 170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191
|
||||
5041="aaa:abcdabcdabcdabcdabcdabcdabcdabcd;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug": 174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190
|
||||
5041="aaa:abcdabcdabcdabcdabcdaaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpugpug": 167,168,169,170,171,172,173,174,175,176,177,178,179,180,181
|
||||
5041="aaa:abcdabcdabcdabcdabcdabcd;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5041="aaa:abcdabcdabcdabcdabcdabcdabcda;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5041="aaa:abcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5042="aaa:aaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug": 167,168,169,170,171,172,173,174,175,176,177,178,179,180,181
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5043="aaa:aaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5044="aaa:abcdabcdabcdabcdabcdabcdabcdaa;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpugpug": 173,176,179,182,185,188,191,194
|
||||
5044="aaa:abcdabcdabcdabcdabcdabcdabcdabcd;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug": 175,178,181,184,187,190,193
|
||||
5044="aaa:abcdabcdabcdabcdabcdaaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdaapugabcdabcdabcdabcdabcdabcdabcdaapugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181,184
|
||||
5044="aaa:abcdabcdabcdabcdabcdabcd;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5044="aaa:abcdabcdabcdabcdabcdabcdabcda;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5044="aaa:abcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5045="aaa:abcdabcdabcdabcdabcdabcdabcdaa;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdpugpugpugpugpugpugpugpugpugpugpugpugpug": 171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194
|
||||
5045="aaa:abcdabcdabcdabcdabcdabcdabcdabcd;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug": 175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193
|
||||
5045="aaa:abcdabcdabcdabcdabcdaaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdaapugabcdabcdabcdabcdabcdabcdabcdaapugpugabcdabcdabcdabcdabcdabcdabcdaapugpugpugpugpugpugpugpugpugpugpug": 168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184
|
||||
5045="aaa:abcdabcdabcdabcdabcdabcd;pug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcdabcd;abcdabcdabcdpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5045="aaa:abcdabcdabcdabcdabcdabcdabcda;ugpug:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdabcdabcdpugpugpugabcdabcdabcd;abcdabcdabcdabcdapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5045="aaa:abcdabcdabcdabcdabcdaa;abcdaaa:abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdpugabcdabcdabcdabcdabcdpugpugabcdabcdabcdabcdabcd;abcdabcdaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug": 169,172,175,178,181,184
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5046="aaa:aaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpugpugpug":
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug": 168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaaaa;pug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaaaaaa;aaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;ugpug:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaaaaaaaaaapugpugpugaaaaaaaaaaaa;aaaaaaaaaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5047="aaa:aaaaaaaaaaaaaaaaaaaaaa;aaaaaaa:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapugaaaaaaaaaaaaaaaaaaaapugpugaaaaaaaaaaaaaaaaaaaa;aaaaaaaaaapugpugpugpugpugpugpugpugpugpugpug":
|
||||
5048="X:yab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab pugpug": 126,127,128,129
|
||||
5048="x:Yab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab aapugpug": 125,126,127,128
|
||||
5048="x:yab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab aapugpug": 125,126,127,128
|
||||
5049="X:yabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcpugpug": 126,127,128,129
|
||||
5049="x:Yabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcaapugpug":
|
||||
5049="x:yabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcaapugpugb": 125,126,127,128
|
||||
5900="xyd;add":
|
||||
5900="xyd;ddayfadddddEA": 13,15,16,17
|
||||
5901="a- x- x- xa- x- x- x- xbb- x- x- x--cc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xddg": 116
|
||||
5901="cc- x- x-a- x- x- x- x- xbb- x- x-cc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xddg": 117
|
||||
5901="cc- x- x-a- x- x- x- x- x--bb- xcc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x--ddg": 117
|
||||
5901="cc- x- x-a- x- x- x- x- x--BB- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x-ddgddgddgddgddgddgddg": 144,147,150
|
||||
5901="cc- x- x-a- x- x- x- x- x--Ba- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x-ddgddgddgddgddgddgddg": 144,147,150
|
||||
5901="cc- x- x-a- x- x- x- x- x--Bcc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xddgddgddgddgddgddgddg": 144,147,150
|
||||
5901="cc- x- x-a- x- x- x- x- x--Bbb- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xddgddgddgddgddgddgddg": 144,147,150
|
||||
5902="a- x- x- xa- x- x- x- xbb- x- x- x--cc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xyddg": 117
|
||||
5902="cc- x- x-a- x- x- x- x- xbb- x- x-cc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- xyddg": 118
|
||||
5902="cc- x- x-a- x- x- x- x- x--bb- xcc- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x- x--yddg": 118
|
896
tools/hscollider/test_cases/corpora/redundancy.txt
Normal file
896
tools/hscollider/test_cases/corpora/redundancy.txt
Normal file
@@ -0,0 +1,896 @@
|
||||
15100="hatstandteakettle": 17
|
||||
15100="hatstand teakettle": 18
|
||||
15100="hatstand teakettle": 21
|
||||
15100="hatstandateakettle": 18
|
||||
15100="hatstandaaaaateakettle": 22
|
||||
15100="hatstandeakettle":
|
||||
15101="foobar":
|
||||
15101="fooAbar": 7
|
||||
15101="fooAAbar":
|
||||
15102="foobar":
|
||||
15102="foo1bar": 7
|
||||
15102="foo2bar": 7
|
||||
15102="foo3bar": 7
|
||||
15102="foo4bar": 7
|
||||
15102="foo5bar":
|
||||
15103="abc": 3
|
||||
15103="aabc": 4
|
||||
15103="aaabc": 5
|
||||
15103="aaaabc": 6
|
||||
15103="aaaaaaaaaaaaaaaaaaaaaaaaaaabc": 29
|
||||
15103="aaaaaaaaaaaaaaaaaaaaaaaaaa\nabc":
|
||||
15103="aaaaaaaaaaaaaaaaaaaaaaaaaaa\nbc":
|
||||
15104="fooaabar": 8
|
||||
15104="fooAabar": 8
|
||||
15104="fooAAbar":
|
||||
15104="fooabar":
|
||||
15104="fooAbar":
|
||||
15104="fooabbar":
|
||||
15104="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 39
|
||||
15105="fooaabar": 8
|
||||
15105="fooAabar": 8
|
||||
15105="fooAAbar":
|
||||
15105="fooabar":
|
||||
15105="fooAbar":
|
||||
15105="fooabbar":
|
||||
15105="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 39
|
||||
15105="fooaBbar": 8
|
||||
15105="fooaBBbar": 9
|
||||
15105="fooaBBBbar": 10
|
||||
15106="fooaabar": 8
|
||||
15106="fooBBbar": 8
|
||||
15106="fooAabar": 8
|
||||
15106="fooAAbar":
|
||||
15106="fooabar":
|
||||
15106="fooAbar":
|
||||
15106="fooabbar":
|
||||
15106="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 39
|
||||
15106="fooaBbar": 8
|
||||
15106="fooaBBbar": 9
|
||||
15106="fooaBBBbar": 10
|
||||
15107="fooaabar": 8
|
||||
15107="fooBBbar": 8
|
||||
15107="fooAabar": 8
|
||||
15107="fooAAbar":
|
||||
15107="fooabar": 7
|
||||
15107="fooAbar":
|
||||
15107="fooabbar":
|
||||
15107="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 39
|
||||
15107="fooaBbar": 8
|
||||
15107="fooaBBbar": 9
|
||||
15107="fooaBBBbar": 10
|
||||
15107="fooabar": 7
|
||||
15107="fooBbar": 7
|
||||
15107="fooabar": 7
|
||||
15107="fooAbar":
|
||||
15107="foobar":
|
||||
15107="foobar":
|
||||
15107="foobbar":
|
||||
15107="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 38
|
||||
15107="foobar":
|
||||
15107="fooBBbar": 8
|
||||
15107="fooBBBbar": 9
|
||||
15108="fooaabar": 8
|
||||
15108="fooBBbar": 8
|
||||
15108="fooAabar": 8
|
||||
15108="fooAAbar":
|
||||
15108="fooabar": 7
|
||||
15108="fooAbar":
|
||||
15108="fooabbar":
|
||||
15108="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 39
|
||||
15108="fooaBbar": 8
|
||||
15108="fooaBBbar": 9
|
||||
15108="fooaBBBbar": 10
|
||||
15108="fooabar": 7
|
||||
15108="fooBbar": 7
|
||||
15108="fooabar": 7
|
||||
15108="fooAbar":
|
||||
15108="foobar":
|
||||
15108="foobar":
|
||||
15108="foobbar":
|
||||
15108="fooaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabar": 38
|
||||
15108="foobar":
|
||||
15108="fooBBbar": 8
|
||||
15108="fooBBBbar": 9
|
||||
15109="abde": 4
|
||||
15109="abdde": 5
|
||||
15109="abXde":
|
||||
15109="acde":
|
||||
15109="acXde": 5
|
||||
15109="acXXde": 6
|
||||
15109="acXdde": 6
|
||||
15110="abde": 4
|
||||
15110="abdde": 5
|
||||
15110="abXde":
|
||||
15110="acde": 4
|
||||
15110="acXde": 5
|
||||
15110="acXXde": 6
|
||||
15110="acXdde": 6
|
||||
15120="foobar": 6
|
||||
15120="fooXbar": 7
|
||||
15120="fooXXbar": 8
|
||||
15120="fooabar": 7
|
||||
15120="fooXabar": 8
|
||||
15120="fooaXbar": 8
|
||||
15120="fooaaaabar": 10
|
||||
15120="fooaaXaabar": 11
|
||||
15121="foobar": 6
|
||||
15121="fooXbar": 7
|
||||
15121="fooXXbar": 8
|
||||
15121="fooabar": 7
|
||||
15121="fooXabar": 8
|
||||
15121="fooaXbar": 8
|
||||
15121="fooaaaabar": 10
|
||||
15121="fooaaXaabar": 11
|
||||
15122="foobar": 6
|
||||
15122="fooXbar": 7
|
||||
15122="fooXXbar": 8
|
||||
15122="fooabar": 7
|
||||
15122="fooXabar": 8
|
||||
15122="fooaXbar": 8
|
||||
15122="fooaaaabar": 10
|
||||
15122="fooaaXaabar": 11
|
||||
15123="foobar": 6
|
||||
15123="fooXbar": 7
|
||||
15123="fooXXbar": 8
|
||||
15123="fooabar": 7
|
||||
15123="fooXabar": 8
|
||||
15123="fooaXbar": 8
|
||||
15123="fooaaaabar": 10
|
||||
15123="fooaaXaabar": 11
|
||||
15124="foobar":
|
||||
15124="fooXbar":
|
||||
15124="fooXXbar":
|
||||
15124="fooabar": 7
|
||||
15124="fooXabar": 8
|
||||
15124="fooaXbar":
|
||||
15124="fooaaaabar": 10
|
||||
15124="fooaaXaabar": 11
|
||||
15125="foobar":
|
||||
15125="fooXbar":
|
||||
15125="fooXXbar":
|
||||
15125="fooabar": 7
|
||||
15125="fooXabar":
|
||||
15125="fooaXbar": 8
|
||||
15125="fooaaaabar": 10
|
||||
15125="fooaaXaabar": 11
|
||||
15126="foobar":
|
||||
15126="fooXbar": 7
|
||||
15126="fooXXbar": 8
|
||||
15126="fooabar": 7
|
||||
15126="fooXabar": 8
|
||||
15126="fooaXbar": 8
|
||||
15126="fooaaaabar": 10
|
||||
15126="fooaaXaabar": 11
|
||||
15127="foobar":
|
||||
15127="fooXbar": 7
|
||||
15127="fooXXbar": 8
|
||||
15127="fooabar": 7
|
||||
15127="fooXabar": 8
|
||||
15127="fooaXbar": 8
|
||||
15127="fooaaaabar": 10
|
||||
15127="fooaaXaabar": 11
|
||||
15128="foobar":
|
||||
15128="fooXbar": 7
|
||||
15128="fooXXbar": 8
|
||||
15128="fooabar": 7
|
||||
15128="fooXabar": 8
|
||||
15128="fooaXbar": 8
|
||||
15128="fooaaaabar": 10
|
||||
15128="fooaaXaabar": 11
|
||||
15129="foobar":
|
||||
15129="fooXbar": 7
|
||||
15129="fooXXbar": 8
|
||||
15129="fooabar": 7
|
||||
15129="fooXabar": 8
|
||||
15129="fooaXbar": 8
|
||||
15129="fooaaaabar": 10
|
||||
15129="fooaaXaabar": 11
|
||||
15130="foobar":
|
||||
15130="fooXbar":
|
||||
15130="fooXXbar":
|
||||
15130="fooabar":
|
||||
15130="fooXabar": 8
|
||||
15130="fooaXbar":
|
||||
15130="fooaaaabar": 10
|
||||
15130="fooaaXaabar": 11
|
||||
15131="foobar":
|
||||
15131="fooXbar":
|
||||
15131="fooXXbar":
|
||||
15131="fooabar":
|
||||
15131="fooXabar":
|
||||
15131="fooaXbar": 8
|
||||
15131="fooaaaabar": 10
|
||||
15131="fooaaXaabar": 11
|
||||
15132="abcdef": 6
|
||||
15132="abcadef": 7
|
||||
15132="abcaadef": 8
|
||||
15132="abcaaaaadef": 11
|
||||
15132="abcaaaaaadef": 12
|
||||
15132="abcaaaaaaadef":
|
||||
15133="AAAAZZZZ": 8
|
||||
15133="AAAA_ZZZ": 8
|
||||
15133="AAA_AZZZ":
|
||||
15133="AAAAA_ZZZ": 9
|
||||
15133="AAAAA__ZZZZ": 10,11
|
||||
15133="AAAA_A__ZZZZ": 11,12
|
||||
15133="AAAA_A__ZZZZ": 11,12
|
||||
15134="/(Y.|X.+)a[^a]*foo/s": 18
|
||||
15134="Yya_foo": 7
|
||||
15134="Yyaafoo":
|
||||
15134="Xya_foo": 7
|
||||
15134="Xyaafoo": 7
|
||||
15135="oof_ayY": 7
|
||||
15135="oofaayY":
|
||||
15135="oof_ayX": 7
|
||||
15135="oofaayX": 7
|
||||
15136="foo<<<bar": 9
|
||||
15136="foo<<=bar": 9
|
||||
15136="foo<<>bar": 9
|
||||
15136="foo<=<bar": 9
|
||||
15136="foo<==bar": 9
|
||||
15136="foo<=>bar": 9
|
||||
15136="foo<><bar": 9
|
||||
15136="foo<>=bar": 9
|
||||
15136="foo<>>bar": 9
|
||||
15136="foo=<<bar": 9
|
||||
15136="foo=<=bar": 9
|
||||
15136="foo=<>bar": 9
|
||||
15136="foo==<bar": 9
|
||||
15136="foo===bar":
|
||||
15136="foo==>bar":
|
||||
15136="foo=><bar": 9
|
||||
15136="foo=>=bar":
|
||||
15136="foo=>>bar":
|
||||
15136="foo><<bar": 9
|
||||
15136="foo><=bar": 9
|
||||
15136="foo><>bar": 9
|
||||
15136="foo>=<bar": 9
|
||||
15136="foo>==bar":
|
||||
15136="foo>=>bar":
|
||||
15136="foo>><bar": 9
|
||||
15136="foo>>=bar":
|
||||
15136="foo>>>bar":
|
||||
15136="foo<<<<bar": 10
|
||||
15136="foo<<<=bar": 10
|
||||
15136="foo<<<>bar": 10
|
||||
15136="foo<<=<bar": 10
|
||||
15136="foo<<==bar": 10
|
||||
15136="foo<<=>bar": 10
|
||||
15136="foo<<><bar": 10
|
||||
15136="foo<<>=bar": 10
|
||||
15136="foo<<>>bar": 10
|
||||
15136="foo<=<<bar": 10
|
||||
15136="foo<=<=bar": 10
|
||||
15136="foo<=<>bar": 10
|
||||
15136="foo<==<bar": 10
|
||||
15136="foo<===bar": 10
|
||||
15136="foo<==>bar": 10
|
||||
15136="foo<=><bar": 10
|
||||
15136="foo<=>=bar": 10
|
||||
15136="foo<=>>bar": 10
|
||||
15136="foo<><<bar": 10
|
||||
15136="foo<><=bar": 10
|
||||
15136="foo<><>bar": 10
|
||||
15136="foo<>=<bar": 10
|
||||
15136="foo<>==bar": 10
|
||||
15136="foo<>=>bar": 10
|
||||
15136="foo<>><bar": 10
|
||||
15136="foo<>>=bar": 10
|
||||
15136="foo<>>>bar": 10
|
||||
15136="foo=<<<bar": 10
|
||||
15136="foo=<<=bar": 10
|
||||
15136="foo=<<>bar": 10
|
||||
15136="foo=<=<bar": 10
|
||||
15136="foo=<==bar": 10
|
||||
15136="foo=<=>bar": 10
|
||||
15136="foo=<><bar": 10
|
||||
15136="foo=<>=bar": 10
|
||||
15136="foo=<>>bar": 10
|
||||
15136="foo==<<bar": 10
|
||||
15136="foo==<=bar": 10
|
||||
15136="foo==<>bar": 10
|
||||
15136="foo===<bar": 10
|
||||
15136="foo====bar":
|
||||
15136="foo===>bar":
|
||||
15136="foo==><bar": 10
|
||||
15136="foo==>=bar":
|
||||
15136="foo==>>bar":
|
||||
15136="foo=><<bar": 10
|
||||
15136="foo=><=bar": 10
|
||||
15136="foo=><>bar": 10
|
||||
15136="foo=>=<bar": 10
|
||||
15136="foo=>==bar":
|
||||
15136="foo=>=>bar":
|
||||
15136="foo=>><bar": 10
|
||||
15136="foo=>>=bar":
|
||||
15136="foo=>>>bar":
|
||||
15136="foo><<<bar": 10
|
||||
15136="foo><<=bar": 10
|
||||
15136="foo><<>bar": 10
|
||||
15136="foo><=<bar": 10
|
||||
15136="foo><==bar": 10
|
||||
15136="foo><=>bar": 10
|
||||
15136="foo><><bar": 10
|
||||
15136="foo><>=bar": 10
|
||||
15136="foo><>>bar": 10
|
||||
15136="foo>=<<bar": 10
|
||||
15136="foo>=<=bar": 10
|
||||
15136="foo>=<>bar": 10
|
||||
15136="foo>==<bar": 10
|
||||
15136="foo>===bar":
|
||||
15136="foo>==>bar":
|
||||
15136="foo>=><bar": 10
|
||||
15136="foo>=>=bar":
|
||||
15136="foo>=>>bar":
|
||||
15136="foo>><<bar": 10
|
||||
15136="foo>><=bar": 10
|
||||
15136="foo>><>bar": 10
|
||||
15136="foo>>=<bar": 10
|
||||
15136="foo>>==bar":
|
||||
15136="foo>>=>bar":
|
||||
15136="foo>>><bar": 10
|
||||
15136="foo>>>=bar":
|
||||
15136="foo>>>>bar":
|
||||
15137="foo<<<bar": 9
|
||||
15137="foo<<=bar": 9
|
||||
15137="foo<<>bar": 9
|
||||
15137="foo<=<bar": 9
|
||||
15137="foo<==bar": 9
|
||||
15137="foo<=>bar": 9
|
||||
15137="foo<><bar": 9
|
||||
15137="foo<>=bar": 9
|
||||
15137="foo<>>bar": 9
|
||||
15137="foo=<<bar": 9
|
||||
15137="foo=<=bar": 9
|
||||
15137="foo=<>bar": 9
|
||||
15137="foo==<bar": 9
|
||||
15137="foo===bar":
|
||||
15137="foo==>bar":
|
||||
15137="foo=><bar": 9
|
||||
15137="foo=>=bar":
|
||||
15137="foo=>>bar":
|
||||
15137="foo><<bar": 9
|
||||
15137="foo><=bar": 9
|
||||
15137="foo><>bar": 9
|
||||
15137="foo>=<bar": 9
|
||||
15137="foo>==bar":
|
||||
15137="foo>=>bar":
|
||||
15137="foo>><bar": 9
|
||||
15137="foo>>=bar":
|
||||
15137="foo>>>bar":
|
||||
15137="foo<<<<bar": 10
|
||||
15137="foo<<<=bar": 10
|
||||
15137="foo<<<>bar": 10
|
||||
15137="foo<<=<bar": 10
|
||||
15137="foo<<==bar": 10
|
||||
15137="foo<<=>bar": 10
|
||||
15137="foo<<><bar": 10
|
||||
15137="foo<<>=bar": 10
|
||||
15137="foo<<>>bar": 10
|
||||
15137="foo<=<<bar": 10
|
||||
15137="foo<=<=bar": 10
|
||||
15137="foo<=<>bar": 10
|
||||
15137="foo<==<bar": 10
|
||||
15137="foo<===bar": 10
|
||||
15137="foo<==>bar": 10
|
||||
15137="foo<=><bar": 10
|
||||
15137="foo<=>=bar": 10
|
||||
15137="foo<=>>bar": 10
|
||||
15137="foo<><<bar": 10
|
||||
15137="foo<><=bar": 10
|
||||
15137="foo<><>bar": 10
|
||||
15137="foo<>=<bar": 10
|
||||
15137="foo<>==bar": 10
|
||||
15137="foo<>=>bar": 10
|
||||
15137="foo<>><bar": 10
|
||||
15137="foo<>>=bar": 10
|
||||
15137="foo<>>>bar": 10
|
||||
15137="foo=<<<bar": 10
|
||||
15137="foo=<<=bar": 10
|
||||
15137="foo=<<>bar": 10
|
||||
15137="foo=<=<bar": 10
|
||||
15137="foo=<==bar": 10
|
||||
15137="foo=<=>bar": 10
|
||||
15137="foo=<><bar": 10
|
||||
15137="foo=<>=bar": 10
|
||||
15137="foo=<>>bar": 10
|
||||
15137="foo==<<bar": 10
|
||||
15137="foo==<=bar": 10
|
||||
15137="foo==<>bar": 10
|
||||
15137="foo===<bar": 10
|
||||
15137="foo====bar":
|
||||
15137="foo===>bar":
|
||||
15137="foo==><bar": 10
|
||||
15137="foo==>=bar":
|
||||
15137="foo==>>bar":
|
||||
15137="foo=><<bar": 10
|
||||
15137="foo=><=bar": 10
|
||||
15137="foo=><>bar": 10
|
||||
15137="foo=>=<bar": 10
|
||||
15137="foo=>==bar":
|
||||
15137="foo=>=>bar":
|
||||
15137="foo=>><bar": 10
|
||||
15137="foo=>>=bar":
|
||||
15137="foo=>>>bar":
|
||||
15137="foo><<<bar": 10
|
||||
15137="foo><<=bar": 10
|
||||
15137="foo><<>bar": 10
|
||||
15137="foo><=<bar": 10
|
||||
15137="foo><==bar": 10
|
||||
15137="foo><=>bar": 10
|
||||
15137="foo><><bar": 10
|
||||
15137="foo><>=bar": 10
|
||||
15137="foo><>>bar": 10
|
||||
15137="foo>=<<bar": 10
|
||||
15137="foo>=<=bar": 10
|
||||
15137="foo>=<>bar": 10
|
||||
15137="foo>==<bar": 10
|
||||
15137="foo>===bar":
|
||||
15137="foo>==>bar":
|
||||
15137="foo>=><bar": 10
|
||||
15137="foo>=>=bar":
|
||||
15137="foo>=>>bar":
|
||||
15137="foo>><<bar": 10
|
||||
15137="foo>><=bar": 10
|
||||
15137="foo>><>bar": 10
|
||||
15137="foo>>=<bar": 10
|
||||
15137="foo>>==bar":
|
||||
15137="foo>>=>bar":
|
||||
15137="foo>>><bar": 10
|
||||
15137="foo>>>=bar":
|
||||
15137="foo>>>>bar":
|
||||
15138="fooaaabar":
|
||||
15138="fooaa bar":
|
||||
15138="fooa abar":
|
||||
15138="fooa bar":
|
||||
15138="foo aabar": 9
|
||||
15138="foo a bar": 9
|
||||
15138="foo abar": 9
|
||||
15138="foo bar": 9
|
||||
15139="fooaaabar":
|
||||
15139="fooaa bar": 9
|
||||
15139="fooa abar":
|
||||
15139="fooa bar": 9
|
||||
15139="foo aabar":
|
||||
15139="foo a bar": 9
|
||||
15139="foo abar":
|
||||
15139="foo bar": 9
|
||||
15140="foo<<<bar": 9
|
||||
15140="foo<<=bar": 9
|
||||
15140="foo<<>bar":
|
||||
15140="foo<=<bar": 9
|
||||
15140="foo<==bar": 9
|
||||
15140="foo<=>bar":
|
||||
15140="foo<><bar":
|
||||
15140="foo<>=bar":
|
||||
15140="foo<>>bar":
|
||||
15140="foo=<<bar": 9
|
||||
15140="foo=<=bar": 9
|
||||
15140="foo=<>bar":
|
||||
15140="foo==<bar": 9
|
||||
15140="foo===bar":
|
||||
15140="foo==>bar":
|
||||
15140="foo=><bar": 9
|
||||
15140="foo=>=bar":
|
||||
15140="foo=>>bar":
|
||||
15140="foo><<bar": 9
|
||||
15140="foo><=bar": 9
|
||||
15140="foo><>bar":
|
||||
15140="foo>=<bar": 9
|
||||
15140="foo>==bar":
|
||||
15140="foo>=>bar":
|
||||
15140="foo>><bar": 9
|
||||
15140="foo>>=bar":
|
||||
15140="foo>>>bar":
|
||||
15140="foo<<<<bar": 10
|
||||
15140="foo<<<=bar": 10
|
||||
15140="foo<<<>bar":
|
||||
15140="foo<<=<bar": 10
|
||||
15140="foo<<==bar": 10
|
||||
15140="foo<<=>bar":
|
||||
15140="foo<<><bar":
|
||||
15140="foo<<>=bar":
|
||||
15140="foo<<>>bar":
|
||||
15140="foo<=<<bar": 10
|
||||
15140="foo<=<=bar": 10
|
||||
15140="foo<=<>bar":
|
||||
15140="foo<==<bar": 10
|
||||
15140="foo<===bar": 10
|
||||
15140="foo<==>bar":
|
||||
15140="foo<=><bar":
|
||||
15140="foo<=>=bar":
|
||||
15140="foo<=>>bar":
|
||||
15140="foo<><<bar":
|
||||
15140="foo<><=bar":
|
||||
15140="foo<><>bar":
|
||||
15140="foo<>=<bar":
|
||||
15140="foo<>==bar":
|
||||
15140="foo<>=>bar":
|
||||
15140="foo<>><bar":
|
||||
15140="foo<>>=bar":
|
||||
15140="foo<>>>bar":
|
||||
15140="foo=<<<bar": 10
|
||||
15140="foo=<<=bar": 10
|
||||
15140="foo=<<>bar":
|
||||
15140="foo=<=<bar": 10
|
||||
15140="foo=<==bar": 10
|
||||
15140="foo=<=>bar":
|
||||
15140="foo=<><bar":
|
||||
15140="foo=<>=bar":
|
||||
15140="foo=<>>bar":
|
||||
15140="foo==<<bar": 10
|
||||
15140="foo==<=bar": 10
|
||||
15140="foo==<>bar":
|
||||
15140="foo===<bar": 10
|
||||
15140="foo====bar":
|
||||
15140="foo===>bar":
|
||||
15140="foo==><bar": 10
|
||||
15140="foo==>=bar":
|
||||
15140="foo==>>bar":
|
||||
15140="foo=><<bar": 10
|
||||
15140="foo=><=bar": 10
|
||||
15140="foo=><>bar":
|
||||
15140="foo=>=<bar": 10
|
||||
15140="foo=>==bar":
|
||||
15140="foo=>=>bar":
|
||||
15140="foo=>><bar": 10
|
||||
15140="foo=>>=bar":
|
||||
15140="foo=>>>bar":
|
||||
15140="foo><<<bar": 10
|
||||
15140="foo><<=bar": 10
|
||||
15140="foo><<>bar":
|
||||
15140="foo><=<bar": 10
|
||||
15140="foo><==bar": 10
|
||||
15140="foo><=>bar":
|
||||
15140="foo><><bar":
|
||||
15140="foo><>=bar":
|
||||
15140="foo><>>bar":
|
||||
15140="foo>=<<bar": 10
|
||||
15140="foo>=<=bar": 10
|
||||
15140="foo>=<>bar":
|
||||
15140="foo>==<bar": 10
|
||||
15140="foo>===bar":
|
||||
15140="foo>==>bar":
|
||||
15140="foo>=><bar": 10
|
||||
15140="foo>=>=bar":
|
||||
15140="foo>=>>bar":
|
||||
15140="foo>><<bar": 10
|
||||
15140="foo>><=bar": 10
|
||||
15140="foo>><>bar":
|
||||
15140="foo>>=<bar": 10
|
||||
15140="foo>>==bar":
|
||||
15140="foo>>=>bar":
|
||||
15140="foo>>><bar": 10
|
||||
15140="foo>>>=bar":
|
||||
15140="foo>>>>bar":
|
||||
15141="foo<<<bar":
|
||||
15141="foo<<=bar":
|
||||
15141="foo<<>bar":
|
||||
15141="foo<=<bar":
|
||||
15141="foo<==bar":
|
||||
15141="foo<=>bar":
|
||||
15141="foo<><bar":
|
||||
15141="foo<>=bar":
|
||||
15141="foo<>>bar":
|
||||
15141="foo=<<bar":
|
||||
15141="foo=<=bar":
|
||||
15141="foo=<>bar":
|
||||
15141="foo==<bar":
|
||||
15141="foo===bar":
|
||||
15141="foo==>bar": 9
|
||||
15141="foo=><bar": 9
|
||||
15141="foo=>=bar": 9
|
||||
15141="foo=>>bar": 9
|
||||
15141="foo><<bar": 9
|
||||
15141="foo><=bar": 9
|
||||
15141="foo><>bar":
|
||||
15141="foo>=<bar": 9
|
||||
15141="foo>==bar": 9
|
||||
15141="foo>=>bar": 9
|
||||
15141="foo>><bar": 9
|
||||
15141="foo>>=bar": 9
|
||||
15141="foo>>>bar": 9
|
||||
15141="foo<<<<bar":
|
||||
15141="foo<<<=bar":
|
||||
15141="foo<<<>bar":
|
||||
15141="foo<<=<bar":
|
||||
15141="foo<<==bar":
|
||||
15141="foo<<=>bar":
|
||||
15141="foo<<><bar":
|
||||
15141="foo<<>=bar":
|
||||
15141="foo<<>>bar":
|
||||
15141="foo<=<<bar":
|
||||
15141="foo<=<=bar":
|
||||
15141="foo<=<>bar":
|
||||
15141="foo<==<bar":
|
||||
15141="foo<===bar":
|
||||
15141="foo<==>bar":
|
||||
15141="foo<=><bar":
|
||||
15141="foo<=>=bar":
|
||||
15141="foo<=>>bar":
|
||||
15141="foo<><<bar":
|
||||
15141="foo<><=bar":
|
||||
15141="foo<><>bar":
|
||||
15141="foo<>=<bar":
|
||||
15141="foo<>==bar":
|
||||
15141="foo<>=>bar":
|
||||
15141="foo<>><bar":
|
||||
15141="foo<>>=bar":
|
||||
15141="foo<>>>bar":
|
||||
15141="foo=<<<bar":
|
||||
15141="foo=<<=bar":
|
||||
15141="foo=<<>bar":
|
||||
15141="foo=<=<bar":
|
||||
15141="foo=<==bar":
|
||||
15141="foo=<=>bar":
|
||||
15141="foo=<><bar":
|
||||
15141="foo=<>=bar":
|
||||
15141="foo=<>>bar":
|
||||
15141="foo==<<bar":
|
||||
15141="foo==<=bar":
|
||||
15141="foo==<>bar":
|
||||
15141="foo===<bar":
|
||||
15141="foo====bar":
|
||||
15141="foo===>bar": 10
|
||||
15141="foo==><bar": 10
|
||||
15141="foo==>=bar": 10
|
||||
15141="foo==>>bar": 10
|
||||
15141="foo=><<bar": 10
|
||||
15141="foo=><=bar": 10
|
||||
15141="foo=><>bar":
|
||||
15141="foo=>=<bar": 10
|
||||
15141="foo=>==bar": 10
|
||||
15141="foo=>=>bar": 10
|
||||
15141="foo=>><bar": 10
|
||||
15141="foo=>>=bar": 10
|
||||
15141="foo=>>>bar": 10
|
||||
15141="foo><<<bar": 10
|
||||
15141="foo><<=bar": 10
|
||||
15141="foo><<>bar":
|
||||
15141="foo><=<bar": 10
|
||||
15141="foo><==bar": 10
|
||||
15141="foo><=>bar":
|
||||
15141="foo><><bar":
|
||||
15141="foo><>=bar":
|
||||
15141="foo><>>bar":
|
||||
15141="foo>=<<bar": 10
|
||||
15141="foo>=<=bar": 10
|
||||
15141="foo>=<>bar":
|
||||
15141="foo>==<bar": 10
|
||||
15141="foo>===bar": 10
|
||||
15141="foo>==>bar": 10
|
||||
15141="foo>=><bar": 10
|
||||
15141="foo>=>=bar": 10
|
||||
15141="foo>=>>bar": 10
|
||||
15141="foo>><<bar": 10
|
||||
15141="foo>><=bar": 10
|
||||
15141="foo>><>bar":
|
||||
15141="foo>>=<bar": 10
|
||||
15141="foo>>==bar": 10
|
||||
15141="foo>>=>bar": 10
|
||||
15141="foo>>><bar": 10
|
||||
15141="foo>>>=bar": 10
|
||||
15141="foo>>>>bar": 10
|
||||
15142="foo<<<bar": 9
|
||||
15142="foo<<=bar":
|
||||
15142="foo<<>bar":
|
||||
15142="foo<=<bar":
|
||||
15142="foo<==bar":
|
||||
15142="foo<=>bar":
|
||||
15142="foo<><bar":
|
||||
15142="foo<>=bar":
|
||||
15142="foo<>>bar":
|
||||
15142="foo=<<bar": 9
|
||||
15142="foo=<=bar":
|
||||
15142="foo=<>bar":
|
||||
15142="foo==<bar":
|
||||
15142="foo===bar":
|
||||
15142="foo==>bar":
|
||||
15142="foo=><bar":
|
||||
15142="foo=>=bar":
|
||||
15142="foo=>>bar":
|
||||
15142="foo><<bar": 9
|
||||
15142="foo><=bar":
|
||||
15142="foo><>bar":
|
||||
15142="foo>=<bar": 9
|
||||
15142="foo>==bar":
|
||||
15142="foo>=>bar":
|
||||
15142="foo>><bar": 9
|
||||
15142="foo>>=bar": 9
|
||||
15142="foo>>>bar":
|
||||
15142="foo<<<<bar": 10
|
||||
15142="foo<<<=bar":
|
||||
15142="foo<<<>bar":
|
||||
15142="foo<<=<bar":
|
||||
15142="foo<<==bar":
|
||||
15142="foo<<=>bar":
|
||||
15142="foo<<><bar":
|
||||
15142="foo<<>=bar":
|
||||
15142="foo<<>>bar":
|
||||
15142="foo<=<<bar":
|
||||
15142="foo<=<=bar":
|
||||
15142="foo<=<>bar":
|
||||
15142="foo<==<bar":
|
||||
15142="foo<===bar":
|
||||
15142="foo<==>bar":
|
||||
15142="foo<=><bar":
|
||||
15142="foo<=>=bar":
|
||||
15142="foo<=>>bar":
|
||||
15142="foo<><<bar":
|
||||
15142="foo<><=bar":
|
||||
15142="foo<><>bar":
|
||||
15142="foo<>=<bar":
|
||||
15142="foo<>==bar":
|
||||
15142="foo<>=>bar":
|
||||
15142="foo<>><bar":
|
||||
15142="foo<>>=bar":
|
||||
15142="foo<>>>bar":
|
||||
15142="foo=<<<bar": 10
|
||||
15142="foo=<<=bar":
|
||||
15142="foo=<<>bar":
|
||||
15142="foo=<=<bar":
|
||||
15142="foo=<==bar":
|
||||
15142="foo=<=>bar":
|
||||
15142="foo=<><bar":
|
||||
15142="foo=<>=bar":
|
||||
15142="foo=<>>bar":
|
||||
15142="foo==<<bar":
|
||||
15142="foo==<=bar":
|
||||
15142="foo==<>bar":
|
||||
15142="foo===<bar":
|
||||
15142="foo====bar":
|
||||
15142="foo===>bar":
|
||||
15142="foo==><bar":
|
||||
15142="foo==>=bar":
|
||||
15142="foo==>>bar":
|
||||
15142="foo=><<bar":
|
||||
15142="foo=><=bar":
|
||||
15142="foo=><>bar":
|
||||
15142="foo=>=<bar":
|
||||
15142="foo=>==bar":
|
||||
15142="foo=>=>bar":
|
||||
15142="foo=>><bar":
|
||||
15142="foo=>>=bar":
|
||||
15142="foo=>>>bar":
|
||||
15142="foo><<<bar": 10
|
||||
15142="foo><<=bar":
|
||||
15142="foo><<>bar":
|
||||
15142="foo><=<bar":
|
||||
15142="foo><==bar":
|
||||
15142="foo><=>bar":
|
||||
15142="foo><><bar":
|
||||
15142="foo><>=bar":
|
||||
15142="foo><>>bar":
|
||||
15142="foo>=<<bar": 10
|
||||
15142="foo>=<=bar":
|
||||
15142="foo>=<>bar":
|
||||
15142="foo>==<bar":
|
||||
15142="foo>===bar":
|
||||
15142="foo>==>bar":
|
||||
15142="foo>=><bar":
|
||||
15142="foo>=>=bar":
|
||||
15142="foo>=>>bar":
|
||||
15142="foo>><<bar": 10
|
||||
15142="foo>><=bar":
|
||||
15142="foo>><>bar":
|
||||
15142="foo>>=<bar": 10
|
||||
15142="foo>>==bar":
|
||||
15142="foo>>=>bar":
|
||||
15142="foo>>><bar": 10
|
||||
15142="foo>>>=bar": 10
|
||||
15142="foo>>>>bar":
|
||||
15143="foo<<<bar":
|
||||
15143="foo<<=bar":
|
||||
15143="foo<<>bar":
|
||||
15143="foo<=<bar":
|
||||
15143="foo<==bar":
|
||||
15143="foo<=>bar":
|
||||
15143="foo<><bar":
|
||||
15143="foo<>=bar":
|
||||
15143="foo<>>bar":
|
||||
15143="foo=<<bar": 9
|
||||
15143="foo=<=bar":
|
||||
15143="foo=<>bar":
|
||||
15143="foo==<bar":
|
||||
15143="foo===bar":
|
||||
15143="foo==>bar":
|
||||
15143="foo=><bar":
|
||||
15143="foo=>=bar":
|
||||
15143="foo=>>bar":
|
||||
15143="foo><<bar": 9
|
||||
15143="foo><=bar":
|
||||
15143="foo><>bar":
|
||||
15143="foo>=<bar": 9
|
||||
15143="foo>==bar":
|
||||
15143="foo>=>bar":
|
||||
15143="foo>><bar": 9
|
||||
15143="foo>>=bar": 9
|
||||
15143="foo>>>bar": 9
|
||||
15143="foo<<<<bar":
|
||||
15143="foo<<<=bar":
|
||||
15143="foo<<<>bar":
|
||||
15143="foo<<=<bar":
|
||||
15143="foo<<==bar":
|
||||
15143="foo<<=>bar":
|
||||
15143="foo<<><bar":
|
||||
15143="foo<<>=bar":
|
||||
15143="foo<<>>bar":
|
||||
15143="foo<=<<bar":
|
||||
15143="foo<=<=bar":
|
||||
15143="foo<=<>bar":
|
||||
15143="foo<==<bar":
|
||||
15143="foo<===bar":
|
||||
15143="foo<==>bar":
|
||||
15143="foo<=><bar":
|
||||
15143="foo<=>=bar":
|
||||
15143="foo<=>>bar":
|
||||
15143="foo<><<bar":
|
||||
15143="foo<><=bar":
|
||||
15143="foo<><>bar":
|
||||
15143="foo<>=<bar":
|
||||
15143="foo<>==bar":
|
||||
15143="foo<>=>bar":
|
||||
15143="foo<>><bar":
|
||||
15143="foo<>>=bar":
|
||||
15143="foo<>>>bar":
|
||||
15143="foo=<<<bar": 10
|
||||
15143="foo=<<=bar":
|
||||
15143="foo=<<>bar":
|
||||
15143="foo=<=<bar":
|
||||
15143="foo=<==bar":
|
||||
15143="foo=<=>bar":
|
||||
15143="foo=<><bar":
|
||||
15143="foo=<>=bar":
|
||||
15143="foo=<>>bar":
|
||||
15143="foo==<<bar":
|
||||
15143="foo==<=bar":
|
||||
15143="foo==<>bar":
|
||||
15143="foo===<bar":
|
||||
15143="foo====bar":
|
||||
15143="foo===>bar":
|
||||
15143="foo==><bar":
|
||||
15143="foo==>=bar":
|
||||
15143="foo==>>bar":
|
||||
15143="foo=><<bar":
|
||||
15143="foo=><=bar":
|
||||
15143="foo=><>bar":
|
||||
15143="foo=>=<bar":
|
||||
15143="foo=>==bar":
|
||||
15143="foo=>=>bar":
|
||||
15143="foo=>><bar":
|
||||
15143="foo=>>=bar":
|
||||
15143="foo=>>>bar":
|
||||
15143="foo><<<bar": 10
|
||||
15143="foo><<=bar":
|
||||
15143="foo><<>bar":
|
||||
15143="foo><=<bar":
|
||||
15143="foo><==bar":
|
||||
15143="foo><=>bar":
|
||||
15143="foo><><bar":
|
||||
15143="foo><>=bar":
|
||||
15143="foo><>>bar":
|
||||
15143="foo>=<<bar": 10
|
||||
15143="foo>=<=bar":
|
||||
15143="foo>=<>bar":
|
||||
15143="foo>==<bar":
|
||||
15143="foo>===bar":
|
||||
15143="foo>==>bar":
|
||||
15143="foo>=><bar":
|
||||
15143="foo>=>=bar":
|
||||
15143="foo>=>>bar":
|
||||
15143="foo>><<bar": 10
|
||||
15143="foo>><=bar":
|
||||
15143="foo>><>bar":
|
||||
15143="foo>>=<bar": 10
|
||||
15143="foo>>==bar":
|
||||
15143="foo>>=>bar":
|
||||
15143="foo>>><bar": 10
|
||||
15143="foo>>>=bar": 10
|
||||
15143="foo>>>>bar": 10
|
||||
15144="______________________________________________________________________________________________AA_AAAA_______________________________________________________________________________________AA_AAAA": 101,195
|
||||
15144="______________________________________________________________________________________________AA_AAAA_______________________________________________________________________________________AA_AAAA_______________________________": 101,195
|
||||
15145="abc___a__a_____": 15
|
||||
15145="abc__a__a_____": 14
|
||||
15145="abc_foo_a__a___a_": 17
|
||||
15145="abcaaaaaaaaaaaaaaaaaaaaaaaaaaa": 14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
|
4107
tools/hscollider/test_cases/corpora/ucp.txt
Normal file
4107
tools/hscollider/test_cases/corpora/ucp.txt
Normal file
File diff suppressed because it is too large
Load Diff
649
tools/hscollider/test_cases/corpora/utf8.txt
Normal file
649
tools/hscollider/test_cases/corpora/utf8.txt
Normal file
File diff suppressed because one or more lines are too long
153
tools/hscollider/test_cases/corpora/vacuous.txt
Normal file
153
tools/hscollider/test_cases/corpora/vacuous.txt
Normal file
@@ -0,0 +1,153 @@
|
||||
22000="": 0
|
||||
22000="foo": 0,1,2,3
|
||||
22001="": 0
|
||||
22001="foo": 0,1,2,3
|
||||
22002="": 0
|
||||
22002="aaaaaaaaaaaaaaaaa": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
|
||||
22003="": 0
|
||||
22003="foo": 0,1,2,3
|
||||
22004="": 0
|
||||
22004="foo": 0,1,2,3
|
||||
22005="": 0
|
||||
22005="aaaaaaaaaaaaaaaaa": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
|
||||
22006="": 0
|
||||
22006="foo": 0,1,2,3
|
||||
22006="foofoo": 0,1,2,3,4,5,6
|
||||
22006="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
||||
22007="": 0
|
||||
22007="foo": 0,1,2,3
|
||||
22007="foofoo": 0,1,2,3,4,5,6
|
||||
22007="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
||||
22008="": 0
|
||||
22008="foo": 0,1,2,3
|
||||
22008="foofoo": 0,1,2,3,4,5,6
|
||||
22008="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
||||
22009="": 0
|
||||
22009="foo": 0,1,2,3
|
||||
22009="foofoo": 0,1,2,3,4,5,6
|
||||
22009="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
||||
22010="": 0
|
||||
22010="foo": 0,1,2,3
|
||||
22011="": 0
|
||||
22011="foo": 0,1
|
||||
22012="": 0
|
||||
22012="aaaaaaaaaaaaaaaaa": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
|
||||
22013="": 0
|
||||
22013="foo": 0,1,2,3
|
||||
22014="": 0
|
||||
22014="foo": 0,1
|
||||
22015="": 0
|
||||
22015="aaaaaaaaaaaaaaaaa": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
|
||||
22016="": 0
|
||||
22016="foo": 0,3
|
||||
22016="foofoo": 0,3
|
||||
22016="foofoofoofoofoofoo": 0,3
|
||||
22017="": 0
|
||||
22017="foo": 0,1,3
|
||||
22017="foofoo": 0,1,3
|
||||
22017="foofoofoofoofoofoo": 0,1,3
|
||||
22018="": 0
|
||||
22018="foo": 0,1,2,3
|
||||
22018="foofoo": 0,1,2,3,4,5,6
|
||||
22018="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
|
||||
22019="": 0
|
||||
22019="foo": 0,1,2,3
|
||||
22019="foofoo": 0,1,2,3,4,5,6
|
||||
22019="foofoofoofoofoofoo": 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
|
||||
22020="": 0
|
||||
22020="a":
|
||||
22020="aaaa":
|
||||
22021="": 0
|
||||
22021="a":
|
||||
22021="aaaa":
|
||||
22022="": 0
|
||||
22022="\n": 0,1
|
||||
22022="foo\n": 3,4
|
||||
22022="foo": 3
|
||||
22023="": 0
|
||||
22023="\n": 1
|
||||
22023="foo\n": 3,4
|
||||
22023="foo": 3
|
||||
22024="": 0
|
||||
22024="\n": 0,1
|
||||
22024="a": 0,1
|
||||
22024="a\n": 0,1,2
|
||||
22025="": 0
|
||||
22025="\n": 0,1
|
||||
22025="a": 0,1
|
||||
22025="a\n": 0,1,2
|
||||
22026="": 0
|
||||
22026="a": 0,1
|
||||
22026="\n": 0,1
|
||||
22026="a\n": 0,2
|
||||
22027="": 0
|
||||
22027="a": 0,1
|
||||
22027="aa": 0,1
|
||||
22027="a\na": 0,1,2,3
|
||||
22027="foo\na": 0,4,5
|
||||
22027="foo\nfooa": 0,4
|
||||
22027="\n": 0
|
||||
22027="\na": 0,1,2
|
||||
22028="": 0
|
||||
22028="\n": 0
|
||||
22028="\na": 0
|
||||
22028="\n\n": 0,1
|
||||
22028="\na\n": 0
|
||||
22028="\n\n\n": 0,1,2
|
||||
22028="\n\n\n\n\n\n\n\n\n\n": 0,1,2,3,4,5,6,7,8,9
|
||||
22029="":
|
||||
22029="a": 1
|
||||
22029="aa": 1,2
|
||||
22029="aaa": 1,2,3
|
||||
22029="aaaa": 1,2,3,4
|
||||
22029="aaaaa": 1,2,3,4,5
|
||||
22029="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122
|
||||
22030="": 0
|
||||
22030="\n": 0
|
||||
22030="\n\n": 0,1
|
||||
22030="foo": 0
|
||||
22030="foo\n": 0
|
||||
22031="": 0
|
||||
22031="\n": 0,1
|
||||
22031="\n\n": 0,1,2
|
||||
22031="foo": 3
|
||||
22031="foo\n": 3,4
|
||||
22032="": 0
|
||||
22032="\n": 1
|
||||
22032="\n\n": 2
|
||||
22032="foo": 3
|
||||
22032="foo\n": 4
|
||||
22033="": 0
|
||||
22033="\n": 0,1
|
||||
22033="\n\n": 1,2
|
||||
22033="foo": 3
|
||||
22033="foo\n": 3,4
|
||||
22034="": 0
|
||||
22034="\n":
|
||||
22034="\n\n":
|
||||
22034="foo":
|
||||
22034="foo\n":
|
||||
22035="":
|
||||
22035="\n": 1
|
||||
22035="a": 1
|
||||
22035="\na": 1,2
|
||||
22035="a\n": 1
|
||||
22035="foo\n": 1
|
||||
22035="foo\na": 1,5
|
||||
22035="foo\n\n": 1,5
|
||||
22036="": 0
|
||||
22036="\n": 0,1
|
||||
22036="a": 0,1
|
||||
22036="a\n": 0,1
|
||||
22036="\na": 0,1,2
|
||||
22036="foo": 0,1
|
||||
22036="foo\n": 0,1
|
||||
22036="foo\na": 0,1,4,5
|
||||
22036="foo\n\n": 0,1,4,5
|
||||
22037="": 0
|
||||
22037="foo": 3
|
||||
22037="foo\n": 3,4
|
||||
22037="a\nfoo\n": 1,5,6
|
||||
22037="a\nfoo\nfoo": 1,5,9
|
||||
22037="a\nfoo\nfooa": 1,5,9,10
|
||||
22038:a
|
3
tools/hscollider/test_cases/pcre/accel.txt
Normal file
3
tools/hscollider/test_cases/pcre/accel.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
2000:/abcdef[^X].*[^X](A|B(CDE)?F)Y?foobar/s
|
||||
2001:/[^abab]+\Z/si
|
||||
2002:/mj(?:[pajl]|o)[tplh]thd.hq.b[frt]pk(\b)hb/i8L
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user