-
Notifications
You must be signed in to change notification settings - Fork 489
New tool addition: KneadData #7498
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 4 commits
972c7fd
9d626bc
93dd153
d765919
ec2560d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,15 @@ | ||||||
| name: kneaddata | ||||||
| owner: iuc | ||||||
| type: unrestricted | ||||||
| description: Quality control and contaminant removal for metagenomic data | ||||||
| long_description: > | ||||||
| KneadData is a tool designed to perform quality control on | ||||||
| metagenomic and metatranscriptomic sequencing data, especially | ||||||
| data from microbiome experiments. It performs adapter trimming, | ||||||
| quality filtering, and removal of host contamination using | ||||||
| Bowtie2/TRIMMOMATIC/TRF. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| homepage_url: https://github.com/biobakery/kneaddata | ||||||
| remote_repository_url: https://github.com/galaxyproject/tools-iuc/tree/master/tools/kneaddata | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| categories: | ||||||
| - Metagenomics | ||||||
| - Statistics | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,272 @@ | ||||||||||
| <tool id="kneaddata" name="KneadData" version="0.12.1+galaxy0" python_template_version="3.5" profile="21.05"> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Please introduce the above tokens in the macros.xml file |
||||||||||
| <description>Quality control and contaminant removal for metagenomic data</description> | ||||||||||
| <requirements> | ||||||||||
| <requirement type="package" version="0.12.3">kneaddata</requirement> | ||||||||||
| <requirement type="package" version="0.40">trimmomatic</requirement> | ||||||||||
| <requirement type="package" version="2.5.4">bowtie2</requirement> | ||||||||||
| <requirement type="package" version="4.09.1">trf</requirement> | ||||||||||
| <requirement type="package" version="0.12.1">fastqc</requirement> | ||||||||||
| </requirements> | ||||||||||
|
Comment on lines
+3
to
+9
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This can go in macros.xml. Wondering if these dependencies are already part of Kneaddata or does one explicitly need them? |
||||||||||
| <command detect_errors="exit_code"><![CDATA[ | ||||||||||
| kneaddata | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| #if $read_type.select_read_type == "s" | ||||||||||
| --unpaired "$read_type.single_read" | ||||||||||
| #else | ||||||||||
| -i1 "$read_type.forward_read" | ||||||||||
| -i2 "$read_type.backward_read" | ||||||||||
| #end if | ||||||||||
| -o "output_dir" | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| #if "$output_prefix" | ||||||||||
| --output-prefix "$output_prefix" | ||||||||||
| #end if | ||||||||||
|
Comment on lines
+19
to
+21
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would be in favor of removing this parameter |
||||||||||
| --threads "$number_threads" | ||||||||||
| --processes "$number_processes" | ||||||||||
|
Comment on lines
+22
to
+23
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| --quality-scores "$quality_scores" | ||||||||||
| #if $trimmomatic.trimmomatic_options.select_option == "c" | ||||||||||
| --trimmomatic-options "$trimmomatic.trimmomatic_options.custom_settings" | ||||||||||
| #end if | ||||||||||
| #if $trimmomatic.max_memory | ||||||||||
| --max-memory "$trimmomatic.max_memory" | ||||||||||
| #end if | ||||||||||
|
Comment on lines
+28
to
+30
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| #if $trimmomatic.sequencer | ||||||||||
| --sequencer-source "$trimmomatic.sequencer" | ||||||||||
| #end if | ||||||||||
| #if $trf_step.trf_bool == "include" | ||||||||||
| --mismatch "$trf.mismatch" | ||||||||||
| --delta "$trf.indel" | ||||||||||
| --minscore "$trf.minimum_score" | ||||||||||
| --maxperiod "$trf.maximum_period" | ||||||||||
| #else | ||||||||||
| --bypass-trf | ||||||||||
| #end if | ||||||||||
| $trim_repetitive | ||||||||||
| #if $trim_repetitive | ||||||||||
| --fastqc "fastqc" | ||||||||||
| #end if | ||||||||||
|
|
||||||||||
|
|
||||||||||
| ]]></command> | ||||||||||
|
|
||||||||||
| <inputs> | ||||||||||
|
|
||||||||||
| <conditional name="read_type"> | ||||||||||
| <param name="select_read_type" type="select" label="Read type"> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. perhaps adding a |
||||||||||
| <option value="s">Single read</option> | ||||||||||
| <option value="p">Paired reads</option> | ||||||||||
|
Comment on lines
+54
to
+55
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <when value="s"> | ||||||||||
| <param name="single_read" type="data" format="fastq" label="Single Read"/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Does it also support fastq.gz? |
||||||||||
| </when> | ||||||||||
| <when value="p"> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| <param name="forward_read" type="data" format="fastq" label="Forward read"/> | ||||||||||
| <param name="backward_read" type="data" format="fastq" label="Reversed read" /> | ||||||||||
| </when> | ||||||||||
| </conditional> | ||||||||||
|
|
||||||||||
| <param name="trim_repetitive" type="boolean" truevalue="--run-trim-repetitive" falsevalue="" label="Trim repetitive/overrepresented sequences generated by FASTQC reports"/> | ||||||||||
|
|
||||||||||
| <param name="output_prefix" type="text" label="Custom prefix for all output files" help="Leave empty to keep the input file name."/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
|
||||||||||
| <param name="number_threads" type="integer" value="1" label="Number of threads"/> | ||||||||||
|
|
||||||||||
| <param name="number_processes" type="integer" value="1" label="Number of processes"/> | ||||||||||
|
Comment on lines
+71
to
+73
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This is not required |
||||||||||
|
|
||||||||||
| <param name="quality_scores" type="select" label="Select quality score"> | ||||||||||
| <option value="phred33" selected="true" >phred33</option> | ||||||||||
| <option value="phred64">phred64</option> | ||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <section name="trimmomatic" title="Trimmomatic arguments" > | ||||||||||
|
|
||||||||||
| <param name="max_memory" type="text" value="500m" label="Maximum memory for Trimmomatic"/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
|
||||||||||
| <conditional name="trimmomatic_options"> | ||||||||||
| <param name="select_option" type="select" label="Trimmomatic settings"> | ||||||||||
| <option value="d">Default settings</option> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Better names for option values? |
||||||||||
| <option value="c">Customize settings</option> | ||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <when value="c"> | ||||||||||
| <param name="custom_settings" type="text" label="Custom Trimmomatic options" help="Manually specifying additional arguments will completely override the defaults."/> | ||||||||||
|
Comment on lines
+90
to
+91
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Better value names? |
||||||||||
| </when> | ||||||||||
| <when value="d"> | ||||||||||
| </when> | ||||||||||
|
|
||||||||||
| </conditional> | ||||||||||
|
|
||||||||||
| <param name="sequencer" type="select" label="Available sequencers"> | ||||||||||
| <option value="NexteraPE" selected="true">NexteraPE</option> | ||||||||||
| <option value="TruSeq2">TruSeq2</option> | ||||||||||
| <option value="TruSeq3">TruSeq3</option> | ||||||||||
| </param> | ||||||||||
| </section> | ||||||||||
|
|
||||||||||
|
|
||||||||||
| <conditional name="trf_step"> | ||||||||||
| <param name="trf_bool" type="select" label="Tandem Repeat Finder"> | ||||||||||
| <option value="include">Include TRF in KneadData Workflow</option> | ||||||||||
| <option value="skip">Skip TRF</option> | ||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <when value="include"> | ||||||||||
|
|
||||||||||
| <section name="trf" title="TRF (Tandem Repeats Finder) arguments" > | ||||||||||
|
|
||||||||||
| <param name="mismatch" type="select" label="Mismatch penalty"> | ||||||||||
| <option value="3">3 (more permissive)</option> | ||||||||||
| <option value="5">5</option> | ||||||||||
| <option value="7" selected="true">7 (less permissive)</option> | ||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <param name="indel" type="select" label="Indel penalty (delta)"> | ||||||||||
| <option value="3">3 (more permissive)</option> | ||||||||||
| <option value="5">5</option> | ||||||||||
| <option value="7" selected="true">7 (less permissive)</option> | ||||||||||
| </param> | ||||||||||
|
|
||||||||||
| <param name="minimum_score" type="integer" value="50" label="Minimum alignment score to report"/> | ||||||||||
| <param name="maximum_period" type="integer" value="500" min="1" max="2000" label="Maximum period size to report"/> | ||||||||||
|
|
||||||||||
| </section> | ||||||||||
| </when> | ||||||||||
| <when value="skip"> | ||||||||||
|
|
||||||||||
| </when> | ||||||||||
|
Comment on lines
+133
to
+135
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| </conditional> | ||||||||||
|
|
||||||||||
| </inputs> | ||||||||||
| <outputs> | ||||||||||
| <data name="single_output" format="fastq" from_work_dir="output_dir/.repeats.removed.fastq" label="KneadData single end results (with TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "s" and trf_step["trf_bool"] == "include"</filter> | ||||||||||
| </data> | ||||||||||
| <data name="single_output_trimmed" format="fastq" from_work_dir="output_dir/.trimmed.fastq" label="KneadData single end results (without TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "s" and trf_step["trf_bool"] == "skip"</filter> | ||||||||||
| </data> | ||||||||||
|
|
||||||||||
| <data name="paired_forward" format="fastq" from_work_dir="output_dir/.repeats.removed.1.fastq" label="KneadData paired end forward reads (with TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "p" and trf_step["trf_bool"] == "include"</filter> | ||||||||||
| </data> | ||||||||||
| <data name="paired_forward_trimmed" format="fastq" from_work_dir="output_dir/.trimmed.1.fastq" label="KneadData paired end forward reads (without TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "p" and trf_step["trf_bool"] == "skip"</filter> | ||||||||||
| </data> | ||||||||||
|
|
||||||||||
| <data name="paired_backward" format="fastq" from_work_dir="output_dir/.repeats.removed.2.fastq" label="KneadData paired end reverse reads (with TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "p" and trf_step["trf_bool"] == "include"</filter> | ||||||||||
| </data> | ||||||||||
| <data name="paired_backward_trimmed" format="fastq" from_work_dir="output_dir/.trimmed.2.fastq" label="KneadData paired end reverse reads (without TRF)"> | ||||||||||
| <filter>read_type["select_read_type"] == "p" and trf_step["trf_bool"] == "skip"</filter> | ||||||||||
| </data> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Change |
||||||||||
| </outputs> | ||||||||||
| <tests> | ||||||||||
| <test expect_num_outputs="1"> | ||||||||||
| <param name="number_threads" value="1"/> | ||||||||||
| <param name="number_processes" value="1"/> | ||||||||||
|
Comment on lines
+163
to
+164
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| <param name="quality_scores" value="phred33"/> | ||||||||||
| <section name="trimmomatic"> | ||||||||||
| <param name="max_memory" value="500m"/> | ||||||||||
| <param name="sequencer" value="NexteraPE"/> | ||||||||||
| <section name="trimmomatic_options"> | ||||||||||
| <param name="select_option" value="d"/> | ||||||||||
| </section> | ||||||||||
| </section> | ||||||||||
| <section name="read_type"> | ||||||||||
| <param name="select_read_type" value="s"/> | ||||||||||
| <param name="single_read" value="28C.single.fastq"/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| </section> | ||||||||||
| <output name="single_output" file="single_output.fastq"/> | ||||||||||
| </test> | ||||||||||
| <test expect_num_outputs="2"> | ||||||||||
| <param name="number_threads" value="2"/> | ||||||||||
| <param name="number_processes" value="2"/> | ||||||||||
| <param name="quality_scores" value="phred33"/> | ||||||||||
| <section name="trimmomatic"> | ||||||||||
| <param name="max_memory" value="500m"/> | ||||||||||
| <param name="sequencer" value="NexteraPE"/> | ||||||||||
| <section name="trimmomatic_options"> | ||||||||||
| <param name="select_option" value="d"/> | ||||||||||
| </section> | ||||||||||
| </section> | ||||||||||
| <section name="read_type"> | ||||||||||
| <param name="select_read_type" value="p"/> | ||||||||||
| <param name="forward_read" value="28C.R1.fastq"/> | ||||||||||
| <param name="backward_read" value="28C.R2.fastq"/> | ||||||||||
| </section> | ||||||||||
| <output name="paired_forward" file="paired_forward.fastq"/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| <output name="paired_backward" file="paired_backward.fastq"/> | ||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| </test> | ||||||||||
| </tests> | ||||||||||
|
|
||||||||||
| <help><![CDATA[ | ||||||||||
| usage: kneaddata [-h] [--version] [-v] [-i1 INPUT1] [-i2 INPUT2] | ||||||||||
| [-un UNPAIRED] -o OUTPUT_DIR | ||||||||||
| [-db REFERENCE_DB] [--bypass-trim] [--run-trim-repetitive] | ||||||||||
| [--output-prefix OUTPUT_PREFIX] [-t <1>] [-p <1>] | ||||||||||
| [-q {phred33,phred64}] [--run-bmtagger] | ||||||||||
| [--run-fastqc-start] [--run-fastqc-end] [--store-temp-output] | ||||||||||
| [--cat-final-output] | ||||||||||
| [--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--log LOG] | ||||||||||
| [--trimmomatic TRIMMOMATIC_PATH] [--max-memory MAX_MEMORY] | ||||||||||
| [--trimmomatic-options TRIMMOMATIC_OPTIONS] | ||||||||||
| [--bowtie2 BOWTIE2_PATH] [--bowtie2-options BOWTIE2_OPTIONS] | ||||||||||
| [--bmtagger BMTAGGER_PATH] [--trf TRF_PATH] [--match MATCH] | ||||||||||
| [--mismatch MISMATCH] [--delta DELTA] [--pm PM] [--pi PI] | ||||||||||
| [--minscore MINSCORE] [--maxperiod MAXPERIOD] | ||||||||||
| [--fastqc FASTQC_PATH] | ||||||||||
|
|
||||||||||
| KneadData | ||||||||||
|
|
||||||||||
| options: | ||||||||||
|
|
||||||||||
|
|
||||||||||
| -h, --help show this help message and exit | ||||||||||
| -v, --verbose additional output is printed | ||||||||||
| --version show program's version number and exit | ||||||||||
| -i INPUT, --input INPUT input FASTQ file (add a second argument instance to run with paired input files) | ||||||||||
| -o OUTPUT_DIR, --output OUTPUT_DIR directory to write output files | ||||||||||
| --db REFERENCE_DB, --reference-db REFERENCE_DB location of reference database | ||||||||||
| --run-trim-repetitive Option to trim repetitive/overrepresented sequences generated by FASTQC reports | ||||||||||
| --bypass-trim bypass the trim step | ||||||||||
| --output-prefix OUTPUT_PREFIX prefix for all output files [ DEFAULT : $SAMPLE_kneaddata ] | ||||||||||
| -t <1>, --threads <1> number of threads [ Default : 1 ] | ||||||||||
| -p <1>, --processes <1> number of processes [ Default : 1 ] | ||||||||||
| -q <quality>, --quality-scores <quality> quality scores [phred33|phred64] [DEFAULT: phred33] | ||||||||||
| --run-bmtagger run BMTagger instead of Bowtie2 to identify contaminant reads | ||||||||||
| --bypass-trf option to bypass the removal of tandem repeats | ||||||||||
| --run-fastqc-start run fastqc at the beginning of the workflow | ||||||||||
| --run-fastqc-end run fastqc at the end of the workflow | ||||||||||
| --store-temp-output store temp output files [ DEFAULT : temp output files are removed ] | ||||||||||
| --cat-final-output concatenate all final output files [ DEFAULT : final output is not concatenated ] | ||||||||||
| --log-level <DEBUG|INFO|WARNING|ERROR|CRITICAL> level of log messages [DEFAULT: DEBUG] | ||||||||||
| --log LOG log file [ DEFAULT : $OUTPUT_DIR/$SAMPLE_kneaddata.log ] | ||||||||||
| --trimmomatic TRIMMOMATIC_PATH path to trimmomatic [ DEFAULT : $PATH ] | ||||||||||
| --max-memory MAX_MEMORY max amount of memory [ DEFAULT : 500m ] | ||||||||||
| --trimmomatic-options TRIMMOMATIC_OPTIONS options for trimmomatic [ DEFAULT : SLIDINGWINDOW:4:20 MINLEN:50 ] | ||||||||||
| MINLEN is set to 50 percent of total input read length. The user can alternatively specify a length (in bases) for MINLEN. | ||||||||||
| --sequencer-source options for sequencer-source [ DEFAULT: NexteraPE] Available sequencers: ["NexteraPE","TruSeq2","TruSeq3"] | ||||||||||
| --bowtie2 BOWTIE2_PATH path to bowtie2 [ DEFAULT : $PATH ] | ||||||||||
| --bowtie2-options BOWTIE2_OPTIONS options for bowtie2 [ DEFAULT : --very-sensitive ] | ||||||||||
| --bmtagger BMTAGGER_PATH path to BMTagger [ DEFAULT : $PATH ] | ||||||||||
| --bypass-trf bypass the TRF step | ||||||||||
| --trf TRF_PATH path to TRF [ DEFAULT : $PATH ] | ||||||||||
| --mismatch MISMATCH mismatching penalty [ DEFAULT : 7 ] | ||||||||||
| --delta DELTA indel penalty [ DEFAULT : 7 ] | ||||||||||
| --pm PM match probability [ DEFAULT : 80 ] | ||||||||||
| --pi PI indel probability [ DEFAULT : 10 ] | ||||||||||
| --minscore MINSCORE minimum alignment score to report [ DEFAULT : 50 ] | ||||||||||
| --maxperiod MAXPERIOD maximum period size to report [ DEFAULT : 500 ] | ||||||||||
| --fastqc FASTQC_PATH path to fastqc [ DEFAULT : $PATH ] | ||||||||||
|
|
||||||||||
|
Comment on lines
+201
to
+259
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A better help could be what is KneadData tool, what does it do, what inputs it requires, what outputs it gives out etc. Perhaps explanation of a few important parameters |
||||||||||
| ]]></help> | ||||||||||
| <citations> | ||||||||||
| <citation type="bibtex"> | ||||||||||
| @software{kneaddata, | ||||||||||
| title = {KneadData}, | ||||||||||
| author = {Harvard School of Public Health}, | ||||||||||
| year = {2015}, | ||||||||||
| url = {https://github.com/biobakery/kneaddata}, | ||||||||||
| license = {MIT}, | ||||||||||
| note = {Quality control and contaminant removal tool for metagenomic sequencing data} | ||||||||||
| }</citation> | ||||||||||
| </citations> | ||||||||||
| </tool> | ||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| @test1 | ||
| ACGTACGT | ||
| + | ||
| IIIIIIII |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| @test1 | ||
| TGCTAGCT | ||
| + | ||
| IIIIIIII |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| @test1 | ||
| ACGTACGT | ||
| + | ||
| IIIIIIII | ||
| @test2 | ||
| TGCTAGCT | ||
| + | ||
| IIIIIIII |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.