Skip to content
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

Update germline reference parameters #328

Merged
merged 4 commits into from
Apr 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

- `--skip_lineage_trees` is now deprecated in favor of `--lineage_trees`. Lineage trees are skipped by default.
- `--igphyml` parameter is deprecated in favor of `--lineage_tree_exec`. All lineage tree building software part of Dowser are now supported.
- `--igblast_base` is deprecated in favor of `--reference_igblast`.
- `--imgtdb_base` is depracated in favor of `--reference_fasta`.

## [3.3.0] - 2024-03-31 Confringo

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ nf-core/airrflow allows the end-to-end processing of BCR and TCR bulk and single

2. V(D)J annotation and filtering (bulk and single-cell)

- Assign gene segments with `IgBlast` using the IMGT database (`Change-O AssignGenes`).
- Assign gene segments with `IgBlast` using a germline reference (`Change-O AssignGenes`).
- Annotate alignments in AIRR format (`Change-O MakeDB`)
- Filter by alignment quality (locus matching v_call chain, min 200 informative positions, max 10% N nucleotides)
- Filter productive sequences (`Change-O ParseDB split`)
Expand Down
4 changes: 2 additions & 2 deletions conf/test.config
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ params {
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/Metadata_test_airr.tsv'
cprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/C_primers.fasta'
vprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/V_primers.fasta'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

mode = 'fastq'

Expand Down
4 changes: 2 additions & 2 deletions conf/test_assembled_hs.config
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ params {
// Input data
mode = 'assembled'
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-reveal/test_assembled_metadata_hs.tsv'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

reassign = true
productive_only = true
Expand Down
4 changes: 2 additions & 2 deletions conf/test_assembled_immcantation_devel_hs.config
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ params {
// Input data
mode = 'assembled'
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-reveal/test_assembled_metadata_hs.tsv'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

reassign = true
productive_only = true
Expand Down
4 changes: 2 additions & 2 deletions conf/test_assembled_immcantation_devel_mm.config
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ params {
// Input data
mode = 'assembled'
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-reveal/test_assembled_metadata_mm.tsv'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

reassign = true
productive_only = true
Expand Down
4 changes: 2 additions & 2 deletions conf/test_assembled_mm.config
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ params {
// Input data
mode = 'assembled'
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-reveal/test_assembled_metadata_mm.tsv'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

reassign = true
productive_only = true
Expand Down
4 changes: 2 additions & 2 deletions conf/test_clontech_umi.config
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ params {
// Input data
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-clontech/samplesheet.tsv'

imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

clonal_threshold = 0.1

Expand Down
7 changes: 3 additions & 4 deletions conf/test_full.config
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ params {
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/metadata_pcr_umi_airr_300.tsv'
cprimers = 's3://ngi-igenomes/test-data/airrflow/pcr_umi/cprimers.fasta'
vprimers = 's3://ngi-igenomes/test-data/airrflow/pcr_umi/vprimers.fasta'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

lineage_trees = true

Expand All @@ -29,7 +29,6 @@ params {
umi_length = 15
umi_start = 0
umi_position = 'R1'

isotype_column = 'c_primer'
}

Expand All @@ -43,7 +42,7 @@ process {
withName:DEFINE_CLONES_COMPUTE{
ext.args = ['outname':'', 'model':'hierarchical',
'method':'nt', 'linkage':'single',
'min_n':30, 'isotype_column':'c_primer']
'min_n':30]

}
withName:DEFINE_CLONES_REPORT{
Expand Down
4 changes: 2 additions & 2 deletions conf/test_nebnext_umi.config
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ params {
// Input data
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-neb/samplesheet.tsv'

imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

clonal_threshold = 0.1

Expand Down
4 changes: 2 additions & 2 deletions conf/test_no_umi.config
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ params {
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-no-umi/Metadata_test-no-umi_airr.tsv'
cprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-no-umi/Greiff2014_CPrimers.fasta'
vprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-no-umi/Greiff2014_VPrimers.fasta'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'


}
Expand Down
4 changes: 2 additions & 2 deletions conf/test_nocluster.config
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ params {
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/Metadata_test_airr.tsv'
cprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/C_primers.fasta'
vprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/V_primers.fasta'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

mode = 'fastq'

Expand Down
4 changes: 2 additions & 2 deletions conf/test_raw_immcantation_devel.config
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ params {
cprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/C_primers.fasta'
vprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-bcr/V_primers.fasta'

imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

mode = 'fastq'

Expand Down
4 changes: 2 additions & 2 deletions conf/test_tcr.config
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ params {
input = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-tcr/TCR_metadata_airr.tsv'
cprimers = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-tcr/cprimers.fasta'
race_linker = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/testdata-tcr/linker.fasta'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'

}

Expand Down
4 changes: 2 additions & 2 deletions docs/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ generate a `.fasta` file from the rearrangement table.

</details>

Assign genes with Igblast, using the IMGT database is performed by the [AssignGenes](https://changeo.readthedocs.io/en/stable/examples/igblast.html#running-igblast) command of the Change-O tool from the Immcantation Framework.
Assign genes with Igblast, using the a germline reference is performed by the [AssignGenes](https://changeo.readthedocs.io/en/stable/examples/igblast.html#running-igblast) command of the Change-O tool from the Immcantation Framework.

### Make database from assigned genes

Expand Down Expand Up @@ -482,7 +482,7 @@ Parsing the logs from the previous processes. Summary of the number of sequences

Copy of the downloaded IMGT database by the process `fetch_databases`, used for the gene assignment step.

If databases are provided with `--imgtdb_base` and `--igblast_base` this folder will not be present.
If databases are provided with `--reference_fasta` and `--reference_igblast` this folder will not be present.

## MultiQC

Expand Down
4 changes: 2 additions & 2 deletions modules/local/changeo/changeo_creategermlines.nf
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ process CHANGEO_CREATEGERMLINES {

input:
tuple val(meta), path(tab) // sequence tsv table in AIRR format
path(imgt_base) // imgt db
path(reference_fasta) // reference fasta

output:
tuple val(meta), path("*germ-pass.tsv"), emit: tab
Expand All @@ -22,7 +22,7 @@ process CHANGEO_CREATEGERMLINES {
def args = task.ext.args ?: ''
"""
CreateGermlines.py -d ${tab} \\
-r ${imgt_base}/${meta.species}/vdj/ \\
-r ${reference_fasta}/${meta.species}/vdj/ \\
-g dmask --format airr \\
--log ${meta.id}.log --outname ${meta.id} $args > ${meta.id}_create-germlines_command_log.txt
ParseLog.py -l ${meta.id}.log -f ID V_CALL D_CALL J_CALL
Expand Down
5 changes: 2 additions & 3 deletions modules/local/changeo/changeo_makedb.nf
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,13 @@ process CHANGEO_MAKEDB {

conda "bioconda::changeo=1.3.0 bioconda::igblast=1.22.0 conda-forge::wget=1.20.1"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
//TODO: update mulled containers when available
'https://depot.galaxyproject.org/singularity/mulled-v2-7d8e418eb73acc6a80daea8e111c94cf19a4ecfd:a9ee25632c9b10bbb012da76e6eb539acca8f9cd-1' :
'biocontainers/mulled-v2-7d8e418eb73acc6a80daea8e111c94cf19a4ecfd:a9ee25632c9b10bbb012da76e6eb539acca8f9cd-1' }"

input:
tuple val(meta), path(reads) // reads in fasta format
path(igblast) // igblast fasta from ch_igblast_db_for_process_igblast.mix(ch_igblast_db_for_process_igblast_mix).collect()
path(imgt_base)
path(reference_fasta)

output:
tuple val(meta), path("*db-pass.tsv"), emit: tab //sequence table in AIRR format
Expand All @@ -24,7 +23,7 @@ process CHANGEO_MAKEDB {
def args = task.ext.args ?: ''
"""
MakeDb.py igblast -i $igblast -s $reads -r \\
${imgt_base}/${meta.species.toLowerCase()}/vdj/ \\
${reference_fasta}/${meta.species.toLowerCase()}/vdj/ \\
$args \\
--outname ${meta.id} > ${meta.id}_makedb_command_log.txt

Expand Down
4 changes: 2 additions & 2 deletions modules/local/enchantr/define_clones.nf
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ process DEFINE_CLONES {
input:
tuple val(meta), path(tabs) // meta, sequence tsv in AIRR format
val threshold
path imgt_base
path reference_fasta
path repertoires_samplesheet

output:
Expand All @@ -53,7 +53,7 @@ process DEFINE_CLONES {
"""
Rscript -e "enchantr::enchantr_report('define_clones', \\
report_params=list('input'='${input}', \\
'imgt_db'='${imgt_base}', \\
'imgt_db'='${reference_fasta}', \\
'species'='auto', \\
'cloneby'='${params.cloneby}', \\
'outputby'='${params.cloneby}', \\
Expand Down
2 changes: 1 addition & 1 deletion modules/local/enchantr/remove_chimeric.nf
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ process REMOVE_CHIMERIC {

input:
tuple val(meta), path(tab) // sequence tsv in AIRR format
path(imgt_base)
path(reference_fasta)

output:
tuple val(meta), path("*chimera-pass.tsv"), emit: tab // sequence tsv in AIRR format
Expand Down
2 changes: 1 addition & 1 deletion modules/local/fetch_databases.nf
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ process FETCH_DATABASES {

output:
path("igblast_base"), emit: igblast
path("imgtdb_base"), emit: imgt
path("imgtdb_base"), emit: reference_fasta
path "versions.yml" , emit: versions
path("igblast_base/database/imgt_human_ig_v.ndb"), emit: igblast_human_ig_v
path("igblast_base/database/imgt_human_ig_d.ndb"), emit: igblast_human_ig_d
Expand Down
4 changes: 2 additions & 2 deletions nextflow.config
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ params {
// -----------------------
productive_only = true
reassign = true
igblast_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
imgtdb_base = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
reference_igblast = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/igblast_base.zip'
reference_fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/airrflow/database-cache/imgtdb_base.zip'
fetch_imgt = false
save_databases = true
isotype_column = 'c_call'
Expand Down
10 changes: 5 additions & 5 deletions nextflow_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -338,16 +338,16 @@
"description": "Save databases so you can use the cache in future runs.",
"fa_icon": "fas fa-file-download"
},
"imgtdb_base": {
"reference_fasta": {
"type": "string",
"description": "Path to the cached IMGT database.",
"help_text": "By default, we provide a pre-downloaded version of the IMGT database. It is also possible to provide a custom IMGT reference database. To fetch a fresh version of IMGT, set the `--fetch_imgt` parameter instead.",
"description": "Path to the germline reference fasta.",
"help_text": "By default, we provide a pre-downloaded version of the IMGT database. It is also possible to provide a custom reference fasta database. To fetch a fresh version of IMGT, set the `--fetch_imgt` parameter instead.",
"fa_icon": "fas fa-database"
},
"igblast_base": {
"reference_igblast": {
"type": "string",
"description": "Path to the cached igblast database.",
"help_text": "By default, we provide a pre-downloaded version of the IMGT database. It is also possible to provide a custom IMGT reference database. To fetch a fresh version of IMGT, set the `--fetch_imgt` parameter instead.",
"help_text": "By default, we provide a pre-downloaded version of the IMGT database. It is also possible to provide a custom reference fasta database. To fetch a fresh version of IMGT, set the `--fetch_imgt` parameter instead.",
"fa_icon": "fas fa-database"
},
"fetch_imgt": {
Expand Down
6 changes: 3 additions & 3 deletions subworkflows/local/bulk_qc_and_filter.nf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ workflow BULK_QC_AND_FILTER {

take:
ch_repertoire // tuple [meta, repertoire_tab]
ch_imgt
ch_reference_fasta

main:

Expand All @@ -20,15 +20,15 @@ workflow BULK_QC_AND_FILTER {
// Create germlines (not --cloned)
CHANGEO_CREATEGERMLINES(
ch_repertoire,
ch_imgt.collect()
ch_reference_fasta.collect()
)
ch_logs = ch_logs.mix(CHANGEO_CREATEGERMLINES.out.logs)
ch_versions = ch_versions.mix(CHANGEO_CREATEGERMLINES.out.versions)

// Remove chimera
REMOVE_CHIMERIC(
CHANGEO_CREATEGERMLINES.out.tab,
ch_imgt.collect()
ch_reference_fasta.collect()
)
ch_logs = ch_logs.mix(REMOVE_CHIMERIC.out.logs)
ch_versions = ch_versions.mix(REMOVE_CHIMERIC.out.versions)
Expand Down
6 changes: 3 additions & 3 deletions subworkflows/local/clonal_analysis.nf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include { DOWSER_LINEAGES } from '../../modules/local/enchantr/dowser_lineages'
workflow CLONAL_ANALYSIS {
take:
ch_repertoire
ch_imgt
ch_reference_fasta
ch_logo

main:
Expand Down Expand Up @@ -76,7 +76,7 @@ workflow CLONAL_ANALYSIS {
DEFINE_CLONES_COMPUTE(
ch_define_clones,
clone_threshold.collect(),
ch_imgt.collect(),
ch_reference_fasta.collect(),
[]
)

Expand All @@ -102,7 +102,7 @@ workflow CLONAL_ANALYSIS {
DEFINE_CLONES_REPORT(
ch_all_repertoires_cloned,
clone_threshold.collect(),
ch_imgt.collect(),
ch_reference_fasta.collect(),
ch_all_repertoires_cloned_samplesheet
)
ch_versions = DEFINE_CLONES_REPORT.out.versions
Expand Down
Loading
Loading