From 126803b3dd464e1fdaae3ffbaf391c0f5fbe44fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 10 Sep 2021 09:07:38 +0200 Subject: [PATCH 1/8] parser.py: tune printing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make printing a bit closer to markdown, with header line, wider separations between columns and capitalized header fields. Signed-off-by: Vincent Stehlé --- parser.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/parser.py b/parser.py index dc2da20..60d7724 100755 --- a/parser.py +++ b/parser.py @@ -504,26 +504,29 @@ def gen_template(cross_check, filename): def do_print(cross_check, fields): logging.debug(f'Print (fields: {fields})') - # First pass to find the width for each field except the last one - fm1 = fields[:len(fields) - 1] + # First pass to find the width for each field w = {} - for f in fm1: + for f in fields: w[f] = len(f) for x in cross_check: - for f in fm1: + for f in fields: w[f] = max(w[f], len(str(x[f]) if f in x else '')) # Second pass where we print + fm1 = fields[:len(fields) - 1] lf = fields[len(fields) - 1] + sep = ' ' + + print(sep.join([ + *map(lambda f: f"{f.capitalize():{w[f]}}", fm1), + lf.capitalize()])) - print(' '.join([ - *map(lambda f: f"{f:{w[f]}}", fm1), - lf])) + print(sep.join([*map(lambda f: '-' * w[f], fields)])) for x in cross_check: - print(' '.join([ + print(sep.join([ *map(lambda f: f"{x[f] if f in x else '':{w[f]}}", fm1), x[lf] if lf in x else ''])) -- GitLab From ef2397f464f0f642e977102f4c763707f0363bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Wed, 15 Sep 2021 18:46:00 +0200 Subject: [PATCH 2/8] parser.py: identify the sequence file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We add a database of the sequence files we know about with their sha256, and we try to identify the input sequence file among those. A `--seq-db' option is added to allow specifying the database. Update documentation accordingly. While at it, fix spacing. Signed-off-by: Vincent Stehlé --- README.md | 22 +++++++++++++++++++--- parser.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ seq.db | 7 +++++++ 3 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 seq.db diff --git a/README.md b/README.md index 3fe3115..f1db797 100644 --- a/README.md +++ b/README.md @@ -265,13 +265,29 @@ override the result of some tests with the following ones: filesystem implementation limitations and they do not prevent an OS to boot. - `KNOWN ACS LIMITATION` Genuine bugs, which are fixed in a more recent version - of the ACS or which must ultimately be fixed and which - we know about. + `KNOWN ACS LIMITATION` Genuine bugs, which are fixed in a more recent + version of the ACS or which must ultimately be fixed + and which we know about. ------------------------------------------------------------------------------- Some of the rules just add a `comments` field with some help text. +### Database of sequence files + +The `seq.db` file contains a list of known sequence files, which allows to +identify the input sequence file. + +This database file contains lines describing each known sequence file in turn, +in the following format: + +``` +sha256 description +``` + +Everything appearing after a '#' sign is treated as a comment and ignored. + +The database filename can be specified with the `--seq-db` option. + ## Notes ### Known Issues: * "comment" is currently not implemented, as formatting is not currently consistent, should reflect the comments from the test. diff --git a/parser.py b/parser.py index 60d7724..4c8dba8 100755 --- a/parser.py +++ b/parser.py @@ -8,6 +8,8 @@ import csv import logging import json import re +import hashlib +import os try: from packaging import version @@ -600,6 +602,50 @@ def combine_dbs(db1, db2): return cross_check +# Load the database of known sequence files. +def load_known_seq(seq_db): + known_seqs = {} + + with open(seq_db, 'r') as f: + for line in f: + line = line.rstrip() + line = re.sub(r'#.*', '', line) + m = re.match(r'\s*([0-9a-fA-F]+)\s+(.*)', line) + + if not m: + continue + + kh = m.group(1) + d = m.group(2) + assert(kh not in known_seqs) + logging.debug(f'{kh} {d}') + known_seqs[kh] = d + + logging.debug(f'{len(known_seqs)} known seq file(s)') + return known_seqs + + +# Try to identify the .seq file in a list of known versions using its sha256. +def ident_seq(seq_file, seq_db): + known_seqs = load_known_seq(seq_db) + + # Hash seq file + hm = 'sha256' + hl = hashlib.new(hm) + + with open(seq_file, 'rb') as f: + hl.update(f.read()) + + h = hl.hexdigest() + logging.debug(f'{hm} {h} {seq_file}') + + # Try to identify the seq file + if h in known_seqs: + logging.info(f"""Identified `{seq_file}' as "{known_seqs[h]}".""") + else: + logging.debug(f"Could not identify `{seq_file}'...") + + # Read the .ekl log file and the .seq file and combine them into a single # database, which we return. def read_log_and_seq(log_file, seq_file): @@ -717,6 +763,8 @@ def read_md(input_md): if __name__ == '__main__': + me = os.path.realpath(__file__) + here = os.path.dirname(me) parser = argparse.ArgumentParser( description='Process SCT results.' ' This program takes the SCT summary and sequence files,' @@ -743,6 +791,9 @@ if __name__ == '__main__': parser.add_argument( '--print', action='store_true', help='Print results to stdout') parser.add_argument('--input-md', help='Input .md filename') + parser.add_argument( + '--seq-db', help='Known sequence files database filename', + default=f'{here}/seq.db') parser.add_argument('log_file', help='Input .ekl filename') parser.add_argument('seq_file', help='Input .seq filename') parser.add_argument('find_key', nargs='?', help='Search key') @@ -768,6 +819,10 @@ if __name__ == '__main__': else: # Command line argument 1 is the ekl file to open. # Command line argument 2 is the seq file to open. + + # Try to identify the sequence file + ident_seq(args.seq_file, args.seq_db) + # Read both and combine them into a single cross_check database. cross_check = read_log_and_seq(args.log_file, args.seq_file) diff --git a/seq.db b/seq.db new file mode 100644 index 0000000..1a1fe90 --- /dev/null +++ b/seq.db @@ -0,0 +1,7 @@ +# List of known sequence files and their sha256 +6a381192057c511b2b69282c58d6107c1daeaf0b95038605d4c58383eb5cc88b Test sample.seq +6ae5a92f0b83b3a1469c89f6a02b0771ae3818a424e7118a28bba053be394078 Supplied SBBR.seq +6b83dbfbd1f07fc61a918297f02f449591a72131b64ac746f969a4210f97aee8 ACS-IR v21.05_0.8_BETA-0 EBBR.seq +c06684b3f8b35871e37b9447f609f9aab6070a7ca1c4ba63a52e029c018c9b73 ACS-IR v21.07_0.9_BETA EBBR.seq +ec730fd81eada415278b39533fe7cc21147b39183447dc11fa77ad4419d13969 Supplied EBBR.seq +f7793d53c10106c1c275a4992e1710ce9863e210dd07581a3d783c4f4cf2312b ACS-IR v21.07_0.9_BETA EBBR_manual.seq -- GitLab From e522d3a05b37b29b4e20c2fd943eb045557fad55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Wed, 15 Sep 2021 21:05:03 +0200 Subject: [PATCH 3/8] parser.py: use EBBR.yaml by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Triaging results when testing for EBBR compliance is the main use case of the parser; let's make it the default. Signed-off-by: Vincent Stehlé --- README.md | 28 ++++++++++++++-------------- parser.py | 3 ++- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f1db797..ccc4159 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,15 @@ If you're using this tool to analyze EBBR test results, use the following command. The parsed report can be found in `result.md`. ``` {.sh} -$ ./parser.py --config EBBR.yaml \ - \ +$ ./parser.py \ + \ contrib/v21.07_0.9_BETA/EBBR.seq INFO apply_rules: Updated 200 test(s) out of 12206 after applying 124 rule(s) INFO main: 0 dropped(s), 1 failure(s), 93 ignored(s), 106 known u-boot limitation(s), 12006 pass(s), 0 warning(s) ``` +(The `EBBR.yaml' configuration file is used to process results by default.) + ## Usage Usage to generate a `result.md` is such: @@ -165,18 +167,15 @@ $ ./parser.py --input-md 'result.md' ... ## Configuration file -It is possible to use a configuration file with command line option `--config -`. -This configuration file describes operations to perform on the tests results, +By default, the `EBBR.yaml' configuration file is used to process results. It is +intended to help triaging failures when testing specifically for [EBBR] +compliance. It describes operations to perform on the tests results, such as marking tests as false positives or waiving failures. +It is possible to specify another configuration file with the command line +option `--config `. -Example command for [EBBR]: - -``` {.sh} -$ ./parser.py --config EBBR.yaml /path/to/Summary.ekl EBBR.seq ... -``` - -You need to install the [PyYAML] module for this to work. +You need to install the [PyYAML] module for the configuration file to be loaded +correctly. [EBBR]: https://github.com/ARM-software/ebbr [PyYAML]: https://github.com/yaml/pyyaml @@ -250,8 +249,9 @@ This generated configuration can then be further edited manually. ### EBBR configuration -The `EBBR.yaml` file is a configuration file meant for [EBBR] testing. It can -override the result of some tests with the following ones: +The `EBBR.yaml` file is the configuration file used by default. It is meant for +[EBBR] testing and can override the result of some tests with the following +ones: ------------------------------------------------------------------------------- Result Description diff --git a/parser.py b/parser.py index 4c8dba8..c80b746 100755 --- a/parser.py +++ b/parser.py @@ -803,7 +803,8 @@ if __name__ == '__main__': # could actually import yaml. if 'yaml' in sys.modules: parser.add_argument( - '--config', help='Input .yaml configuration filename') + '--config', help='Input .yaml configuration filename', + default=f'{here}/EBBR.yaml') parser.add_argument('--yaml', help='Output .yaml filename') parser.add_argument( '--template', help='Output .yaml config template filename') -- GitLab From 3bb0f460f7627d8143cb3a80b2bb8af3840fe784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 17 Sep 2021 09:20:32 +0200 Subject: [PATCH 4/8] EBBR.yaml: add comments when ethernet cable unplugged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some simple network failures happen when the ethernet cable is unplugged. Add comments in that case, to help debugging. Signed-off-by: Vincent Stehlé --- EBBR.yaml | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/EBBR.yaml b/EBBR.yaml index e72ee54..8f268ca 100644 --- a/EBBR.yaml +++ b/EBBR.yaml @@ -2339,3 +2339,67 @@ comments: Check logs for messages such as "No EFI system partition" or "Failed to persist EFI variables" and check that system has an EFI System Partition + +- rule: Add comments to failure due to ethernet cable unplugged + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: EA3773EA-0E0F-45A3-82A0-64D485A10B52 + log: Status - Not Ready + name: EFI_SIMPLE_NETWORK_PROTOCOL.Transmit - Invoke Transmit() with + HeaderSize is nonzero and not equal to MediaHeaderSize. + result: FAILURE + revision: '0x00010001' + set guid: 5DDF5C49-7ACA-4724-9553-614A53EE998A + sub set: Transmit_Conf + test set: SimpleNetworkProtocolTest + update: + comments: Check if ethernet cable is unplugged + +- rule: Add comments to failure (2) due to ethernet cable unplugged + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: DE544DE1-178E-4B5F-97D7-19119B1B7B18 + log: Status - Not Ready + name: EFI_SIMPLE_NETWORK_PROTOCOL.Transmit - Invoke Transmit() with + BufferSize is less than MediaHeaderSize. + result: FAILURE + revision: '0x00010001' + set guid: 5DDF5C49-7ACA-4724-9553-614A53EE998A + sub set: Transmit_Conf + test set: SimpleNetworkProtocolTest + update: + comments: Check if ethernet cable is unplugged + +- rule: Add comments to failure (3) due to ethernet cable unplugged + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: A449842C-F5F8-47E9-987B-4B6141AEBD45 + log: Status - Not Ready + name: EFI_SIMPLE_NETWORK_PROTOCOL.Transmit - Invoke Transmit() with + HeaderSize is nonzero and DestAddr is NULL. + result: FAILURE + revision: '0x00010001' + set guid: 5DDF5C49-7ACA-4724-9553-614A53EE998A + sub set: Transmit_Conf + test set: SimpleNetworkProtocolTest + update: + comments: Check if ethernet cable is unplugged + +- rule: Add comments to failure (4) due to ethernet cable unplugged + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: 2E3DD087-DD0C-426E-85BA-65E58310B1DE + log: Status - Not Ready + name: EFI_SIMPLE_NETWORK_PROTOCOL.Transmit - Invoke Transmit() with + HeaderSize is nonzero and Protocol is NULL. + result: FAILURE + revision: '0x00010001' + set guid: 5DDF5C49-7ACA-4724-9553-614A53EE998A + sub set: Transmit_Conf + test set: SimpleNetworkProtocolTest + update: + comments: Check if ethernet cable is unplugged -- GitLab From 7ea00bcb99f493daeb2075993679dc22b044e6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 17 Sep 2021 09:20:20 +0200 Subject: [PATCH 5/8] EBBR.yaml: ignore false-positive network failures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore a couple of network failures, which happen with edk2. Network functions are allowed to return "unsupported" as EBBR does not require a full implementation of the UEFI general purpose networking ABIs. Signed-off-by: Vincent Stehlé --- EBBR.yaml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/EBBR.yaml b/EBBR.yaml index 8f268ca..1f43780 100644 --- a/EBBR.yaml +++ b/EBBR.yaml @@ -1214,6 +1214,42 @@ update: result: IGNORED +- rule: Force false-positive simple network protocol failure as ignored. + A full implementation of the UEFI general purpose networking ABIs is not + required (EBBR Table 2.4 Notable Deviations from UEFI § 2.6.2) + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: 6880BD92-7004-41B8-9E43-7B271FD9AC2B + log: Status - Unsupported + name: EFI_SIMPLE_NETWORK_PROTOCOL.MCastIpToMac - Invoke MCastIpToMac() when + network interface not start. + result: FAILURE + revision: '0x00010001' + set guid: D924B177-7E44-445D-92AA-5E15C0FD2E27 + sub set: MCastIpToMac_Conf + test set: SimpleNetworkProtocolTest + update: + result: IGNORED + +- rule: Force false-positive simple network protocol failure (2) as ignored. + A full implementation of the UEFI general purpose networking ABIs is not + required (EBBR Table 2.4 Notable Deviations from UEFI § 2.6.2) + criteria: + descr: Simple Network Protocol Test + group: NetworkSupportTest + guid: 544B08C0-1D26-4462-9207-DD7EB754DC9E + log: Status - Unsupported, MAC address - 000000000000 + name: EFI_SIMPLE_NETWORK_PROTOCOL.MCastIpToMac - Invoke MCastIpToMac() and + verify interface correctness within test case + result: FAILURE + revision: '0x00010001' + set guid: 3DE1C94C-4CBB-47C4-9407-0C0F20FA66E7 + sub set: MCastIpToMac_Func + test set: SimpleNetworkProtocolTest + update: + result: IGNORED + # We force the following dropped or skipped tests result as `IGNORED' because # they are run only when some platform features are present, which are not # mandated by EBBR. -- GitLab From d083dea14b3a3b7d12cb8a69ead48fa5c850085d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 17 Sep 2021 09:32:34 +0200 Subject: [PATCH 6/8] README.md: add comments example command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Give an example command, to quickly see the help comments added by some rules to help debugging. Signed-off-by: Vincent Stehlé --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index ccc4159..4721e92 100644 --- a/README.md +++ b/README.md @@ -272,6 +272,14 @@ ones: Some of the rules just add a `comments` field with some help text. +Example command to see those comments: + +``` {.sh} +$ ./parser.py \ + --filter "x['result'] == 'FAILURE'" \ + --fields 'count,result,name,comments' --uniq --print ... +``` + ### Database of sequence files The `seq.db` file contains a list of known sequence files, which allows to -- GitLab From e29ab7346b9748e92b34317cceff36770883a31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 17 Sep 2021 15:32:07 +0200 Subject: [PATCH 7/8] parser.py: clearer dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make our dependencies a bit clearer in the documentation and in the warning messages we print from the parser. Signed-off-by: Vincent Stehlé --- README.md | 32 ++++++++++++++++++++++++++------ parser.py | 6 ++++-- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4721e92..ac91598 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,24 @@ It will proceed to generate a Markdown file listing number of failures, passes, [UEFI SCT]: https://uefi.org/testtools +## Dependencies + +You need to install the [PyYAML] module for the configuration file to be loaded +correctly. Depending on your Linux distribution, this might be available as the +`python3-yaml` package. +It is also recommended to install the [packaging] library for smooth version +detection. Depending on your Linux distribution, this might be available as the +`python3-packaging` package. +See [Configuration file]. + +If you want to generate the pdf version of this documentation or convert +markdown results to HTML, you need to install [pandoc]. See [Usage] and +[Documentation]. + +[PyYAML]: https://github.com/yaml/pyyaml +[packaging]: https://github.com/pypa/packaging +[pandoc]: https://pandoc.org + ## Quick Start If you're using this tool to analyze EBBR test results, use the following @@ -40,12 +58,14 @@ $ ./parser.py --md out.md ... An online help is available with the `-h` option. -The generated `result md` can be easily converted to HTML using `pandoc` with: +The generated `result md` can be easily converted to HTML using [pandoc] with: ``` {.sh} $ pandoc -oresult.html result.md ``` +See [Dependencies]. + ### Custom search For a custom Key:value search, the next two arguments *MUST be included together.* The program will search and display files that met that constraint, without the crosscheck, and display the names, guid, and key:value to the command line. `python3 parser.py ` @@ -167,7 +187,7 @@ $ ./parser.py --input-md 'result.md' ... ## Configuration file -By default, the `EBBR.yaml' configuration file is used to process results. It is +By default, the `EBBR.yaml` configuration file is used to process results. It is intended to help triaging failures when testing specifically for [EBBR] compliance. It describes operations to perform on the tests results, such as marking tests as false positives or waiving failures. @@ -175,10 +195,10 @@ It is possible to specify another configuration file with the command line option `--config `. You need to install the [PyYAML] module for the configuration file to be loaded -correctly. +correctly, and installing the [packaging] library is recommended. See +[Dependencies]. [EBBR]: https://github.com/ARM-software/ebbr -[PyYAML]: https://github.com/yaml/pyyaml ### Configuration file format @@ -305,8 +325,8 @@ The database filename can be specified with the `--seq-db` option. ### Documentation -It is possible to convert this `README.md` into `README.pdf` with pandoc using -`make doc`. See `make help`. +It is possible to convert this `README.md` into `README.pdf` with [pandoc] using +`make doc`. See `make help` and [Dependencies]. ### Sanity checks diff --git a/parser.py b/parser.py index c80b746..b1b153e 100755 --- a/parser.py +++ b/parser.py @@ -14,12 +14,14 @@ import os try: from packaging import version except ImportError: - print('No packaging...') + print('No packaging. You should install python3-packaging...') try: import yaml except ImportError: - print('No yaml...') + print( + 'No yaml. You should install PyYAML/python3-yaml for configuration' + ' file support...') if 'yaml' in sys.modules: try: -- GitLab From d3f4d84c7b766779a2253b671e8312a81e5b7ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Stehl=C3=A9?= Date: Fri, 17 Sep 2021 16:02:42 +0200 Subject: [PATCH 8/8] Add ACS-IR v1.0 sequence files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that ACS-IR v1.0 is out, add its sequence files to the `contrib' folder as well as to the `seq.db' database for identification. Signed-off-by: Vincent Stehlé --- README.md | 3 +++ contrib/v21.09_1.0/EBBR.seq | Bin 0 -> 172338 bytes contrib/v21.09_1.0/EBBR_manual.seq | Bin 0 -> 176800 bytes seq.db | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 contrib/v21.09_1.0/EBBR.seq create mode 100755 contrib/v21.09_1.0/EBBR_manual.seq diff --git a/README.md b/README.md index ac91598..87630a5 100644 --- a/README.md +++ b/README.md @@ -428,7 +428,10 @@ convenience: `v21.05_0.8_BETA-0/` EBBR sequence file from [ACS-IR v21.05_0.8_BETA-0]. `v21.07_0.9_BETA/` EBBR sequence files from [ACS-IR v21.07_0.9_BETA]. + + `v21.09_1.0` EBBR sequence files from [ACS-IR v21.09_1.0]. ------------------------------------------------------------------------------- [ACS-IR v21.05_0.8_BETA-0]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images/v21.05_0.8_BETA-0 [ACS-IR v21.07_0.9_BETA]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images/v21.07_0.9_BETA +[ACS-IR v21.09_1.0]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images/v21.09_1.0 diff --git a/contrib/v21.09_1.0/EBBR.seq b/contrib/v21.09_1.0/EBBR.seq new file mode 100755 index 0000000000000000000000000000000000000000..9b531d9d9e494944a065958c578a1eea9cbaebf2 GIT binary patch literal 172338 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 literal 0 HcmV?d00001 diff --git a/contrib/v21.09_1.0/EBBR_manual.seq b/contrib/v21.09_1.0/EBBR_manual.seq new file mode 100755 index 0000000000000000000000000000000000000000..243314f8cfc0183f6d1cdec4e6ae232f0b9a1518 GIT binary patch literal 176800 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 literal 0 HcmV?d00001 diff --git a/seq.db b/seq.db index 1a1fe90..6c072cc 100644 --- a/seq.db +++ b/seq.db @@ -3,5 +3,6 @@ 6ae5a92f0b83b3a1469c89f6a02b0771ae3818a424e7118a28bba053be394078 Supplied SBBR.seq 6b83dbfbd1f07fc61a918297f02f449591a72131b64ac746f969a4210f97aee8 ACS-IR v21.05_0.8_BETA-0 EBBR.seq c06684b3f8b35871e37b9447f609f9aab6070a7ca1c4ba63a52e029c018c9b73 ACS-IR v21.07_0.9_BETA EBBR.seq +d66485b5e436409ef8c0667baf5250e784cbf292f2b9ef1b3893d474a0585fae ACS-IR v21.09_1.0 EBBR.seq ec730fd81eada415278b39533fe7cc21147b39183447dc11fa77ad4419d13969 Supplied EBBR.seq -f7793d53c10106c1c275a4992e1710ce9863e210dd07581a3d783c4f4cf2312b ACS-IR v21.07_0.9_BETA EBBR_manual.seq +f7793d53c10106c1c275a4992e1710ce9863e210dd07581a3d783c4f4cf2312b ACS-IR v21.07_0.9_BETA or v21.09_1.0 EBBR_manual.seq -- GitLab