From 94fed0cfce5a60248bf359ab9ba9746a29a6135d Mon Sep 17 00:00:00 2001 From: Alexander Boldakov Date: Wed, 15 Jul 2026 15:22:37 +0000 Subject: [PATCH] feat(genomic-intelligence-nim): add hosted DNA-sequence skill Add a nim-skills/ skill wrapping Genomic Intelligence's hosted DNA language models over the /v1/tasks/{task}/predict contract: promoter, splice, enhancer, chromatin, expression, and annotation. Bearer-authed via GI_API_KEY; ships a requests-only runner (sync + async), references, demo FASTAs, and evals. Context: #5. Signed-off-by: Alexander Boldakov --- nim-skills/genomic-intelligence-nim/SKILL.md | 186 +++++++ .../assets/demo/annotation_tp53.fa | 241 +++++++++ .../demo/chromatin_active_promoter_chr19.fa | 502 ++++++++++++++++++ .../assets/demo/enhancer_eve.fa | 168 ++++++ .../assets/demo/expression_hbb_k562.fa | 116 ++++ .../assets/demo/promoter_tp53.fa | 431 +++++++++++++++ .../assets/demo/splice_hbb.fa | 67 +++ .../genomic-intelligence-nim/evals/evals.json | 84 +++ .../evals/trigger_evals.json | 20 + .../references/api.md | 65 +++ .../references/authentication.md | 44 ++ .../references/errors.md | 59 ++ .../references/sequence-acquisition.md | 82 +++ .../references/tasks.md | 81 +++ .../scripts/gi_client.py | 206 +++++++ .../scripts/gi_ensembl.py | 246 +++++++++ .../scripts/gi_fetch.py | 111 ++++ .../scripts/gi_predict.py | 423 +++++++++++++++ 18 files changed, 3132 insertions(+) create mode 100644 nim-skills/genomic-intelligence-nim/SKILL.md create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/annotation_tp53.fa create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/chromatin_active_promoter_chr19.fa create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/enhancer_eve.fa create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/expression_hbb_k562.fa create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/promoter_tp53.fa create mode 100644 nim-skills/genomic-intelligence-nim/assets/demo/splice_hbb.fa create mode 100644 nim-skills/genomic-intelligence-nim/evals/evals.json create mode 100644 nim-skills/genomic-intelligence-nim/evals/trigger_evals.json create mode 100644 nim-skills/genomic-intelligence-nim/references/api.md create mode 100644 nim-skills/genomic-intelligence-nim/references/authentication.md create mode 100644 nim-skills/genomic-intelligence-nim/references/errors.md create mode 100644 nim-skills/genomic-intelligence-nim/references/sequence-acquisition.md create mode 100644 nim-skills/genomic-intelligence-nim/references/tasks.md create mode 100644 nim-skills/genomic-intelligence-nim/scripts/gi_client.py create mode 100644 nim-skills/genomic-intelligence-nim/scripts/gi_ensembl.py create mode 100644 nim-skills/genomic-intelligence-nim/scripts/gi_fetch.py create mode 100644 nim-skills/genomic-intelligence-nim/scripts/gi_predict.py diff --git a/nim-skills/genomic-intelligence-nim/SKILL.md b/nim-skills/genomic-intelligence-nim/SKILL.md new file mode 100644 index 0000000..cdbc3f7 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/SKILL.md @@ -0,0 +1,186 @@ +--- +name: genomic-intelligence-nim +description: > + Predict regulatory features, gene structure, and expression directly from DNA sequence using Genomic Intelligence's hosted DNA language models. Six tasks over one hosted REST contract — promoter regions, splice donor/acceptor sites, enhancer activity, chromatin state, sequence-to-expression (log TPM), and de-novo gene/transcript annotation. Use for regulatory genomics, promoter/enhancer/splice/chromatin scanning, expression prediction, and gene annotation from a gene name, a genomic region, or a FASTA. Bearer auth; no local GPU or model weights. +license: Apache-2.0 AND CC-BY-4.0 +compatibility: "requests>=2.28" +allowed-tools: Bash, Read, Write, AskUserQuestion +--- + +# Genomic Intelligence NIM + +One skill, six DNA-sequence prediction tasks, served by Genomic Intelligence's +hosted GPU service. Give it a **gene name**, a **genomic region**, or a **FASTA**; +it resolves a sequence, calls `POST /v1/tasks/{task}/predict`, and writes a +report + machine-readable JSON. Inference is remote — no model weights, GPU, or +heavyweight Python stack; the only dependency is `requests`. + +Load supplemental files only when needed: + +- `references/tasks.md`: per-task model, bounds, output fields, and biology. +- `references/api.md`: endpoints, request/response envelope, async, errors. +- `references/authentication.md`: `GI_API_KEY`, base URL, partner tiers. +- `references/sequence-acquisition.md`: gene/region → FASTA, TSS window, species. +- `references/errors.md`: error envelope, rate limits, async polling detail. + +> **Hosted, third-party service.** Genomic Intelligence is operated by Genomic +> Intelligence, not NVIDIA. The interface is the hosted-NIM shape (HTTPS + +> `Authorization: Bearer` + JSON). There is no local Docker mode. + +## The six tasks + +| Task | What it predicts | Mode | Length | +|---|---|---|---| +| `promoter` | Promoter regions (sliding window) | sync | 1–500,000 bp | +| `splice` | Splice donor/acceptor sites | sync | 1–500,000 bp | +| `enhancer` | Developmental & housekeeping enhancer activity | sync | 1–500,000 bp | +| `chromatin` | Chromatin state across hundreds of tracks | sync | 1–500,000 bp | +| `expression` | Expression as log(TPM+1) | sync | **exactly 9,198 bp** | +| `annotation` | De-novo gene/transcript structure | **async** | 1–500,000 bp | + +`expression` additionally needs a cell-type/assay context string +(`--description`, e.g. `"K562 cells"`) and an exact 9,198 bp TSS-centred window. +`annotation` submits with `Prefer: respond-async` and polls to completion. +Details: `references/tasks.md`. + +## Authentication + +This skill calls a hosted API and requires a partner bearer key (`gi_…`): + +```bash +export GI_API_KEY=gi_yourkeyhere +``` + +Request a key at **contact@genomicintelligence.ai**. Do not commit or hard-code a +key — it is resolved from the environment. Optional override: `GI_BASE_URL` +(default `https://api.genomicintelligence.ai`). See +`references/authentication.md`. + +## Install + +Python ≥3.8 and one package — no weights, no GPU: + +```bash +pip install requests +``` + +## Provided scripts + +Unlike the inline-only `nim-skills/`, this skill ships a small, self-contained +(`requests`-only) runner, because the surface spans six tasks plus an async job +(`annotation`) and an exact-window contract (`expression`) that do not inline +cleanly. Shipping `scripts/` is not prohibited by CONTRIBUTING and other skills +do it; the runner is the same proven +client used across Genomic Intelligence's other integrations. + +- **`scripts/gi_predict.py`** — one CLI, six tasks: FASTA → prediction → + `report.md` + `result.json` + `reproducibility/`, and a compact JSON summary on + stdout. Owns auth, length validation, the sync/async split, and error handling. +- **`scripts/gi_fetch.py`** — optional acquisition: gene symbol or region → + reference FASTA via Ensembl (public, no key), including TSS-centring for + `expression`. +- **`scripts/gi_client.py`**, **`scripts/gi_ensembl.py`** — the `/v1` client and + Ensembl helpers the two CLIs import. + +**Use the provided scripts — do not hand-roll `curl`, an Ensembl fetch, or an +inline HTTP client.** They own the length/async/expression contract. + +## Quick start + +Each task ships a real reference FASTA in `assets/demo/`: + +```bash +# Promoter scan of the TP53 locus (chr17, GRCh38) +python scripts/gi_predict.py --task promoter --demo --output out/promoter + +# Splice sites in HBB +python scripts/gi_predict.py --task splice --demo --output out/splice + +# Expression (needs a cell-type context; fixture is a 9,198 bp TSS window) +python scripts/gi_predict.py --task expression --demo --description "K562 cells" --output out/expr + +# De-novo annotation (async submit → poll, no extra flags) +python scripts/gi_predict.py --task annotation --demo --output out/annot +``` + +**By gene name** (fetch → predict, the common real case): + +```bash +FASTA=$(python scripts/gi_fetch.py --gene TP53 --out out/tp53.fa) +python scripts/gi_predict.py --task promoter --input "$FASTA" --output out/promoter + +# Expression of HBB in K562 — the exact 9,198 bp TSS window is built for you +FASTA=$(python scripts/gi_fetch.py --gene HBB --for-expression --out out/hbb.fa) +python scripts/gi_predict.py --task expression --input "$FASTA" --description "K562 cells" --output out/expr +``` + +`gi_predict.py` prints a compact JSON summary to **stdout** (headline scalars +only; bulky per-item arrays stay in `result.json`). Progress/verification lines +go to **stderr**: + +``` +[gi-] OK — wrote out//report.md (NNN ms wall) +``` + +## Minimal inline call (no scripts) + +For the simplest sync tasks you can call the endpoint directly: + +```python +import os, requests + +base = os.environ.get("GI_BASE_URL", "https://api.genomicintelligence.ai").rstrip("/") +resp = requests.post( + f"{base}/v1/tasks/promoter/predict", + headers={"Authorization": f"Bearer {os.environ['GI_API_KEY']}", + "Content-Type": "application/json", + "User-Agent": "BioNeMo-GI-Skill/0.1.0"}, + json={"sequence": "ACGT...", "sequence_name": "example"}, + timeout=300, +) +resp.raise_for_status() +body = resp.json() # {"data": {...}, "meta": {...}} +print(body["data"]["summary"]) +``` + +Prefer the runner for `expression` (exact-window + `description`) and +`annotation` (async) — those are error-prone to inline. + +## Standard workflow + +1. **Identify the task** from the request (map to one of the six above; if + ambiguous between promoter/enhancer/chromatin, ask — they are distinct models). +2. **Resolve the sequence.** If the user attached a FASTA, use it. If they named + a gene, `gi_fetch.py --gene ` (add `--for-expression` for expression). + If they gave a region, `gi_fetch.py --region `. Add + `--species ` for non-human (default human/GRCh38). +3. **Predict:** + ```bash + python scripts/gi_predict.py --task --input --output \ + [--model ] [--description ""] # description: expression only + ``` +4. **Read the result:** parse the stdout JSON for the headline; open + `/report.md` or `/result.json` for detail. + +## Validate and report + +Treat an invalid alphabet, an out-of-bounds length, a missing `expression` +window/description, or a non-2xx response as **hard failures** (the runner exits +non-zero and names the cause on stderr). Treat zero hits on a sequence you +expected to be feature-bearing as a **warning**. Record `meta.model` and +`meta.request_id` for audit. + +## Troubleshooting + +| Symptom (stderr) | Cause | Fix | +|---|---|---| +| `GI_API_KEY is not set` | No key | `export GI_API_KEY=gi_…` | +| `invalid input — expects exactly 9,198 bp` | Wrong expression window | Use `gi_fetch.py --gene X --for-expression` | +| `--description is required` | expression w/o context | `--description "K562 cells"` | +| `API error: [401 …]` | Bad/revoked key | Re-check `GI_API_KEY` | +| `API error: [422 …]` | Body/model rejected | Check `--model` in `references/tasks.md` | +| `API error: [429 …]` | Rate limit | Back off; partner tiers have caps | +| `API error: [504 upstream_timeout]` | Large sync req, cold GPU | Retry or shorten | +| `parsed an empty sequence` | Empty/invalid FASTA | Check the file is a single ACGT record | + +More: `references/errors.md`. diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/annotation_tp53.fa b/nim-skills/genomic-intelligence-nim/assets/demo/annotation_tp53.fa new file mode 100644 index 0000000..d8cbe73 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/annotation_tp53.fa @@ -0,0 +1,241 @@ +>human|TP53|chr17:7668402-7687550|GRCh38 +CACCCCTCAGACACACAGGTGGCAGCAAAGTTTTATTGTAAAATAAGAGATCGATATAAAAATGGGATATAAAAAGGGAG +AAGGAGGGGAAGGGTGGGGTGAAAATGCAGATGTGCTTGCAGAATGTAAAAGATGTTGACCCTTCCAGCTGGACGTGGTG +GCTCACAATTGTAATCCCAGCACTCTGGGAGGCTGAGACAGGTGGATCGCCTGAGCCCAGGAGTTTGAGACCAGCCTGGG +CAACACTGTGAGACCCCATCTCTACAAAACATGCAAAAGTTGGCTGGCCATGGTGGCATGAACCTGTGGTCCCAGCTACT +CCGGAGGCTGAGGCAGGACTGCTCGAGCCGGGGAGGCAAAGGCTGCAGTAAGCCAAGATCACGCCACTCCACTCCAGCCT +GGGCAACAAAGCGAGACCCAGTCTCAAAGAAAAAGAAAAAAAAAAAAAAAAAAGAAAAAAGAAATTGACCCTGAGCATAA +AACAAGTCTTGGTGGATCCAGATCATCATATACAAGAGATGAAATCCTCCAGGGTGTGGGATGGGGTGAGATTTCCTTTT +AGGTACTAAGGTTCACCAAGAGGTTGTCAGACAGGGTTTGGCTGGGCCAGCAGAGACTTGACAACTCCCTCTACCTAACC +AGCTGCCCAACTGTAGAAACTACCAACCCACCGACCAACAGGGAGAGGGAACAAGCACCCTCAAGGGGGTCAAGTTCTAG +ACCCCATGTAATAAAAGGTGGTTTCAAGGCCAGATGTACATTATTTCATTAACCCTCACAATGCACTCTGTGAGGTAGGT +GCAAATGCCAGCATTTCACAGATATGGGCCTTGAAGTTAGAGAAAATTCAACAGTGAGGGACAGCTTCCCTGGTTAGTAC +GGTGAAGTGGGCCCCTACCTAGAATGTGGCTGATTGTAAACTAACCCTTAACTGCAAGAACATTTCTTACATCTCCCAAA +CATCCCTCACAGTAAAAACCTTAAAATCTAAGCTGGTATGTCCTACTCCCCATCCTCCTCCCCACAACAAAACACCAGTG +CAGGCCAACTTGTTCAGTGGAGCCCCGGGACAAAGCAAATGGAAGTCCTGGGTGCTTCTGACGCACACCTATTGCAAGCA +AGGGTTCAAAGACCCAAAACCCAAAATGGCAGGGGAGGGAGAGATGGGGGTGGGAGGCTGTCAGTGGGGAACAAGAAGTG +GAGAATGTCAGTCTGAGTCAGGCCCTTCTGTCTTGAACATGAGTTTTTTATGGCGGGAGGTAGACTGACCCTTTTTGGAC +TTCAGGTGGCTGTAGGAGACAGAAGCAGGGAGGAGAGATGACATCACATGAGTGAGAGGGTCTGTGCCCCTTTTCCCTGA +CCAATGCTTTGAAGGGCCTAAGGCTGGGACAACGGGAATTCAAATCAAGATGGTGGCCACACCCCATGCAAATATGTTTA +CTGAGCACCTCAGAGTATTAGTGTGTATTAGTCTCGTAATCTTCCCTTACCCCATTTTACTTTATTTATCTTTTTTGAGA +CGGAGTTTCACTCTTGTTGCCCAGGCTGGAGTGTAATGGTGAGATCTCAGCTCACCGCAACCTCTGCCTCCCGGGTTCAA +GCGATTCTCCTGCCTCAGCCTCCCGAGTAGGTAGCTGGGATTACAGGCATGCATCACCACGCCCGGCTACTTTTGTATTT +TTAGTAGAGATGGGGTTTCTCCATGTTGGTCAGGCTGGGCTCAAACTCCCGACCTCAGGTGATCCACTCGCCTTGGCCTC +CCAGAGTGTGGGATTCGTGAGCCACTGCGCCCGGCCCCCTTACCCCATTTTATATATAAGGAAACTGAGTTTGACGGGGG +TCACCTAGGACCTGCCGGTGCATGGCAGGGCTGAGTATATGACCTGAAACTCTGGCTGTATTCAGTATTACACAATTATT +AGGCCCCTCCTTGAGACCCTCCAGCTCTGGGCTGGGAGTTGCGGAGAATGGCAAAGAAGTATCCACACTCGTCCCTGGGT +TTGGATGTTCTGTGGATACACTGAGGCAAGAATGTGGTTATAGGATTCAACCGGAGGAAGACTAAAAAAATGTCTGTGCA +GGGCTGGGACCCAATGAGATGGGGTCAGCTGCCTTTGACCATGAAGGCAGGATGAGAATGGAATCCTATGGCTTTCCAAC +CTAGGAAGGCAGGGGAGTAGGGCCAGGAAGGGGCTGAGGTCACTCACCTGGAGTGAGCCCTGCTCCCCCCTGGCTCCTTC +CCAGCCTGGGCATCCTTGAGTTCCAAGGCCTCATTCAGCTCTCGGAACATCTCGAAGCGCTCACGCCCACGGATCTGCAG +CAACAGAGGAGGGGGAGAAGTAAGTATATACACAGTACCTGAGTTAAAAGATGGTTCAAGTTACAATTGTTTGACTTTAT +GACGGTACAAAAGCAACATGCATTTAGTAGAAACTGCACTTCAAGTACCTATACAGCTGACTTTTAAAAATATTTATTTA +TTTATTTTGAGATGGGGTCTCACTCTGTTGCCCAGGCGGGAGTGCAATGGTGCAATCTTGGCTGATTGCAATCTCCGCCT +CTGGGGTTCAAGTGATTCTTGTGCCTCAGCCTCCCGAGTAGCTGGGACTACAGGCGTGTGCTACCACACCTGGCTAATTT +TTGTGTTTTTAGTAGAGATGGGGCTTCACCATGTTAGCCAGGCTGGTTTCCAACTCCTGACGTCAGGTGATCTACCCACC +TCCACCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACTGTGCCCGGCCCTTTTTTAAATTTTAGAGATGATGTCTTGC +TATGTTGTTCAGGCTGGACTCAAACTCTTGGGCTCAAGAGATCCTCCTGCCTTAGCCTCTCAAGTAACTGGGACTACATG +TGCATGCGACTGTGCCTCGTTTCTTTTCTTTTTTTTCTGAGACGGAGTCTCACTCTATCGCCCAGGCTGGAGTGCAGTGG +CGCCATCTTGGCTCCCTGCAACCTCCGCCTCCTGGTTCAAGCGATTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGATTAC +AGGCACCTGCCATCACGCCCGGTTAATTTTTGTATTTTAGTAGAGACGGGGTTTCACCATGTTGGCTAGGCTGGTCTTGA +ACTCCTGACCTCAGGTGATCCACCCGCCTCAGCCTCCCGAAATGCTGGGATTACAGGCGTGAGCCAGTGCGCCTGGCCTT +TTCTTTTTTTGAGTCTCGCTCTGCGCCCAGGCTGTGCCTGGCTCGACTGTGCCTCCTTTCATGCAACCATGCTGTTTCTC +ACTTTCAGTAACAATATTCAATAAATCACATGAGATATACAACATTTTATTACTATAAAAAGGGCTTTGTGTTAGATGAC +TTTGCCCAACTGTAGGGTAACTTAAATGCTCTGAACACGTTTCAAGTAGGCTAGGGCTGAGTGTGGTAGCTCATGCCTGT +AACCCCAATACTTGGGGAGGCTGAGGTGGAAGGATTGATTGAGCCCAGGGGTTTGATACCAGCATGGGCAACGTAGCAAG +ACCTTGACTTCACAGAAAATAAAAAATTAGCTGGGTGTCGTGGCATGTGCCTGTAGTCCTAGCTACTTGGGAGGGTGAAA +TCACCGGAGCCCAGGGAGGTCAAGGCTGCAGTGAGCTGAGATGGTGCCACTGCACTCTAGCCTGAGTGACAGAGTGAGAC +TCTGTCTTTAAATAAATAAATAAAAATTAGCCGGGCGTGGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGCCGAGG +CGGGCGGATCACATGGTCAGAAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCTGTCTCTACTAAAAATACAAAAAT +TAGCTGGGCGTGGTAGCAGGCGCTTGTAGTCCTAGCTATTCGGGAGGCTGAGGCAGGAGAATCACTTGAACCCAGGAGGC +AGAGGTTGCAGTGAGCCGAGATCATGCCACTGCACTCCAGCCTGGGCGACAGAGTGAGACTGAGTCTCAAAAAAATAAAA +TAAAATAAAATAAAAATAAATAAATAAAAATTAGCCAGGCATGGTGGTGCAGGCCTGTAGTTGAAGCAACTTGGGAGGCT +GAGCTGGGAGGATGGATGGAGCCTGGGAGGTGGAGGCTGCAGTGAGCTGTGACTGCACTACTGCACTCTATCCAGCCTGG +GTGACAGAGCAAGACCTTGTCTCAAAAAAGTAGGCTAGAGACCAGCCTGGGCAACATAGTGAGACTCTATCTATCTACAA +AAAATTTTAAAAATTAGCTGGGTATGGTGGTGTATGCCTGTGGTCCTAGCTACTGGGGAGGCAGAGTTAGGGGGATTGCT +TGAGCCCAGGAGGGTATAATGAGCTATGATCACATCACTGTAATCCAGCCTGGGCAACAGAGCAAGATGCTGTCTCCATT +AAAAATAAAATAAAAGTAGGCTAGGCAGGCCGGGTGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGC +AGGCAGATCACAAGGTCAGGAGTTCGAGACTAGCCTGGCCAACATGGTGAAACCTCATCTCTACTAAAAAAAAAAATAAA +TAAATAACAAAAAATTAGCTGGGCGTCGGGGCAGGTGCCTGTAATCCCAGCTACTCAGTGGGCTGAGGCAGGAGAATCGC +TTGAACCCAGAAGGCGGAGGTTGCAGTGAGCCGAGATCCCGCCACTGCACTCCAGCCTGGGTGACAGAGTGAGACTCTGT +CTCCAAAAAAAAAAAAAAAAAAAGCAGGCTAGGCTAAGCTATGATGTTCCTTAGATTAGGTGTATTAAATCCATTTTCAA +CTTACAATATTTTCAACTTACGACGAGTTTATCAGGAAGTAACACCATCGTAAGTCAAGTAGCATCTGTATCAGGCAAAG +TCATAGAACCATTTTCATGCTCTCTTTAACAATTTTCTTTTTGAAAGCTGGTCTGGTCCTTTAAAATATATATTATGGTA +TAAGTTGGTGTTCTGAAGTTAGTTAGCTACAACCAGGAGCCATTGTCTTTGAGGCATCACTGCCCCCTGATGGCAAATGC +CCCAATTGCAGGTAAAACAGTCAAGAAGAAAACGGCATTTTGAGTGTTAGACTGGAAACTTTCCACTTGATAAGAGGTCC +CAAGACTTAGTACCTGAAGGGTGAAATATTCTCCATCCAGTGGTTTCTTCTTTGGCTGGGGAGAGGAGCTGGTGTTGTTG +GGCAGTGCTAGGAAAGAGGCAAGGAAAGGTGATAAAAGTGAATCTGAGGCATAACTGCACCCTTGGTCTCCTCCACCGCT +TCTTGTCCTGCTTGCTTACCTCGCTTAGTGCTCCCTGGGGGCAGCTCGTGGTGAGGCTCCCCTTTCTTGCGGAGATTCTC +TTCCTCTGTGCGCCGGTCTCTCCCAGGACAGGCACAAACACGCACCTCAAAGCTGTTCCGTCCCAGTAGATTACCACTAC +TCAGGATAGGAAAAGAGAAGCAAGAGGCAGTAAGGAAATCAGGTCCTACCTGTCCCATTTAAAAAACCAGGCTCCATCTA +CTCCCAACCACCCTTGTCCTTTCTGGAGCCTAAGCTCCAGCTCCAGGTAGGTGGAGGAGAAGCCACAGGTTAAGAGGTCC +CAAAGCCAGAGAAAAGAAAACTGAGTGGGAGCAGTAAGGAGATTCCCCGCCGGGGATGTGATGAGAGGTGGATGGGTAGT +AGTATGGAAGAAATCGGTAAGAGGTGGGCCCAGGGGTCAGAGGCAAGCAGAGGCTGGGGCACAGCAGGCCAGTGTGCAGG +GTGGCAAGTGGCTCCTGACCTGGAGTCTTCCAGTGTGATGATGGTGAGGATGGGCCTCCGGTTCATGCCGCCCATGCAGG +AACTGTTACACATGTAGTTGTAGTGGATGGTGGTACAGTCAGAGCCAACCTAGGAGATAACACAGGCCCAAGATGAGGCC +AGTGCGCCTTGGGGAGACCTGTGGCAAGCAGGGGAGGCCTTTTTTTTTTTTTTTTGAGATGGAATCTCGCTCTGTCGCCC +AGGCTGGAGTGCAGTGGCGTGATCTCAGCTCACTGCAAGCTCCACCGCCCAGGTTCACGCCATTCTCCTTCCTCAGCCTC +CCGAGTAGCTGGGACTACAGGTGCCCAGCACCACGCCCGGCTAATTTTTTTTTGTATTTTTCAGTAGAGACGGGGTTTCA +CCGTTAGCCAGGATGGTCTCGATCTCCCAACCTCGTGATCCGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCAT +GAGCCACTGCGCCCAGCCAAGCAGGGGAGGCCCTTAGCCTCTGTAAGCTTCAGTTTTTTCAACTGTGCAATAGTTAAACC +CATTTACTTTGCACATCTCATGGGGTTATAGGGAGGTCAAATAAGCAGCAGGAGAAAGCCCCCCTACTGCTCACCTGGAG +GGCCACTGACAACCACCCTTAACCCCTCCTCCCAGAGACCCCAGTTGCAAACCAGACCTCAGGCGGCTCATAGGGCACCA +CCACACTATGTCGAAAAGTGTTTCTGTCATCCAAATACTCCACACGCAAATTTCCTTCCACTCGGATAAGATGCTGAGGA +GGGGCCAGACCTAAGAGCAATCAGTGAGGAATCAGAGGCCTGGGGACCCTGGGCAACCAGCCCTGTCGTCTCTCCAGCCC +CAGCTGCTCACCATCGCTATCTGAGCAGCGCTCATGGTGGGGGCAGCGCCTCACAACCTCCGTCATGTGCTGTGACTGCT +TGTAGATGGCCATGGCGCGGACGCGGGTGCCGGGCGGGGGTGTGGAATCAACCCACAGCTGCACAGGGCAGGTCTTGGCC +AGTTGGCAAAACATCTTGTTGAGGGCAGGGGAGTACTGTAGGAAGAGGAAGGAGACAGAGTTGAAAGTCAGGGCACAAGT +GAACAGATAAAGCAACTGGAAGACGGCAGCAAAGAAACAAACATGCGTAAGCACCTCCTGCAACCCACTAGCGAGCTAGA +GAGAGTTGGCGTCTACACCTCAGGAGCTTTTCTTTTTTTTTTTTTTTTTTGAGATAGGGTCTTGCTCTGTCACTCAGGCT +GGAGCACAGTGGTGTGATCACAGCTCACTGCAGCCTCCATCTCCTGGCCTCAAGTGATCTTCCCACCTCAGCCTCCTAAG +TGGCTGGGACTATAGGTGTGCACCACCATGCCTGGCTAATTTTTTGTATTTTTTTGTAGAGACGAGGTTTCATCATGTTA +CCCAGGCTGGTCTTGAACTCCTGGGCTCAGGTGATCTGCCTGCCTTGGCCTCTTTGAGAGTGCTGGGATTGCAGGTGTGA +GCCACCAAGCCTGGTCAGGAGCTTATTTTCAAAAGCCAAGGAATACACGTGGATGAAGAAAAAGAAAAGTTCTGCATCCC +CAGGAGAGATGCTGAGGGTGTGATGGGATGGATAAAAGCCCAAATTCAAGGGGGGAATATTCAACTTTGGGACAGGAGTC +AGAGATCACACATTAAGTGGGTAAACTATAAAAAAACACTGACAGGAAGCCAAAGGGTGAAGAGGAATCCCAAAGTTCCA +AACAAAAGAAATGCAGGGGGATACGGCCAGGCATTGAAGTCTCATGGAAGCCAGCCCCTCAGGGCAACTGACCGTGCAAG +TCACAGACTTGGCTGTCCCAGAATGCAAGAAGCCCAGACGGAAACCGTAGCTGCCCTGGTAGGTTTTCTGGGAAGGGACA +GAAGATGACAGGGGCCAGGAGGGGGCTGGTGCAGGGGCCGCCGGTGTAGGAGCTGCTGGTGCAGGGGCCACGGGGGGAGC +AGCCTCTGGCATTCTGGGAGCTTCATCTGGACCTGGGTCTTCAGTGAACCATTGTTCAATATCGTCCGGGGACAGCATCA +AATCATCCATTGCTTGGGACGGCAAGGGGGACTGTAGATGGGTGAAAAGAGCAGTCAGAGGACCAGGTCCTCAGCCCCCC +AGCCCCCCAGCCCTCCAGGTCCCCAGCCCTCCAGGTCCCCAGCCCAACCCTTGTCCTTACCAGAACGTTGTTTTCAGGAA +GTCTGAAAGACAAGAGCAGAAAGTCAGTCCCATGGAATTTTCGCTTCCCACAGGTCTCTGCTAGGGGGCTGGGGTTGGGG +TGGGGGTGGTGGGCCTGCCCTTCCAATGGATCCACTCACAGTTTCCATAGGTCTGAAAATGTTTCCTGACTCAGAGGGGG +CTCGACGCTAGGATCTGACTGCGGCTCCTCCATGGCAGTGACCCGGAAGGCAGTCTGGCTGCTGCAAGAGGAAAAGTGGG +GATCCAGCATGAGACACTTCCAACCCTGGGTCACCTGGGCCTGCAGAGAAGGAACCCCCTCCCCCAACACCATGCCAGTG +TCTGAGACAGCTCGGCTTCCTGTGGAGCAGGAAAAGAATGGCTGCTTCACATTCTCTCTTCCAATGTTTCACCACAACCC +AAGCACTCCTGCCCCACCCCTCACCAGCCATGCACTTCTTTGAGGAAAAGACAATCAGAGAGGGACTTCCAACCTTCCCA +CCACTAAATCCCCAAGACTTCCTAAATGTGCACCCTATTCCCAACTCCCTTCCTGTATTTTTTTTTTTTTTTTGAGATGG +AGTCTCTCTCTGTCACCTAGGCTGGAGCACAGTGGCATGATCTCAGCTCACTGCAACCTCTACCTTCCGGGTTCAAGCCA +TTCTCCTGCCTCAGTCTCCCGAGTAGCTGGGATTACAGGCGAGTACCACCACACCCAGCTAATTTTTGTATTTTTAGTAG +AGACAGGGCTTTGCATGTTGGCCAGGCTGGTCTCGAACTCCTTACTTCAGGTGATCGGCCCGCCTCAGCCTCCTAAAGTG +CCAAGATTACAGGTGTGAGCTACCGTGCCCTGCTCCCACCTCCTGTTAACAAGGATATAGTCATTCTCAGCCTGCAATCT +CTGTATGGGGAAGGACACCCCCTTGGCCCCCACCCTTCCCCACCTGATACACGGCTCCATTTCTTTGATTCCTTTCACTG +CAAAGCTTCTGGAAGAACAACTGTCTCACCGCTCACCTGCCCATTCTCTTCGGACACTCCTCAGCCCTGCATTACAAACC +CCTCACGAATGGCCCGTCTCGGCTTCTTTAATCTCATCTCTTAACAACCACTCCCTCTTCCCCAAAAGCTCTAGCTAGAC +TGGCTGCCCTTCTCTGCTAATCAACTGGTGGTTCCTTGGCTAGCCAGGAACATGGGGGTAGGCTCCTTCCCGTGCAGACT +TTAAGTCATCCTATTTTAATTCACATCACCTCATTTGCATTCTCATAGCACTTACATTGTCTGATACTTTTCCTTGTTTA +TTTTATCTGTTTCCTCTAATAGCATATACACTTCCTAAGGGCAGGGCAGTGATCTATCTTGTTGTCTTGCTGACCAAAGT +ATTAGATCACAATGCCTTGCACCTGCTTGGGCTCAATAAATGTGAATAACACACAAGCCTGTTATATGAGAGGTTAAGAG +AGCGAGAAAGAGCAAGGGGCAGCCCCTGTGTGGACCAGCATCTTGCACGAAGTTATGCAACTATCATCGCACCTTCTCCC +AGACAAGCTTTCAAAGGCTTTGCCATGTTTTCTTTTGTTTTGTTTTTTTGTTTGTTTTTTGAGATGGAGTTTGGCTCTTT +TCGCCCAGGCTGGAGTGCAGTGGTGCAGTCTAGGCTCACTGCAACCTCTGCCTTCTGGTTTCAAGCAATTCTCCTGCCTC +AGCCTCCCGAGTAGCTGGGATTACAGGCCCCTGCCACCATGCCTGGCTGATTTTTTGTATTTTTAGTAGAGACAGGGTTT +CACCATGTTGGCCAGGCTGGTGTGGAACTCCTGACCTTGTGATCCACCTGCCTCGGCCTCTCAAAGCGCTGGGATTACAG +GTGTGAGCCACTGTGCCTGGCCCGCCATGTTCTTTCTTTCTTTCTTTTTTCTTTTGAGGCAGGGTCTTGCTTTGTTGCCC +AAGCTAGGGTACAGTGGTGCAATCATGGCTCACTACAGCCTCGGACTCCTGGGCTCAGTGATTCTCCTGCCTCAGCCTCC +CAAGTAGCTGGGACCACAGAGGCCTGCCTGGCTAATTTTTTAGTCTTTTTCTTTTTCTTTTTTTTTTTGGAGACGGAGTC +TCGCCCTGTCACCCAGGCTAGAGTGCAGTGGTGTGATCTCGACTCACTGTAACCTCCACCTCCCAGATTCAAGCGATCCT +CTTGCCTCAACTTCCTGAGTAGCTGGGATTACAGGCGCCCACCAATGCGCCTGATTAATTTTTTGTATTTTTAGTAGAGA +TGGGGTTTTGCCATGTTGGCCAGGCTGGTTTCGAACTCCTGACCTCAGGTGATCCTCCCGCCTCCGACTCCCAAAGTGCT +GGGATTACAGGTGTGAGCCACTGCACCCGGCCAATTTTTGAGTTTTTTTGTAGAGGCAGGGTTTCACTATGTTGCCCAGG +CAGGATGCTCTCTTTCTTTTTCTTTTTTTTTTTTTCAGGGATGCTCTCTTTCTTTATGCCAAATTTGTCATCAGATTTGC +TAAGAAACATGCCTACTGTAAGTGTTTGTTACACTTTTCTGTTTTTTTTTTTTTTTGAGACAGAGTTTTGCTCTCGTCCA +GGCTGGAGTGCAATGGTGCGATCTCGGCTCACCGCAACCTCTGCCTCCCAGGTTCAAGCGATTCTCCTGCCTCAGCCTCC +CGAGTAGCTGGGATTACAGGCATGCGCCACTGCGCCCGGCTAATTTTGTATTTTTAGTAGAGACGGGGTTTCTCCATATT +GGTCAGGCTGGTCTTGAACTCCCAACTTCAGGTGATCCGCCCGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCATGAA +CCACTGTGCCCAGCCCACTTTTCTGTTGTTTGCACTGACAAAACATCCCCTACCAAACAGCTCCTTTAATGGCAGGCTCT +TTTCTTTTTTTATTTTATTTTATTTTATTTTATTTTATTTTATTTTATTTTGAGACGGAGTCTCAGCTCTTATTGCCCAG +GCTGGAGTACAGTGGCACTATCTCCGCTTACTGCAACCTCCTCCCGGATTCAAATGATTCTCCTGCCTCAGCCTGCTGAG +TAGCTAGGACTACAAGCATGTGCCACCACACCTGGCTAATTTTGTACTTCTAGTAGAGACGGGGTTTCACCATGTTGGTC +AGGCTGGTCTTGAACTCCCGACCTCAGGTGATCCACCCCCCTTGGCCTCCTAAAGTGCTGGGATTACAGGCGTGAGCCAC +CAAGCCTGGCCTACCTAGTACTCTGTGTATTATGGGAAATGTAGAGTTGAGGAAAGTGCTGGGCACACAGTAAGAGCTCA +ACAAAGGTTAGCTCTTTCTGCAATTGTTCTATTTCACTTGTTCTATATTATTATTCTAGAGAGAACTGTGTGATTGTTAG +TGCGGATCTGTGGTACTGCTCCCACCCCCACTCCATTAATGCAAGTACACCTCCTTCAGGGATCTATTCAGTCAACAGGC +CAGGAGGTGCTGTCCTGAAATGGGGGGCCCAAAGTCTCAATCCCACTTGGAGGGACACAGGTCTACAGACAGGTCTCCCT +GTCTTTATCTCTCAAATCTTCAGTAGCAACTAAAATCTCCGTGTTTTTCAGAGCAGGACCTTCCCAGGGGTACCAGCATC +AGTGGGCCAGGATACAAATGTGCCAGGCTGAACTAGGCCTTCCAAATGGCCAGGGAGCCAAGAGAAATGCAGGTGCCCTT +GGCTGGGTGGGAAGGCAATGAGATCAACTGAGACCCCAAACAGGGGCAGGCCTGACCAGAATCTTAACAGTGGCTGCTGG +TATCAGTCTTGAAGGCCTATATGTCCAGTGATTCCCTAAACAATATAGTACAAGTACTTACATACATACTTGCATGTACA +TTAGCATTTTCATTGTATGGGGGTAATGTAAGTAATCTAGAGATAATTTAAACTATATGGGAGGATATGTGTAGGTTAAA +TCCAAATACTATACCGTCTTATATATGGGACTTAGACATCTGTGGGTTTGGTGTGTGAGGAGTCCCAGAACCAAGCCCCT +ACAGATAGAGGGATAACTATATTGCCCTGTAACCTGCAACCCTGCTATATTTATTTATTAGTTTTGGTAGCTTTTTATGG +ATTTTCCATTAGGACTTTTTTTTTTTTTTGAGATAGAGTTTCACTCTTTTTTTTTTTTTTTGAGACGGAATCTCGCTCTG +TTGCCCGGCGTGGTGTGCAATGGCATGATCTCAGCTCACTGCAACCTCCACCTCCTGGGTTCAAGCAATTCTTCTGTCTC +AGCCTCCCAAGTAGCTGGGATTACAGGCGCCCACCACTACACCCAGCTAATTCTTGTATTTTTAGTAGAGACGGGGTTTC +ACCATGTTAGGTTGGTCTCAAACTCCTGACCTCAGGTGATCGGCCTGCCTCAGCCTCCCGAAGTGCTGGGATTACAGGCG +TAAGCCACCACACCCTGCCGGAGTTTCACTCTTGTTGCCCAGGCTGGAGTGCAATAGCGCGATCTCGGCTCACTGCAACC +TCTGCCTCCCAGGTCCAAGCAATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTAGAGGTGCCCGTCACCACGCCTGG +CTGATTTTTTGTATTTTTATTAGAGTTGGGGTTTCACCATGTTGGCCAGGCTGGTCCCAGGGAAGCCACCTGCCTCAGCC +TCCTAAAAGTGCTAGGATTACAGGCATGAGCCACCACGCCTGGCCCCATTAGGACATGTATGTATAGAATCATACTGGCT +GTGAATGTGTTTTATTTCTTCCTTTCTAATCGTTATTTTTTTTCTTTCCTTTTTTTTTTTTTTTTTTGACATGGAATTTT +GCTCTTGTCGCCTAGGCTGGAGTGCAATGGGACAATCTCGGCTCACTGCAACCTCTGCCTCCTGGGTTCAAGTGATTCTC +CTGCCTCTGCCTCCTGAGTAGCTGGGACTACAGGCGTTCACCACTACCCCTGGCTAATTCTTTTTTTTTTGAGACGGAGT +TTTTGCTTTTGTCACCCAGGCTGGAGTGCAATGGTGCAATCTCGGCTCACTACAACCTCCGCCTCCCAGGTTCAAGCGAT +TCTCCTGCCTAAGCCTCCCAAGTAGCTGGGATTACAGGCGCCCGCCACTACGCCCGGCTAATTTTTGTATTTTTAGTAGA +GATGGGGTTTCACCATGTTGGCCAGGCTGGTGTTGAACTCCTGACCTCAGGTGATCCACCCACCTCGGCCTCCCAAAGTG +CTGGGATTACAGGCATGAGCCACTGTACCCGGCCAACGCCTGGCTATTTTTTTAATATTTTAATAGAGACGAGGTTTCAC +CATCTTTGTCAGGCTGGTCTCCAACTCCAGACCTCAGGTGATCTGCCCACCTCGGCCTCCCAAAGTGCTGGGATTATAGG +CGTGAGACATCGGGCCACTAATCATTATTTCTTTTTCTTTTTTTTTTTTTGAGACACAGTCTTGCTCTGTCGCCCAGGCT +GGAGTGCAGTGGCTCGATCTCAGCTCACTGCAAGCTCCGCCCCCTGAGTTCACGCCATTCTCCTGCCTCAGCCTCCCGAG +TAGCTGGGACTACAGGCGCCCGCCACTACGCCCGGCTAATTTTTTGTATATTTAGTAGAGACAGGGTTTCACCGTGTTAG +CCAGGATGGTCTCGATCTCCTGACCTCGTGATCCACCCGTCTCGGCTTCCCAAAGTGCTGGGATTACAGGCCTGAGCCAC +CGCACCCGGCCCTCATTATTTCTTTTTCTTGCCTGGTTAAAACCTCCAGTATGGTATCAACGTTGTGAGAGTCAAATCCT +TTTCTAGTTCCTGATCTTAGAGGAAAAAGCGTTGAGTTTTCTTTTCTTTTTTTTTTTTTTTTTTTTTTGAGACGAAGTCT +CACTCTGTCACCCAGGCTGGAGTGCAGTGGCACGATCTAGGCTCTGCAAGCTCCGCCTCCCGGGTTCACGCCATTCTCTC +GCCTCAGCCTCCCGAGTAGCTGGGACTATAGGCGCCCGCCACCATGCCCGGCTAATTTTTTGTTTTTGTATTTTTAGTAG +AGACGGGGTTTCAGCATGCTAGTCAGGACAGTCTCGATCTCCTGACCTCGTGATCCGCCCGCCTAGGCCTCCCAAAGTGC +TGGCATTACAGGCGTGAGCCACCGCGCCCGGCAGCACTGAGTTTTCTACCATTATGTATGCTGCTAGTGGAACTCCGACT +GTGGACGCCCTGTTATCAAACTAGGTTAAGTTTCCTTTCCCTAGTTTGCTAGGAGGTTGGTTGGTTTGTAATCATGCATA +TGTGTTGAATATCATTAACTGCTTTTGCTACATCTGTTGAAATGATCATAGGGTTTTTATGTTTCCCTTTGTTAATGTGG +TGAATTACACAGACTGATTTTTTTCCCCCCAGTAAAGACCAGTCTGACTATGTTGCCCAGGCTGGTCTTGAAATCCTGGG +CTCAAGAGATCTTCCTGCCTCAGCCTCCTAAAATGTTGGGATTACAGGCCTGAGCTACTGCACCAGGCCAATTTTTGAAT +GTTGAATCAGCTACAATCATGAGATAAACATTATTTGGTTAGAATGTATTTATCCTTTTTCTTTTTCTTTTTTTGAGATG +GAGTCTCACTCTGTTGCCCAGGCTGGAGTGCAATGGTGTGATCCCAGCTCAGTGCAACTTCTGCCTCCTGGGTTCAAGCG +ATTCTCCTGCCTCAGACTCCCGAGTAGCTGGGATTTCAGGTGCCCACCACCATGCCCAGCTAATTTTTTTTTTTTTTTGA +GATGAAGTCTTGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCACGATCTTGGCTCACTGCAACCTCTGCCTCCCGGGTTCA +AGCAATTCTGCCTCAGCCTCCTGAGTAGCTGGGATTACAGGCAGGTGCCACCACACCGGCTGATTTTTGTATTTTTAGTA +GAGATGGCGTTTCACCACATTGGTCAGGCTGGTCTTGAACTCCTGACCTCGTGATCTGCCCACCTCGGCCTCCCAAAGTG +CTGGGATTACAGGCGTGAGCCACCGTGCCCAGCCTGATTTTTGTATTTTTATTAGAAACGGGGTTTCACCATGTTGGTCA +GGCTGGTCTCAAACTCCTGACCTCAAGTGATCTGCCTGCCTCAGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACC +GCGACTGGCCTATTTATCCTTTTTTCTATATTACCAGGTTTGGTTTGCTAAAATTGGTTAGCTGTTGCATGTCTATGCTA +ACAGGAATATTGGTCTATATTTTCTTTTCTTATAATGTCCTTGTTTGGTTTTGGTACCAGGATTATGCTGGCTTCGAAAA +CAAGTTGGGAAATATTCCTCTATTTTTTCTTTCTTTCTTTTTTTTTCTGAGACAGGGTCTCACTCTGTTGCCCAGGCTGG +AGTGCAGTGGCGCAATCTCGGCTCACTGCAACCTCCGCTTCCCAGGTTCAAGGGATTCTTGTGCCTCAGCCTCCTGAGTA +ACTGGCATTACAGGTATGTGTCACCACGCCTAGCTACTTTTTGTATTTTTAGTAGAGATGGGGTTTCGCCGTGTTGGCCA +GGCTGGTCTCGAACTCCCGACCTCAAATGATCCCCTGCCTCAGCGTACCAAAGTGCTGAGATTACAGGTATGAGCCACCG +CGCCCAGTCTGTTCCTCTGTTTTCTGAAGAGTTTGTGTAAGATGGGTACTGTTTCTTCCTCCAACGTTTAAAGAGAGCAG +AGAACAGAGGAGATAAATAGAAAATAGCACTAAGAGGTCAGGCATGGTGGCTCACACCTGTAATCCCAGCACTTTGGGAG +GCCGAGATGGGATGAAAGCTTGAGGCCAGCAGTTTGAGACCAGCCTGGGCAACATAGTGAGATCCTGTCAATACAAAAAA +ATAAAATAGTTAGCTGGGTGTGGTGGAGTAATCCCAGCTACTCGTGAGGCTGCTAGAGGACTGCTTGAGCCCAGGGGTTC +GAGGCTGCAGTAAGCCTTGATTGTGCCATTGTACTCTAGCCTGGGCAACAGTGTGAGTCCCTGTCTCAAAAATTAACAAA +GAAAAAAAGAAAATAGCACTAAAATGGTAGCCCTATACTCCAACTGTAAAATAATTAAAATTAAAAGCATTCAGTAGAGA +AAGGAAGCCTATTTCAACAAGTGGAGACAGAATAACTGGATTTCCATACAGGAAAGATACCAGAGACTGACTCCTACACC +TCACACCATAAACAATTAATTTTAAGAATTAATTAATGGCTCAAGGACCTTACTGTAAAACTTACAACCATAAAGGTCCT +AAAAGAAAATGTAAGATAATATCTTCATGACCCTGGGGTTAAAAAAAAAAAAAAAGATGTCCTAAACAGGACAAGGCAAA +TACTGAACATAAAAAAGATAAATCCACTCCTCTTAAGATACTGTAAACTCTGTAAAGCAAACAAATAGGCAAGCAACAGA +TCAGAAGAAAACATTCACGACACATGGATCTGATAAAGGACTTGTATCCAGAATGTATAAAGCAGTCCCACAACTGAACA +ATAAAAACAAACAAAAAACCAAAATAACAGGTAAAAGACTCGAAGAGCTACTTTACAAACAAAATACGAATGGCCAATAG +GCACATGAAAAAATGCTGAACATCCTTAGTCAATAGAGAACTGTAAATTACAACCACAAGGATATACCACATTAGAAAGA +CTGACAATACCTAATGTCCGGAAGGCTGTGGCACAACCATAATAACTCCCATACCTTGCTAGTTGGAGTGTAAAATGGTA +CAACCGCTCTGGAAAACTCAGAGCTTCTGAAAAAGTTCAAAATACAGCTACTTTTTACTTCCAAACTCGCAATTCCCCTC +CTAAGTATTTCTCCAAGAAACACGAAAACATATGATCACAAAAAGAATTGTACAAGAATGTTTATAGCAGCTTTATTTCA +TAACCGCAAATGGGAAACAACTCAAAAGGCCATCAAAAGGACGGATATACAATCGATGGACTATACTAAATGAAAAGGAG +CAAAATACTGATATATACAACATGAACGAATGTCAGACAGTACATTGAAGGACAGAAGCCCGACAAAAATGAGCACATAA +TGTATGATTCCCCCCTTTTTTTTGAGACGGAGTTTCGTTCTTGTCGCCCAGGCTGGAGTGTAGTGGCACGATCTTGGCTC +ACTGCAACCTCTGCCTCCCGGGTTCAAGCGATTCTCCTGCCTCACCCTCCCGAATAGCTGGGATTACAGGCACCCACCAC +GCCCAGCTAATTTTTGTATTTTTTAGTAGAGACGGGGATTCACCACGTTGGCCACGCTGGTCTGGAACTCCTATCCTCAA +GTAATCCGCCCGCCTCGGCCTCCCAAAGTGCAGGCGTGAGCCACAGCGCCCAGCCTGATTCCATTCTATATGAAGTTCTC +CAACAGGCAAAATGGTTATGGAGATCAAAATAAAGGTGGGGTCGGGAATCGACTGGGAAGAGACGTGATGAAACGTTTCT +GGGACGATGAAAAGGGTCTGTGACTTGGTAGGCATCACGGAGCGGTTAGGGGCCAAAACTCATCTTCCTGTGCACTTGCT +GTGTGCACTGGCGCTGTGTGTAAATGCCACCTCGATTTAGGAAAAAGATGACGTAAGTACGGCACAAAGTGGCCGGTACG +CGGCAGGTGCATGGGAAGAAACTGCGGAATGAAACAACCGCGAGCTAAGAGATGGGGCAGCGGGAGAAATGAATTCGAGT +TCCGCCTCCTACCAGGAAGAACCGGCTCGGGCCGGAGGGCTGCACGGAGGACCACACGGACGCCTGCGGGCCCGCCCCTT +CCGCTTCACGACGTTCAGCCTGCGTCTGGAACTGGAATGGCCTAGCCCAAAGCTAGATAACAGGTAGATTGTTTTTCCGA +CAAATTATCAAACGACCCATCATTGCACTCTTTCAAAATTTGATTCTCAGACGTACCCATTCTTTTTTTTTTTCCTCCGG +GAAGATGAGATATACTCATTCTTGAAAATACCTCCGGGCTTGCCTTCTGCACACTTCTTTCCCTCCCTGTCTCACGCCAT +GGTAGCGTCCGCCTAGGTTGCAGGCGACCCGCGGGGTGGGGCACACCATTCAAAGAAGGGGAGGGATTGAGGTTTGCATC +AAAACAAATACCCCTGCCTTTGCAAAGGCCATAACTAAGTAATCCAGAAAAAGAAATGCAGGCGGAGAATAGCAGCCTCC +CTCTGCCAAGTAAGAGGAACCGGCCTAAAGGACATTTTCTCTCTCTCTCCTCCCCTCTCATCGGGTGAATAGTGAGCTGC +TCCGGCAAAAAGAAACCGGAAATGCTGCTGCAAGAGGCAGAAATGTAAATGTGGAGCCAAACAATAACAGGGCTGCCGGG +CCTCTCAGATTGCGACGGTCCTCCTCGGCCTGGCGGGCAAACCCCTGGTTTAGCACTTCTCACTTCCACGACTGACAGCC +TTCAATTGGATTTTCTCCATCTAGCGGAGCCGGGGGCTGCCTGGAAAGATCGCTCCAGGAAGGACAAAGGTCCGGAAGTT +GTGGGACCTTAGCAGCTTGGGCTCCCCGGATCACCCCCAAATGATCATTTCGGAATGGAGCCCCAGTTTTCACTAGGATG +CCATGGGCTCTAAAATATACAGCTATGAGTTCTCAATGTTTCGAGATCCAAAAGTCTCAGACCTCAATGCTTTGTGCATC +TTTTATTTCAGGGATTCCCTACGCCCAGCACCGGGTGGATGTGCAAAGAAGTACGCTTTAGGCCGGCTCAAGGTTCCCCA +AAGCTCCACTCCTCTGCCTAGGCGTTCAACTTTGAGTTCGGATGGTCCTAACATCCCCATCATCTACACCCAGGTCTCCC +AACAATGCAACTCCTATGATGATCCCTCTAGCCAAGCTTCCATCCCACTCACCCCCAAACTCGCTAAGTCCCCACTGCCC +CACCCCCAGCCCCAGCGATTTTCCCGAGCTGAAAATACACGGAGCCGAGAGCCCGTGACTCAGAGAGGACTCATCAAGTT +CAGTCAGGAGCTTACCCAATCCAGGGAAGCGTGTCACCGTCGTGGAAAGCACGCTCCCAGCCCGAACGCAAAGTGTCCCC +GGAGCCCAGCAGCTACCTGCTCCCTGGACGGTGGCTCTAGACTTTTGAGAAGCTCAAAACTTTTAGCGCCAGTCTTGAGC +ACATGGGAGGGGAAAACCCCAATCCCATC diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/chromatin_active_promoter_chr19.fa b/nim-skills/genomic-intelligence-nim/assets/demo/chromatin_active_promoter_chr19.fa new file mode 100644 index 0000000..2b97a66 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/chromatin_active_promoter_chr19.fa @@ -0,0 +1,502 @@ +>human|chr19:35546347-35586347|GRCh38 +GGACCTATCCTCTATCTCCCCGATTCCTGTAATTTTGCCACCATCTGGTGGTTCCTCTTCCAGATGGGCCCCCAGAACCT +GTCCTGCCCTCTTCCTACCCACGAACTTCCCACAAATCCCACGTGGTTTATCTTGATCCCCTCACCTTGAAGTGACCTCT +TTCTGCTTTCTGTTCTCAGATGCTGTTCTTGGCCACTTTCTTTCCCACCTGGGAAGGCGGCATCTATGACTTCATTGGGG +TGAGAGGGGCCAGGGAAGGGAAGGGAGTTCAGGAATGGGGCTCCCTGTCCCCCTGTGCTTACTTAAGCCTCAACCTGACC +CGCAGGAGTTCATGAAGGCCAGCGTGGATGTGGCAGACCTGATAGGTCTAAACCTTGTCATGTCCCGGAATGCCGGCAAG +GGAGAGTACAAGATCATGGTTGCTGCCCTGGGCTGGGCCACTGCTGAGCTTATTATGTCCCGGTGCGTACAGCAGCCTGG +AGCCCAGACCCCTGAGAAGGGACACCTGGGTTCCACGGGGGTGCTGGAGGGCAGGGGCTCAAAGCCTGGTGCTGAAGGTG +TCTGAGTACTGGAGAATCCCATCCTTTGCCTTCCTCAGCTGCATTCCCCTATGGGTCGGAGCCCGGGGCATTGAGTTTGA +CTGGAAGTACATCCAGATGAGCATAGACTCCAACATCAGTCTGGTAGGCAGTCGTGCTCTCCCACATACACATTTCTGCT +GGCGGCCATACTCCTCCCCAAGGCCTGGCCCCGACTTTCTGCCTCCCTCTAGGTCCATTACATCGTCGCGTCTGCTCAGG +TCTGGATGATAACACGCTATGATCTGTACCACACCTTCCGGCCAGCTGTCCTCCTGCTGATGTTCCTCAGTGTCTACAAG +GCCTTTGTTATGGAGTGAGTTGGGTGGGGTTTAGGGCTGGGTCCAAAGTGGGGTGGGTTATCTAGTCTCCCTTCCTTATT +GTGACATTTTCCTGCAGGACCTTCGTCCACCTCTGCTCGCTGGGCAGTTGGGCAGCTCTACTGGCCCGAGCAGTGGTAAC +GGGGCTGCTGGCCCTCAGCACTTTGGCCCTGTATGTCGCCGTTGTCAATGTGCACTCCTAGGCTTGGTGTCTCAGACATT +GATGTACCTTTTCCCTGCCTCACTCCAGGTTTTAGTGAAGTAAACAGTATTTGGAAAGTTGTTGCTGCCTCCATTTCTCT +CTCTTGGGAACTGTCTCCCAATACCGTGTCCACCTGGGTCTCAGAGGCCCTGGTTCTGTCTCAGGAGCCAGGTAGACAAG +CTGGAAGCTAGCCAGTCACTGACTTGTCCCATGTCTTGTTCCTCAGGCTCCTGGTTTGCCAGGAGTAGACAGAAGGTTTG +GATGATCTTTGAGCAGTGGCAGAGGCCAGGGCCCTCAGGGAACAGATGATAGAGGGGAGCTAGAATCCAAGAGAAGGCCC +TTGGGGGGCTCTTCCTCCTCACAGCCCCAACCTGGGCCTCCTCACATGGGCCCTTCCCGGGCTGGTTGCCTCTGAGGCTC +CTGGCCCCAGTGTCCCCCTCCAATCCATCCTCTGTATGGCAGCCAGGGGATCTATCTGAAACCCGTCTAACCAGGTCATC +CTCCCACTTGCAGCCACTTGCGGCCCCTTGTTACACAGTGGACAGTCCAATTGCTTGGCCTTTGGTTTTACCCAACCAGC +AAAACCAGCTTTTCTGAAACTGCTCCCTAGAATAATTTGTCCAGCCAGATTCTTAACATCGTTCAAGCCATGGGGTCAGC +ATGGGGCTGGGGGGAGAGTTGTGACTGTGAGCTCCTCAGTTCTATGGCCCTCAGATCAGATCCCAGCCTGAGCCTTCTCA +GGGTGGAGTGGAGAGACAGCTGCAGCCAAGAAGCAGAGCAGTGGGGCCCCCAGCTTGGACATTGTCCTGGATGCCCCCCT +CCACCCTCAGCCTTCCTTGGTCCACTGAAGCCGGCTCCCCGCCTTTCTCTGAGGGGGATGTGTCAGAAGTTTTGAATGTC +ATGTTTAAGCTCCACTTTGATGTACACCCTCCCCACTCAGGAAGATGCTCCCCATCCTTGGTGTTCCCAGTGGGGTACCC +CAGGGAGTAGGATAGCACCATTGCCCCTCCTCCTCCACCAGGCCGTTGAAGTTCCACCTGATTTTTTTTAAGCTTAGGCC +TAGGAAAGCTCACTATGACCATCTCGATGTTTCCAGAGGGAGCATTTGCCTTCAGACGGCAGCTGCCATCTAGGCCACTC +TTCCTCATTGTTTGGAGTAAAGACAGGGTCCATGGGTCTCTTGGGAGCTGGAAGTGATTGATCACCTTGACTTTGATGTA +GAAAGGAAGTAGATGGGGCAGTCTATCTGGGTGGACTTGTGACAAGGTCACTTTCTCCCACACTTCCATGCCCCACATAG +CTCTTCACACATATTGAGACAAGTGTAGGATGCAAAATTACCAACTGGAATAATCCCAGCTTACATGGGGTTCAGGGAGA +GAGACTGGAGTGGCTGGGCCTGAGTTGGCAGAGGACGGTGAAGCCTGGGCGGTTGGACTGTGGGGAGCCAGGCTTCAGGT +GATCGGGGTTATGATGGGAAAACCCCGGGTTATGGGGACCCAGAGGAGCCGCCTGGCCTGCCGTGGAAGCAGTGCGGGCT +CCCCTGAGCAGAGGACATGTGAGCTGAGACCTAAAGAATGAGTGATTGGGGCAAGGCAGAGGTAATGGTCTTGAGGTCAG +AGAGGGGGCCTGTTTTTCCCAAGGGAACATAACTGGTTGGAATGAGTTCAAGGGGACTTGTAAGACTACAGAAGCTGGCA +GGGGTCAGATCACAGGAGGCTTTGGGAACCAAGGAGAGCTCTAGGCAGAGGAAGGACAGGGTCAGATTTGGCTTTAGGAA +GCTCTGCATGGCTGTTGTCTGAAATGGGAAAGCTGAGGCCACGAGGCCAGGGCTGGACCAGGGCAGGGCTTTGTGGGGTT +AGGAGAGTGACTAGAAGCCAAGCCCAGGTGTTGGTGATCAGTGGCTGTGTGTATTTATTTACCGGCAGGGGGCGCTAACA +GGTAAGGGAGGAGCAAAGAGTTCCAGGATAACTGGAGTTTGGGGCTTGTAAGCCCGAGGGCTCACCACGTTTCCAAGGGA +GAAGGGACCACACTGATGGGACAGTGGGACTATCAGATTGGGTCAGTGCATGGGTACAGGCATGGGGGGTGATGAAGAGG +CCAGTGTAGGTCACCAACACTGGGGGAAGCTGGGGACAGAGGTGGGTCTCACTGCAGAAACAACTGAAGCCATGGGGGAC +TGGGGGGCTGTGGTCACAAGGAAGGAGAAGCCCAGGCCCTAGCCAGAGAAAGCCACATAAGAAAGAGGAAGAGAGGTGAA +CAGAGGGGCTGGGAAAGGAGCGGCAGAGATGGGAGGTAGGGGGATGGGGTTAACCTTTCAGGTGAGGGGTGTGAGGAGGG +GACCTCCAGGAGTTGTTCAGGAACTGGCCATTGCCGGGACAGAGGAGTAAGCAGGTAGGCTCAGAAAGGAGACACCGCTG +GGGGGTGGGGGATGCTTGATGTGGAAATGACTTGGGCCCCCTTGTGTCTGGGAGCCTCCAGGAGGGAGAAGGGTGCTGAG +AACAGAGAAAGCCCAGAGGTGGTAGGGGGTGCCTATCGCCACGGCCCAGCTTGCGTTTAGATGCCATGACCCTGGGCAAA +GGAATAGGAATCATTTCCCCAAGGCAGGTTTATTGAGGACCTACTATGTGCCAGGCTGTGTACTAGGCACTGGAGGTGCA +GCCCTGGATAAACAGCCCCCATGTACAGGACTGTGGGAGATCACAAGCACTAATGAGAGACGCTGAGGACAGTGCCTGGC +ACCAGATACAGCACAGTCAGCATGAGCTGGTTTTATTACCATCGCCCAGGACACAAGCGTGTCTTTAACGAAGGGCCCTC +AGGCAGCCGTCCAGCCTGGACTGGAGTCCTAAGAACAGAAACACCCTCCAGAAGCGGTCAGCTGTACTCCCTGTCAGAGC +CCCACCGCCACCACAGGTGGCGGCTTTCCCGAGGCCAGCCCAGAGGACTGCCCAGGCGCTGCTGCTCCAGGAGGTGCGAA +CCTTGGGAATGGGGGAGGGGAGTGGGCAGGTCCCTCCAAGTTTGGGGTGCCGTGGGCTACAGAAGCAGATACTGGTGGGG +CTGGGACTCTTGGTTGCTCAGATATCTTGGTGGCTGTCCAGAGGGTCCCACGAGCCCTGCCCCCACCTGCTGTGGCAGTT +GCAGGGATGCTTGAAGGCAGTCGTCCCTCTAATAGTAGAGTTCCTGGTCCCACCAGCCTGGGAGAGAGAGGGAGAAAGGA +GACTCAGTGCTGGGGGTGCCACTTAGGCAGGGCCAGGGGCTCAGAGGTCAGTGCTGGTTGCTATGGAGGGTCAAGGGCTT +AGAGGCCAAGTGTTGAGGATCAAAGGTGGGTGCAGCTGCTCAAACGTTTCAGTCCCCTGCCCCCAGGCTCCCAGTCTCCA +CACTCACTCCCTGGGCAACAGCGAACTCCAAGCTTCCGGATCTCATCATAGACGAAGATGAGGATGCCGTAGGGCAGGGG +GACCAGCCACCACTGGAACCTGAAGGCACATGGCAAGGTGAAGGCCATCCCAGGCCTGTGCCCTACAGCCCCCTCCCTGT +CCTTGCCCCTCACAGCCTCTCACCGAATGGGCATGAAGTTGAAGATGTTGGGCATGCCGGGGCAGTAGCACAGGAAGCAG +CCGATGCAGACCTGGAACACGATGGCGATCACCAGGATCTTATTCCTGGGGGTGGGCAGAATGGGACAGGCCATTAGGAA +TTGGGGACGTGATGGAAATCAGGATACTGTGGGTCAAAGTAGGTCAGATGTCAGCAGCAGCAGGGAGGTGTTCTACACAC +TGAACACTGGAGTGGCCCGGGCCTCTCAGCACCACCCCTTTAGTGAAATGTGGAGGGGGCCGTGGGGGGAGTTATTGGCC +AGTTAGAAAGGTTTTTTTGGCATGTCACCATCTGGCACTGGCACCCGCTGGCATTTGCCGGCTGTTCTAAACCACAGTCA +GGATCTGATGGGAGTTGGGACCAGGGGTTGGAGGGCAGGAAGAGGGCCAGCCAGGGACACCTGAAGAAGCCTTGCTGGAA +GGCAGAGAGACGGCGCGTCTTGCGGATGAGGACATCGGCGATCTGGCACACCTCAATGCTGATGAAGAACACGGTGTAGC +AGGTGTACTGCTGGTACAGGCGCTGCCCGAATGTCTGCAGGCCAGGGGCAAACGGAAACAGCCTGAGTCCAGCCTGAGTC +CCGGCGGAGAGCCTCTGCAGCCCACCGGGCATAGGGTCCCAGGGCCGTGAACCCCTAAATGCTCTCTCTGCCTTGCATCA +GAGTGTGGGGGTGGGGGGAAGGAGAGAGGCAGGGTCTGCCAGGTGTGCAGGACCCCAGAACGTGGGGCCCAGAAACCTCA +GCCTAGCAGAGCTTGGATGACAGTGGCCGGGAAAACTGTAGGCTGGGCCGACTGCTTTCATAGTGAAAGGGGGGAGGCAC +CCAAAAGAAAGGGCCTGGGAAAGGGGAATTGAAATCCTCAGATGGGATTTGCAAAGTCCAGTGACTCCAGGGGCCAGGCA +GATGGCAAAAATAGGTGAGGCAGTCACCGCGGGCCTTTGGGAAAAGAGGGCAGATGCCCCATTTAAAGGGGGCAGCCACT +ATGCAGCCCATTTCTTCAACACAGCTACTTTTTTTTTTGAGATGGAATCTCGCTCTGTCACCCAGGCTGGAGTGCAGTGG +TGCAATCTCAGCTCACTGCAACTTCCGAATCCCAGGTTCAGGAGATTCTCCTGCCTTAGCCTCCCAAGTAGCTGGAATTA +CAAGCATGTGCCACCATGCCTGGCAACACAACTCCTAATACCAGCTAACTGTGGGGATCACTGACTGCTCCAGGTGCCGA +GTGTTGCACGTGCATTAGCTCATTTAATCCGCTGGGTAACCCTAGGAGGTAAATCAGTGGTGCTGGAACTTGAACATGCA +TGAGAATCCCAGCAAGGGCTCCCAGAGGGCTGGGATAGAGCCTGAGAATTTGCACTGCAAACATGTTCCCAGGAGATGGT +GATGCTGCTGGTCTGGGAGCAAACTGAAAACCACTGAGGTAGACTTTGATATTCTCTCCACTTTGCAGGTGAGAAAACAG +GCACAGAGAGGCAAAGCAACCTGCCCAGGGTTACACAGCTTGTGAGAAGCAGTACCAGACCATAAGTCCAGGCAGTCTGG +CTTCAGTGTCTACCTTAACCATGATAGTAAATGTTTAAGGGAAGTATCCTCGTCTGTATGTAACTCTACAGGTGAACTAA +ACACATCTGCTGGCCAGATCTAGCCTCACTGTGCTCCAAACCTTCATTAAAATAGACCACATGTGCAAATACCCTGTGGG +AGTGATGCTGTAGGGAAAATAGCAGAATAGGGGCCTGGTTCCACATCTGAGATGATGCATTAGTGTCAGGGCAGAGACAC +CCATCTGCAGTTGCGATCATCAGAAGCAGGAGTTTGGAGCTGGAGATGGTGGGAAAGGCCCTTGCCCCCCCGAACTGGCA +GGGAGTCTGGGGGTCCGGGATGCTCTGGCTGAACTCAGTCACACGTGGAGGAACAAGTGGGCCGCACACAAGGCAAGTTG +CCCTGGGAAGGAGGGAGCCCAGGGATGGGATGGGGCGGGGCAGGGCTCACCCACTCCTGGCCGTAGCTGTCCTGCAGATC +TTGTAGGTGGTGGTCCTCCCACTGCGCCCGCAGCCCCACGCACAGCAGTGGGAACCAGCCCTCCTGGGCCATTGCCGTGA +AGTAGTCAGTGAAGCCAGCAAAGGACTGAATGGCACCTGGAGAGAGACAAGGGGACACAGGGAGACAGAGATGGACACAG +AGACAGGGACACAGGAAGAGAGGGACATGGAGAGACAGGGACACAGATACACAAAGGTCAAGGACACACAGACAGGGACA +CGGGAAGAGAGACAGGGACACAGATACACAAGGTCAAGGACACACAGAGCCAGGGACACAGAAACAGTGACAGAGACACA +GAGGCAGAGAGAGAAGCAGGGACAGAGAGACAGAGGCAGGGACAGAGAGAAAAAGACACATCCAGGACCCAAAAAGACAG +AAATAGGCAACAACTCAGAGACAGGGTCATGGAGAGCAAGGTCAGAGAGAGAGCAGGGACACAGCAGAACCAGAGAGACT +GTCACAAACAGAGAGGGACACGGAGGACAACGGAGACCCAGGACCAAATGCAGACACTGAGGTCCAGAACCAGCCGGAGC +CCAAGGCAGGGCCTGGGGCAGGCGAGCAGCCCAGCGCAGAGCCCCCCACCTCCAGGCTCCCCGGCCCACGGGCACCCACC +AATCTGGAAGTAGGAGTAGGCAGCCAGGGGCTCGTTGACCAATCTGTCACGCTTTGGGTTGCGTGGACGCAGGTGCATGA +TGTCACTCTCGGCCTTTTCATATGCCAGGGACACAGATGGGAACTGGCCAGGAGTGGAAGGAACTGGGACTGAGGGTTTG +GCTGGGCCCTTGTCCCCTCCACTTCGGGTCCCCCTTCCCCCACTTGTGAGCAGGAACAGGACTGAGGTTAGCAGGCAGGA +CCTGCAGGGACGGCACAGCCACACCAGCCTGGACAGCCTGGGCCCCACTGGCCCCTGGGTGTTGGCATCCTGGTGCCCAT +CTTCGTAAGAACATCTGCTTTTATCTTCTCCCTCTGTCTCCCTCCCTCTCTTTCTCTGTTCCTCACTCTGTTTCTCTGTC +CCTGTCTCCAGTGTAATTCTCTGTGACTGTATCTGCTCTTGTGTATTTCTGTGTCACTCCCTATCTCTGTGTATCTTCAG +TCTCTCAGTGTCGCCGTGCCCCTTCATCTGCTTGTGCCTAGAGTGGCAGCAGAGCATACTGACCACGACCACAGGCTGTG +GGACCTGTGACTGCTCAAGCTCAAGTCACAGCCGGGCCACTTATTTGCCCAGTGACCTGGGACAATCCACTCTACCTGTC +TATGCCTTGATGAGCTCATCAGTAAAGTACGGGTGATAGTAACAAAACTCATCTCATAGTGTGGTTATGAGTACAAAATT +AAGGAAATGATGGTGTGTCTGGCCCAGAGAAAGCACTGTGTAAATGTTACCGAATAAATACCTGTCAACACAGCTGCGCC +TCTGGCTGCATTCGTGACTGTATCTGTGGTTCTTTTCTGTCTGTCTGCCATGGGGTCTATCTGAGGGGGTTTATTTGTCC +GTGTCTGTTTAGGGGCACGTGTCTGTGATTCAAGTTTGGCCAGATACCTGTTCTGTTTCCATCTCTGTCTGAGTATCTGT +ATCTGAGTCATGTGTGTGCATGGGTCGGCCCGGGCCTACCTGAGTGTCCGCCTGTGTGTGCATGGCTGTATGTCCATTTA +GGTCTGTTCACCTGCCTGCCACCCATGTGTCCTGCACTGGCTGTCATTGCACACACAGGTCTTGTCTGTCACTCTGTGCC +CAAGAGTGTCTGTGGTGGTCTCTGTCCCTCCTGTCCATCTGCAAGCAAGTGTCTCTGGGCACCCTGTGGATGGGTACCCT +GGGCTGTGGACTTACAATGTCAGTGCAGAGTTCGATGAAGAGGATGGTGATGCACCCGAGGGGCAGGGGCACGCTGACGG +TGATGTAGATGAGGTAGGGTGTCAGCTCTGGGATGTTCTTGGTCAATGTGTAGGCAATAGACTTCTTCAGGTTGTCGAAG +ATCAGTCGACCTGTGGGGTAGGGTGGGCACCTCAGCCTCCTCACAGCCCTCTCCCTCCTGTGCCCACACTGCCTGCCCTC +CCCCTGGCGTGGCTCGGACCCTGCTCCACGCCTGTCACAATGGAGGCAAAGTTGTCATCCAGCAGGATCATGTCAGCTGC +ATTTTTGGCAGCATCTGAGCCAGCGATGCCCATGGCTACTCCGATGTCTGCCTTCTTCAGAGCTGGGGAGTCATTCACAC +CATCCCCCGTGACGGCCACAATCGCACCCTGCAGGCAGTGGGTGCAGGTGGTGGGTGGGTGGTCAGTGAGAGGCCGGTCC +AAGACCAGCCCCGCCTGTCTGCCCGCCTGCCCACCCTCATCAGCAGGGCTCACCAGCCGCTGGCAGCTCTCCACGATCAC +CAGCTTCTGCTGGGGGCTGGTGCGCGCAAACACCATCTCGGGGTGGGTGCGCAGGGCCTCGACCAGTTCCGATGGGTCCA +TGTCCTTCAGCTGCATGCCATTGATCACACAGGCACGGGCATCCCTGGGGAGGAGATGGGAGGACCTCGCTGGGACCTCG +GTCTGTGCCAGATGTGGGGAGAACCCCGGGGAGGTCTGGGGGGGCTTACTTGCGATTAACCTGGTCTACGGGCACACGGA +GGCGGGCAGCGATGTCCTCCACTGTCTCGCTGCCTTCCGAGATGATGCCCACACTGGCTGCAATGGCCTTGGCGGTGATG +GGGTGGTCACCCGTTACCATGATCACCTGTAGGGGGAACCAGTGGATCACTGACCCCTTCAGATCAGCCCAATCTCCCTG +TCCTCCCTGGGAGACATCTGCTGATACACGTGTTCATTTACTTGACCAAGCGTGACCACCTCCTACGTGCCTGGGATATA +GCAGAGACAAAAGAGACAAAAATCCCTGTCCTTGAGGAGCTCTAGTGAGGGTGACAGAAAATAAAGAAACGAATTATATA +GTGTGTTAGAAAGTGGAAAAAAACATATTAAGCTTGGTGAAGGAAACGGTGACTCGATTTTAAGTGTACCCAGGGAAGGG +CTTATTGAGAAGGTGATATCTGAGCAGAGACCTGTAAGAGGTGAGAGAGTCAGCCACGTGGAAAGCTGGGAGAAGAGTGC +TCCTGGCAGGGAGAACAGCAGGTGCAAAGGCCCTGAGGTGAGGACAGGCCCGAACTGTCGGAGGAACAGCAGGGAGGACA +CCATAACTGCAGAGGAGTGAACAAGGAAAGAGGGCTAACGAACAAGCTTAGAAAGGTAACAAGGCCCGATGTAACAGGGC +CGTAGAGACACGGGAAGGGCTTGGGCATTGCCTGCCTGGCCTTGGCTTTCCCACCCTTGTTTTGTGTTTGGGGAACCACT +CCTCTCCCCTACACCATCAGTTGCAGTGAGGTCCCTGGCTAAGATTGGGTAAGTAAGCCCAGACCTGGCCAATCAAGGTC +TTCCATCCCCCAGCCCCAGTGACTGGCTCAGGGATAAATGAGTGACCCAATCCAGTGCTACTGCAAAAGAGGCACTCTCT +TTTTGTGGGGTGGCTAAGCAGGTGGGAGTTAAGTTTGAGCTGCTGGAGCAGGGGTGTGTGTGTCCCCAAGTGAAGGGAGT +GCCTGCAAATAAAGCCAGCAAAGAGAACAGCAGAGCTGAGACATGGAGAAAGGAAAATTCCTAATGACACTGAGCTCCTG +GATCTGGCTAGACCTGAAGCTTAATTCCCCAGAATTTTTCAGTATCATAAACCAATGCATTTTGGTTCAAGCCAGTTTCA +GGTGGGTTTGTCATGGGGTTCTTCAACCCAAATCCTGCTGCCATCCTCTGTCCTCACTCCACTTGTTCCTCCCCACAGTG +GCATACCCGGATGCCTGCGGTGCGACACTTGAGCACAGCATCAGGGACGGTGGCCCGGGGTGGGTCAATCATGGATACAA +GTCCCGCAAAGCAGAGGCCGCTAGATGGAAAGTTCATGGCCTCTACGTCGAAGGCATAGCCAGGCGGGTAGTCCTTCTCA +TTCAGGTAGAGCTGGCAGAAGCCTGACCGGAAACGGGGAAGTCAGGGAAGAGCCCTGGGCACACCCTTTCTTAGCAGGGC +CAGGAAATGGGTAAAATAACCAGGCCCCTTGCACCAAACACCTATGGATGCCTGACCTTGTGCTGACCCCTTCACTCACA +TTATCTGAATCTACCCTCACAACCACCCTGTGAGGCCCATTCTCATCTTACAGATGAGGAAACTGAGGCTCAGAGAGGGG +ACATTTCTTGCCAGAGGTCACACAGCAAGTAAAAGGCCCAGAATTGGACCACAGATCTGCTTTCTAGGGTAGAGGCAGCG +AAGTTTAAGGCGTCAGGACAAAAATTGGGAGAGGTTAGAGGTCAGGATACGGATAAAAGTCCAGGTGAGGACTGGGGTCA +AGGTAGAAAGTGAGGACAGACAGGGGTCAGGACTGGTACAGGGAAAGTCAAGGGTGAGGCTGTGGACTGCGACAAATCAG +CCAGCAGCCAGGGATGAGGACGGTCAGGGCTGGGCCGGGAGTGGTGGGCAGGGTCTGTGCTAGCTCCTCCTCGCACCTGG +AGTCTCCTCCCCTGCCCAGGGGTCTCACCGAGCACGCGTTCGCCCAGGCCTCCCAGGCTGAGGTAGGCGGTCTGGAAGGC +CTCGCGCCACTGCTCGTCCAGCGGCAGCTCCTGGCCCTTGATAAGGATGGAGCTGCAGCGCTCCAGCACGCGCTCGGGGG +CGCCCTTCATCACCAGCAAGTGTCGCGGGTCCCGCGGGTCCTCCAGCGTATGGATGGACAGCTGTGGGCGGGGGGGAGAG +GCGAGGCTGTGGACGGGGGAACGGGGCGGGGCTGTGGACGAGGGAACGGGGCGGGGCTGAGGAGAGGGGCGGGGCCGAGA +GCTCGGTGCGGGCTCTGAGAGCTGCGGGGAAGGGTGAAGGTGGAAGATGGAGGCCTTGTGTGGAGGGGTCCTTGGTAGAA +GGTAAGCGTTAAGGCGGGGCTAGGTGCAGATTTGGAGTCCTGGACGCAGGGAATGAACAGAATTAGGGTGCGGAGTTGGG +CTGGGGGCGGATTTGGAGAGCGAGGTGCTCCCCATGGACAGTCCCGCCGAGGAGAAGCTGTGGGCGGGGCTGGGTGGTGG +GCGGGGCCTTGCCTCTGGTGGACGGGGCCATAGGCGGAGCGGGAGATGGGGTGGGGTTTGGCTGCGGAGAGAAGGGGCAA +GGAGCGAAGCCCCTCGTGGCCCGCTGATGTGGGTGTGGCCTGGGGCGGGGCCCGAGGTGGGCGGGCCCAGGCCGTGGGCG +GGGCCGGCTGCGCACCTGGAACTTGTTGGTGGAGTTGAAGGGTATCTCGCAGACTTTTGGGAAGCGGTCCCGGTAGCCCA +TGGCGTTGCCCAGCGTCAGCTCCGAGAACTTGAGCAGCGCCGTCTCCGATGCGTCTCCAATCACGATGCGCTGGGAGCGG +GGACCGGTGTCAGGGGCGAAGCCGGCTACACCAGCCTCCCGGGATTCCCTGGAGGCCCCCTGGCTCTCACCTTGGGCACA +GGCACTGCATCCTGGCCGGACTTGAAGGCGGCGCGGTTGCACAGGGTGAGCACCCGGCACAGCGCCCGCCACGTCTCCGA +GGACTGGTCAAACGTCTGCCCTGCAGACCAGGCGTCCAGGCTGGGTCCCGCACGGCGGCTCTCCCGGACCAGAACCGAGC +CCCCTCCTCCTAGGCTCATATCGCGGGCCCCCTCCCCAGACCTGGGTGGAATTGGGTTCCACCCAACCCTGAGGGACCCA +GCCCCCGGATGACCCTTCCCTCTAGACCCGGTAGCGAGTCTCCTTTGAGACCTGGAGCCGAGCCGCCCCGCCTTCGTACA +AAGCCCTCCCTACCTCCCTATCCCTCTTCAGGTCTCCACCATCCACCAGATCCTGCCCTGGCGCCTGTGCCCTCCCTCCC +CCACACCTGACTGGTCTTCCGTGGTGTCAGCTGTGTGGATGTGGTTGTCAAACCACAGATGGGACACAGTCATGCGGTTC +TGAGTGAGAGTCCCTGTCTTGTCCGAGCAGATCACCGAAGTGGAGCCCAATGTCTCCACCGCCTCCAGGTTCTTGACCAC +GCAGTTCTTACTGGCCAGGCGCTTGGCTGTCAGGGACAGGCAGACCTGGGGAAGGGGTGAGCACCGCAGGCTGGGGACCC +ACCCTGGCTTCCAGTCCTCTTCCCCGCGTCAAAGAACGGGGAAGGCTTTACCCCAGCCGCGGGGCTGCGTGTGCAACGTG +CTTCTGCAAACACCAGGTGTTTTCTTGGCCCCAGCTTTTGTTCAGCCAGTGCTTTGTTTGGGACTCCTTCCCCAGTCTGC +CCAGATACAGTAGCGAGGCCCCTCTCTGAGCTGTCCCAGCCGAGGTTCTGAAAATTCTCTTCACACAATCAAAATGAGAA +GAGGAACCTTCCCCGCACCTCCCTGGGGACTGGTCTGGAGCTGGGTGCTGACTGTGGAAGGTCTGGTGACATGCTGGCTG +CCTGCACAGGACATCAGCCTCTTCCAGTTAAGGACCCGGCCTCGTCATCTCTGCGCCCTCAATGTGTGGCACAGGACTTG +CCCCAGGGTTGCCTCGGGAAGGACTTGCTGAATGAGTGGATGATGGGAAGGCAGGAGAATGGATGGGAGCTAAGTGGACA +GATAGACAGGCAGGGAGGTGATGGGGGAAATGTGGAGGAAAGAACAGATGGTTGAGCAGGCCCCTCAGCTCCCTGCATCC +CCGCCTGCCCCCACTCACTGTGACAGTGGCCAGCAGCCCCTCAGGCACATAGGCCACCACGATGGCCATGAAGAAGACCA +TGGCCCGCAGGAAGGTGTAGCCAATGCACATGGCCACAATAAAAAATGTGGCACCGAAGAGAATGGCCAGGCCCGCGATG +ATGTCCACAAAATGCTCGATCTCGATAGCGATGGGTGTCTTCTCGTTTTCCACCCCCGACGCCAGCGATGCGATGCGCCC +AATGATGGTGCGGTCGCCCGTGTTCACCACCAGGCCCTGCACGGTGCCTGCAGGGGGGCCAAGGCGCGACTCAGGGATAG +GGGGCGGCAGTGGGGTGTGCACTGCCGTGTGAGCTGAAGGACAGCCAGTCACTGCCAGTGGAGGATGTGACCTGGGAGAG +GGTAGTGACAGTGGGAGACAGAGAAGCAGTGTGCCCTGGGGAGGTGGCAGTCACGGGGAGGTGGCAGTCATGCAGGAGAG +AGACAGGGAGGCTGAAGCCCCCTGTCCTAGAAGATAGCAGGAGAGAGGCCAGTGGAGGCAGCAGTTACTGGGCAGGCAGG +CGGGGGCTTCACAGACCCTCAAGGCACATGGTGGAGAAGAAGGCGATGTTGCGGGTCTCCAGAGGGCTCTCGTGCGTGCA +CTCGGGTGAGCGGGTCTGTGGCTCAGACTCCCCTGTCAGCGAGGAGTTGTCCACCTTGCAGCCCTGGGCCGCCAGGATGC +GGATGTCGGCGGGCACTCTGTCCCCACCTTTCATCTCCACCAGGTCGCCCACCACCAGTTGGTCAGCGTTGATCTGGAAT +TTGTCTCCATCGCGGATGACAGTGGCTTGCTGCGGGGCAGGGGCACCAAAGTTGAGGTGGACGGGGGTGGGGGTGGGAGC +TGCTGCATGTGGGGAGGTAAAGGATGAGGAGAGCTGGGACCCATGGGGAGAGATGGAGGCCACAGATGAGGGACAGGGGC +CTGATGGAAGGAGGCTACAGGAGCAGTTTGGAGTCTCTGGGATCTGGAGTGGCTGGGTGCTGGGGAACCCACCTGTGGCA +CAAGGTTCTTAAAGCTGGCGATGATGTTGGTGCTCTTGAATTCCTGGTAGTAGCCAAAGCAGCCGGTGACGACAACCACA +GCAATGAGAGCGATTGCCAGGTACAGCTGGGGACAGGGAAGGGGTGGGGTTATTCAGAGGGGCCGGAAGCTGCCTGCCTG +AGGCCACCGACCTGCTCCCTGGTGCCCTGGTTTTCTTGGTTTTCCCCATGCTTTTCCCCACCTACTAGGAAGCTCCATGC +ACCATTCCCTGTAGCCTTTAGCCCCCTCCCATGTCCCTCATGTCCCACACTCGCCTGCTCTGTCTTCTCAGTGTCTTGTG +TTTCTGTGTATATTTCATATCCTCTGGCCCTGAATCCTCAATCTTCCATGTCCCCATATCTGTGACTTGTGCCCCAAATC +ACTGTGTGCCTTGGTCTGACGTGTTCCCTTCTCCTGTGTCCCCAAGCCTTGCATTCCCCATGTCCACTGTCCCATGTCTC +CTCCTGTCCCCATGGCCTGTATTCCCCGTGTCTCCAGTTTCACATCCTGGGTTTTCCATAATCTGCTGCCACCCTCTGTG +TGTCCCCTGGGCCCCCTTGTCCCTGCATCCTCACATCCCCGTCCCTGCGTGTGCTGCAGACCTTGTACGTCATGGTCTGT +GTCCTCTGTGGCCACGGCCCCCATGTTCTAGCTCCCCAGTCACTGTGTCCCGTGTCTCCCATGTCTGTGTATCTCCGAGT +TCCCATCCTGTGTCCCATGGCCATGACTTTTCGAGCCTCTGTCCCATGTCACATGTCCCTGAGTCCCCATGTCCCTTGCC +CTCATCTCTGCCATATGTCCAATGTCCCTTGCCCTGCACCTCCATTTCCTCTCTGTCTCTGTGCTTCTATGTCTCATGTT +TTGTGTCTCTCTATGTGCTGTGTCCTGAGGCTTGGGTCCCTGCCCTGGTGTCCTATGTCTGAGTCCCAGGGTCTCCTATT +CCCCGTGCCTCAGTCTGTCCTGTGTCTGCACTGCATGTCCTCTGCTTCCAAGTCCCATCTCTTTTTTTTTTTTTTTTTTT +TTTTTTTAAGATGCAGTCTCGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCATGGTCTTGGCTCACTGCAACATCCACCTC +CTGGGTTCAAATGATTCTCCTGCCTCAGCCTCCCAAGTAACTGGGATTACAGGTGCCCGCCACCATGTCTGGCTAATTTT +TGTAATTTTAGTAGAGATGGGGTTTTGCCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCTGCCCGCCT +CGGCCTCCCAAAGTGCTGGGATTACAGGCATGGGATTACACGCCCGGCCTCCAAATCCCATCTCTTACGTATCACATTGC +CATACTCTTTATGCCCCCACCTATGTCCCCATACCCAAGATTCACCCCAGTGTCCCTGTGTCCTGTGTCCTTGGGTCTGC +CCCATCCATATCCCAATGTCCTTCACCCTCCATGACCCCTGTCTTGAGACTGCCTTTCGTGTTCGTCTATCCCCATCCTT +CTCTGCCCCTCTTGTCCCAAGTCCCAGGCTCAGTGTCTTCCATCCCCAGGTCCCCATGTCCTGAGCCTGTCCCCACAACA +TGGCTCACATTGTCGTCGGTGGTGAGGTCCCCCTCACTAGCCTGGATGGCAAAGGCGATGAGGCAGATGGCGGCGGCAAC +CCACATGAGGCACTGCAGGCCCCCGGCCAGCTGCCTCGCGAACTTGACGTACTCTGGGGTGCCCCGTGGTGGCCGCAGTG +CGTTGGGCCCATCCCGCAGCAGCAGCTCAGCAGCCAGGCTCGCAGAGAGGCCCTGGGACAGAGGGGCAGGGCGAGGCGGT +CCTGGGGGCTTTCCTCCACATGCACACCCCGTGGAAAGCCCCCTGCTTCAGTTTCCCTTCTCCAGCTTGGTCTGTCCTGC +TCCTTCTCATCTCTTTGTCTCTTGGTTCCTGCCCCCACCCCATCTCTCCCTCCCTCCTTCATCTCTCCCTTTGTCTCTCT +CTCCTCGCTCCCCTTTCTATGTGTCTCTCTCCTGCTGCTCTCTCCTTATTTGTCTCTGCCTTCTCTGTCTTGCTGTCTCT +TTTCAGCTACTCCTCTCTCCGTCTCTGTGTGTCACCCTTTCTCTCTAATGCTTTCTCCCTTCTCTCCCTCTCCCTCTCTC +TCCCTCTCTCCATCTCCCTCCCTCTCTCCTCCCCTCCCTCCATCCTTTCCTCTCTCCCTCCCTCCCTCTTTCCTTTTCTG +CCTCCCTCCCTCTCTCTATTTCTCCATATCTTCCTCTCTTCATCTCTCCCTCTCTCTCCCTCTCTCCATCTCCCTCCTTC +CATCTCCCTCTCCCTCCCTCTCTCCTCCTCCCCTTTCTGTACGCTCCCAGTCTCCAGCTCACCTTGGTGGCACTGGTCTG +GTATTTCTGTTCCAGCTCCGCCACTGACAGCTGGTGGTCGTTCTGTGTGGTGGGGTGGGGCAGGGTGCTTGCTCTGGGCT +CTCCTGGCCCCCTCCCCGCCCACTGCCTGGTTCCCAGCCTACCCTCCAGCTCCCGCCCCTCCCCAGTCAGAGCTCACAAT +CTCCATCTCCTTCTTCATGTTCTCCAGCTTCTCCTTCCTCTTGCCACCCCCGCCACCCGCCTTCTTCTTCTTGCTCATCT +TGGCAGCCATGTCCCCGCCAGGGCCAGGACCCAGCTCCACCGAGTAGAGCTCATAGTTCTCCTGGGAATGGACAGGATGG +AGGGAGGGAGAACTCAGATTCCACTGCAACCCCTGTCCCCACTGCACCCCGGACCCCTGGGCCCCACTCACGGCCTTCCC +CATGGTGCCCGGTGCCTGTGCTCCCACCCAACAGAGCCTGGGCCCGGACCAGTCCTGATATACCCAGGGAGGGCGGTGGG +GTGGAGCAGAACCGCCCGACCACAGCTGATTACAGGCTCCTTGGGGTGACCTCTAGGCCTGGGCACCTCAGGCATTCCCT +CCTGGGCTGGCCCCCCCCTCCCCTGCCCAGATCCCCCCATGTCAACCTGCCCTGAGATCAGGGAGCCCCTGGGAACCGCT +GCAGCAACAAGAAGAGCAAACATAAGGTGCTCATTATGCGCTGGGCATTGTGCTGACGGCTTCCATGTGCTAACTTATTT +AACCTTCCAATAACCCTTTGAGGGGACAAGACCCTTTACAGATGGGGAAACTGAGGCATGGAGGGGTTGAGTCATTCTCC +TATGGCTCCATCACAGGCTAGGACATAATGGAGTGAGAACCAGATCAGCTGGCTGCAGAGTGTCCTCTTTCAGTCTAAAT +AGCACGTGCCTGATCAACTGGAAGAGGAGGGTGCTCCCACACTCTTTTTTTTTTTCTTTTTTTTTTTGAGATGGAGTGTC +ACTCTGACACCCAGGTTGGAGTGCAGTGGTGCAATCTCAGCTCGCTGCAACCTCCGCCTCCCGGGTTCAAGTGATTCTCC +TGCCTCAGCCTCTTGAGTAGCTGGGACTACAGGCACATGCCACCACACCCAGCTAATTTTTGTACTTTTAGTAGAGACGG +GGTTTCACCAGGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCACCCGCCTTGGCCTCCCAAAGTGCTGGG +ATTACAGGCGTGAGCCACCATGCCCTGCCATGCTTACAACACTCTCTATGGTGGCTGAATGTTTACTGAACTCTGACTAT +TCACTATGGGCTGGGTGTGCTCTGTGTGTCACTCAAATGGTTTCCTTAGCATCTAACAGCAGCCCTGTAAAGCAATATTC +TCTTCTTAGCCCCCATCAGGGACTTTGCAGAAGATTTCAACGTCTAAGAATTAGGGACAGGGTTCCAGCCCGGGCTTGAC +CCCAGGGCTTGACCCCAGAGCCTAGCTCTTCTATGGCACCACCAATGGAAAAACCCAAACTTCACTGCAGCAGCACCACA +CACATGCCAGGCTCTGCACGTGTGACCTCACGGGTCTTTGCAAAAAACCCTGTGCAGGCAGAACTATCATTCCTGTTGTG +CAGAGGGGGAAACTGAGGCTCACAGGGACTCACATATCCAGCTACAGACTTTACAGCTCTCAACCATTCCCCGTCCCTAC +CCTAGATGGGGAAACCAAGGTGCAACATGGGGAAAGGATGTGTCCAAGGGTCTTGGCTTGATCTTGGTGTTGGGTGACAG +ATGCCAGGAGGCCTGGGGACTCCCTCCTCATCCCTCAGGTAGGGACCTCCATGGGCAGCAGCAGCGAGGGGCTGGGCCAG +TGGAATGGTGGGGACCTTGGTATGTTATGGGGTGAGCGTGTCTCCAGGAGCAGGTGAGCGTGCGCCTGATAAGATAACTG +CCCTGGCAATGTCCTTCTCTACTGGGGCAGGTCACCTGGGAAACTCAAAGCTGTTGGGCAGCCAGAGCTCCTCCCCGCAC +CCACACGGCTGGTCATCCCCAGCCTGCTAGAAGAAACCTCCAAAGAAGAGGTGGCGTGGGGCCACATGCTGTCCTTGTAG +TGAATCTACTCGCTCACTGGGCTCCCATCAGCTCTGAGCCATGTATGTCAAACAGCTTGTGTCACCCCCTGCTTACAACC +CTCCAAAGCCTTCCCTTCCCACTCAGAATAAACTCTGCACTCCTTCCTGCAACATCTGGCCCTGGTCACCTGTCCTGCCT +CTGTTGCTGCTAGGTTTCCAGGGGCACTGACCTCTCTGCTGCACTTTGCACAGACCAAGGTCGTTCCTGCTTCAGGACCT +TGGTACTTACAGTTCCTTCTGCCTGGGCCCCCTTCCTTAGATGTCTGCACTGGCTTTCTCACCTCTTTCAGGTCTCAGCT +CAAATGTCACCTCTTCAGAGAGTCCATTCTGTAATACTGCACACTGTGTTCTGTTCCTTTACCCCACTGTATTTACACCT +CCTACTCCAACCTGACACTGTGTTTTCTTTTTATTTGTTTGGTGTTCATTAGAAGGAGGACTGGGCCGGACACTGTGACT +CACATCTGTAATCCCAGCACTCTGGAAGGCTGAGGTGGACGGATCATGAGGTCAGGAGTTCGAGACCAGCCTGGTCAACA +TGGTGAAACCCTGTCTCTACTAAAAATACAAAAATTAGCTGGATGTGGTGGTGTGTGCCTGTAATCCCAGCTACCAGGGA +GGCCGAGGCAGGAGAATCACTTGAACCTGGGAGGTGAAAGTTGCAGTGAGCCGAGATCATGCCACTGCACTCCAGCCTGG +GTGACAGAGTGAGACTCTGTCTCAAAAAAAAAAAAAAAAAAAAATAGAAAAATAGATAGATAAGAGATGTTAGACAGATA +GATGGATACATAAATGATAGATGATTGATAGATTTTTTTTTTTTTTCTTTTTGAGACAGAGTCTTTCTCTGTCGCCCAGG +CTGTAGTGCAGTGTCATGATCTCGGCTCACTGCAACCTCTGTCTCCTGGATTCAAGCAATTCTTGTGCCTCAGCCTCCCA +AGCAGCTGGGATTACAGGCACCCGCCACCATGCCCAGCTAATTTCTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTG +GCCAGGATGGTCTAGAACTCCTGGTCTCAAGTGATCCACCCGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGC +CACCATGCCTGGCCAGAATTTTTTAAATTTTTGGCTGAATCATTTGGAAGCAAGTTGGAGACAGGATCCCCTTTATCCAT +ACTTAGGCATGTGTCTTCTATGAATAAGGACATTTTCTTACATAAGCACAGTCTAATAATCAAATTCAGGAAATTAACAT +TAATAAAACACTAGTAAATAATCTAGAGCAAGCTTGTCCAACCCATGGCCTGCAGGCCATATGTGGCCCAGGACTGCTTT +GAATGCTGCCCAATACAAATTCGTAGACTTTCTTAAAACATTATGAGATTTGTTTGCGATTTTTTTTTTTTTTAGCTCAT +CAGCTATTGATAGTGTTAATGTATTTTATGTGTGACCCAGGACAATTCTTCTTCCAATGTGGCCCAGGGAAGCCAAAAGA +TTGGACACCCATGATTTGGAGGATTTATTTGAATTTCCCCAGTTTTCCCACTAATGTCCTTTTCCTAGTCCAGGATCCAG +TCCGGGACCACACCTCACATTTTGGCTTCCTCCATTGCGTAACAATTCCTCCATCTTTCCTTGTCTTTCATGACCTGGGC +GTTTTGGAAGAGTATGATTCAGTGATTTTGTAGACTTCGCTCAGTGTGGCTTTGCTGCTGGTTCTTCGTGATTAAGTTCG +GGTTGTGTGCTGGCAGGAACACAGAAGGGATGTGTGTCCCCCCCATCCCCTGCCCCAGAGCATCATCGTGTCAGGCCATG +CCCCATTTTGGAGTCTGTAACTTGTCTAGAGCAGGGTGGACATGGTGGGGAGGGGTCTCAAGAGCCTTAGGGAGTGATCA +GGAAACCATTCTATGCCCTCTTTAATTTTTACTCAAGACAGTGCCACAGCCAGGGCTGGCACCCAGCTGCCCTGGTAGTT +AAAGTAATTGAAAGAAATACAGCCACTGCCTGAGCCCCCAGCACTTCCCCTAAGACTCCAGACCTCCCACACCCAACCCC +TTAAAGTGGATGCCTGTGCCAGTCCCAAGGCCTTGTCCTTTTTTTTTTTTTTTTTTTTTGAGACGGAGTCTGGCTCTGTC +ACCTAGGCTGAAGTGCAGTGGCACGATCTTGGCTTACTGCAACCTCCACCTCCTAGGTTCAAGCGATTCTCCTGCCTCAG +CCTCCCAAGTAGCTGGGACTACAGGCACGTACCACCATGCCCAGCTAATTTTTGTATTTTTAGTAGAGATGGGGTTTTGC +CATGTTGGCCAGGCTGGTCTCCAACTTCTTACCTCAAGTAATCTGCCCACTTCAGCCTCCCAAAATGCTGGGATAACAGG +TGTGAGCCACCACGCCCAGCCACCCTTGTCCATTCTGACCATCCCCTGCTCAGCTAGGTTCATGGGTAAATACTTTTACC +TACTCCCCTAATTTTGCAGTCTTCAGATGGTATGCAAGTTGTGTGTTTTTGTGGGGAAGGTCTTTGCTTGGGTCATTTAT +TATTTTACCGTGTGTCTAAGCAATACTAACCCCTGTCTCTGGGAGGTGAACACTGAGGCCTTAGTCCACAGGCAGGATCT +GGATAAGTTGGGAAGTGTTCCAAGTCTTTGGCACCCTGGAATGCAGCCTGGGTGGACCGCACGATGCCATTTCAGGCGGA +TGGACAACCCCTAGCACAACTCAGGGGCAAAGAAACTTCTCACAAGAATGTTGCAAGTGTGACATGGTCCACAGTAGTGC +AAGTTTCTCTGAGCCTGGGGCACACAGAACGTTGGAAACTTTTTTGAGAACAATTAGTGGTCAGAATTGAAAAAAATTTT +CTTTTCTTGAGAAAGAGGGGCAGAGGACAGACTATTAAATGGACGGTGGTCCAGGAGCAGTGGCTCATACCTGTAATCCC +AGCACTAGGAGGCTGAGGCGGGCATATCACTGGAGGTCAGGAGTTCGAGACCAGCCTGGCCAGCATGGTGAAACCCTGCC +TCTACTAAAAATACAAAAATCTGGCCGGGCGCAGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGTGGGTG +GATCACGAGGTCAGGAGTTCAAGACCAGCCTGACCAACAGGGTAAAACCCCGTCTCTACTAAAAATACAAAAATCAGCTG +GGCATGGTGGCGCATGCCTGTAATCCCAGCTACTCAGGAGGCTGAGGCAGAAGAATCGCTTGAACCTGGGAGGTGGAGGT +TGCAGTGAGCCAAGATTGCGCCATTGCACTCCAGCCTGGGTGACAGAGTGAGACTGCATCTCAAAAAAAATAAAAAATAA +AAAATAAAAAAATTTGCCAAGTGCAGTGGCGGGTGCCTGTAGTCCCAGCAACTCGGGAGGCTGAGGCAGGAGAACCTCTT +GAATCTGGGAGGCGCAGGTTGCAGTGAGCCAAGATTGCACCACTGCACTCCAGCCTGGGCGACAGAACAAAACTCCGTCT +CAAAAAAAAAAAAAAATGTGGATGGTGAACATTACTTGGGTTTGAAGGGGAATTTGAACAATAATGTCCTAGAATTGTAG +CCATACACACTCTTAGGAACCCAGCGCCCTGTAAACCTTGATGGGATCAGACCCCTGGCTATTCCTCCTCCTTCCCATGT +TCTACTTTTCCCTTTCATGCTTTGGGATCCTGCCCGCCCAGGCCTTCTGCTTTTCCAAAGGATCATTTCAAAACCTCAGC +ACATGCAATTTCCTCTACCTGAAGTGTGCACCCTACCTCCTCCCCATGTTTAACCACTCCTCACCTTTCCTGTTAAGCAC +AGATGATCCTTCCTCCGGGAAGCCTTGGACTACCCACCAGGCTGAGTCAGGCACCTCCCTGGGCTTCCACAGACCCCTGG +GGTCCCCATCACAGCCCCCACCTCCCTGCCTGTGCTTCCCCCATCCCAGTCCTGACGACTCTGACCCTATAATTCCTCCA +TCACAGCCCTGACCACTCTGGGCTGTCATGCTTTGGTGACATTTCATCTCCCCCTCCAGATCCATGAGGGCAGGACCCAG +GATGTCTCAGTCACCACTGTGTGCCCTGCATTGCCTGGCCCAGGCTGGCCTTGGGGAGTGTTTGCCAAGTGACAGGAGTC +ATTGTGACTGTGACTTTGGGTACAGTGTTTGCATCTCCCTGATAAGATAATGGGCCCAGCAATGCCCTTCACCTCCTGAG +CAGGTCACCCCGCCCCCTCGACCCTGGGAGGATGAAAGCAAGGGGCTGGGCATACAGGGACCTTGCTTCTCCCGCCTCTC +CAGGCCAGGTGCAGGGGCAGGTGGTCAGAATTGAAAAAATTGTCTAGGAGTCAAGGAGTTGGCCCCCAGCCCAGCTAAGC +TGGCAGCCAGGCCCCTGCGTTCTGTCCCTCTCCCATCTTTGTGCAGATTGGAAAGGTCAGCCATCCTGGGCTGGGTGCAG +AGCCCTTCACTTCTTCAGGAAATTTCCAGGCTGTACTTGCTCTGGGATTTTAAAAAATCATATTCAGGGCCGGGCGCAGT +GGCTCACACCTGTAATCCCAGCACTTTGTGAGGCCGAGGTGGGCAGATCACCTGAGATCAGGAGTTTGAGACCAGCCTGG +CCAATATGGTGAAACCCCGTCTCTGCTAAAAATACAAAAATCAGCCAGGCATGGTAGCGGGCGCCTGTAATCCCAGATAC +TCGGGAGGCTGAGGCAGGAGAATCACTGGAACCTGGGAGGTGGAGGTGGCAGTGAGCCGAGATTGTGCCACTGCACTCCA +GCCTGGGCAACAGAATGAGACTCCAGCTCAAAAAAAAAATAAAAATAAAAAAAATAAGGGTACTGGTGGAGAGACTTCCT +CCATGGGATGGGGCAAGGGCAGAGCGCTGATGTCCAAATCCAAGCTCAAAGATTCCCAGGGGAGCAAGGAGGCCTTGTGG +TTCCTAGAACTGTGAAGGGTACAGGGCGATTGCAAGAGGGCTTCTGGCTCGTGGGTCTCCTGCTTCTGGGCTGTCTGCTG +TCACAAGAACCTGCAGGATCATTAACAAGCTCAGAACGATGGCCCTGATGCTGAAGCCCAAAGCTAGCCTGGAATTTCTC +TTTGTGCTGACCTCGTTTTCCAAACGGCTCACTATCCGTGCCTATGGAGATGAAGACAGGCCGATGGGGGTGTTTTTCTA +AGAAGGGGTGAAATTGCAGAAGGGCCACCTGGAGTGAAACTGAAGGCCATGATCAGGGTTGGGGGAGGGAGGATTCAGCA +GAGGAGAGGAGGAGGCAATGCAGGAAGACAGTGCGGGGATCCTGGGCACGCCCAGGTAGGAGGGCATGCTGGGAGACCTT +GGGAAGAAGTGGGGTTGGCAGACTGTGAACAAAGTGGGGACAAGTCCCAGGGCAGCAGGAAGGGTGGGATGGAGAAGGGG +TTGGGGCTGGTATCTAGAGAAGAGGGGAAGCTTCCGAGGCATCCATGGAAAGGGGTATAAGGTGGGTCAGGGGATGTTTC +ACCATGGGGGACAGAGGGTCACTCTCCACCCACCAAGCAGGATGGCACAATGGCAAGTATTCCTAGCAGGAAGAAACAAA +AGATGAAAAAGATGCAGAGAGGCAGGCAGTCATTCACAGGAACACTTAAAGGCATTTTGTAGATGGTCATCTCCATGACT +TTGACCTCTGGGCTCCGGAGGTCAGTCACACAGGCATGAACCCTGGTGGAGGGAGGGGCAGGGTCTGCAGAAGGACTGAG +AAGGATCAGCAGATGCGAAGGAATGGGGACCAACAGAATCAATCCCATCAACAGGAATGTGCTGGGAACACTCAACCCAC +AGTGAACTTGGCCTTTGTTGTGGGAAAAGAACCCTGCAATGCCCCCACTGACCTCTATGATACCCTTGCTAGCCCTCAAA +GTATCCTGTTGGCTGCTTTTTTTTTTTTTTTTTTTGAGATGGAGTCTCACTCTGTCACCCAGGCTGGAGTGCAGCGGTGT +GATCTCAGCTCACAACAACCTCCACCTCCTAGGTTGGGATCCTCCCACCTCAGCTTCTTGAGTAGCTGGGATTACAAGCA +TGCACCACCATGCCCAGCTAATTTTTGTATTTTTAATAGAGGCAGGGTTTCACCATGTTGGCTAGGCTGGTCTCAAACTC +CTGACCTCAAGTAAATCACCCACCTTGGTCTCCCAAAGTACTGGGATTACAGGCATGAGCCACCGTGCCCAACCCCTGTT +GTCTTCTTCTGTCTCCCTAAACCCATCCCTGTTCTCCAGGAAGCACTACCTCTTGGTTTGCCAGTGCTTCCAGTTAGGTC +TGGTCCTAGCAAGTTATTCTGAACTCCCCTTTCAGTCTAAAAAATGCTCAGTTTGAATTTTAAATCCAGTCACTCATTGC +TTTAATCCAGTCACTCAATGGGGATAAGTTCTGAGAAATCCAGTCACTCAATGGGGATAAGTTCTGAGAAATGCATTGTT +AGGTGATGTCATCATTGTTTGAACATCATAGCTTGTACTCACACAAACCTAAATGGAGAGCCTACTGCACACCTAGGCTA +TATGGGATAGCCTTTTGCTCCTAGGCTACAAACCTGCACAGCACCTTACTGTATTGAATACTGTAGGCAACTTATAACAC +AATGGTAAGTATTTGTGTATCTAAACATATCTGAACATAGAAAAGATACAGTAAAAGTACAGTATAAAAGATAAAAGTGG +TATACATCTGATATGATTTGCTGTGTCCCCACCCAAATCTCATCTTGAATTGTACCTCATCTGCCTGAATCAGTGCTGAA +CCACTGAGGCTTAAAACAGTGCCTGGCACTGTTACCCAATAAATGTTCATTGAATATATGAGAGTCCCATGGTATCTGGC +AACGTGGACACACAGGAGATGTGAACATGTGGGCACACATACGTGCATGCAACAGATGAATCAGAAAGTGGAAACCTCCT +CATAAACTTTACTGCTCTTAAAAATGCTGATGGATGAAGGGGTGGGTTACAGATTAATAGCATCTCAAGGCAGAAGAATT +TTTCTTAGTACAGAACAAAATGGAGTCTCCTGTGTCTACTTCTTTCTACACAGACACAGTAACAATCTGATCTCTCTTTC +TTTTCCCCATATTTCCCCCTTTTCTTTTCAACAAAACCGCCATCGTCATCATGGCTCTTTCTCGATGGTCGCTGTCTCTT +CGGAGCTGTTGGGTACCCCTGCAGACTAACAACAGACAGAACAGGCACACAAGGATTAATATGAAATTTATAATTATAGT +ACTTCCGATGGTCTTAACCCAAGTGACAGGGTTAAGATTTACGAGGCCATCAGCAACTCCTGCAATTGCCTCAGTTCCTG +GCACCAAATTTAAATGGGCTTTTGATGTTTTGGAAATTTGTTCTTTTAATTTGGAAATGTCTAAAGTGAGATTATCTTCT +CTTCCCTGTAGATGGCGTCTAACCATGTCCCAGTGATGCTCAGACTCATTATAAACTTGGGGTGTAATACAAAAATCTGA +CGTATTCCAGTCACACTGTAACTGGAAACGATGTTCTAAGCTCATGAGCCTGTCTCCCATCCAAATGACAGTTTGTCTAA +GATCATTAATTTGGTTTGCCAATTTTTGATCAATACTAGATTGTGAATTCCACAATCTTGTAGAACTTTTTTGCCAATCA +TTAACAAAGTTTACTGACTGAACAGAAGAGTGCAATGCAACTCCTGCCACAGCAGCCATAGCTGTGACTGCAATTAATCC +CATAATCACTGTAATTAAAGTAAAAATGAATCTTTTGGATCTATTTAAAACGCCTTTTAATACTTCAGTCAAAATATGAA +CGGATGGTGAGGCCTCCCACAGTCGGTCCATGGACACAAGGATCCACACGCCTTCCCTTGCTCTCACCAGCAGAATACGG +TGTTGCCAATTAAAAGTTGAATCAATGCAAGTAAACAATCTGCAGTTTTCACAGGTTATAGTTTGAGAGTCTGGTTTAAT +AACTATATTTCCTATAACTAGCATATAAAGGGACTTTACACAGCTTTGTAAAGGAACTGTTAGACTGGAATTTAGGTCGA +TAGTATAAAATGGCTTATGATCTCGTTTCTAAAGTTTGATTTCCAGACCAAATTCTAATGTAGTATGAGGCTACACTAAG +CCTCCACCATTCTGGATGTTCAGGACCAGAAACAGGACTTATTATTTTTGGTCATGGGGTAGAGATTCCTTTTTCTCCCC +ATTTCCAAGGGTAGAAAGACTGTAATTTTTTATGCTTATGTTCGTCTAAACTTTCTATGAAGTCGCTATCAACAGTTGGA +CTCACTTGTGCACTGGGACACGACTGAGTTTGTCCTGTGCAATTGTGGTAGAATTGACCTCGAGGTGCCCAATCTATAAT +AGTTCGGAATTCACTGTTTTGTAATATCACTGCACTATTGGCCACACATTCTTCCCAAACTAAAGCTTCTACATTTTTTG +ATCCTTTGGAAATTTCCTCGGGGCAAGGTTTCCCTTTAGGTCTAAATTTTAATGATCTTTGATAAGAAAAGTCTTGTAAA +TAATTTACCTGTGGCCTGAGCGACATCCCGCTTACCATGTGATAAGTGAATCTTCTGATGGGACTGACAGTAGGTACTTC +TACCAACCAATTTTGGACTGCAGGCATTAAACATCCTGGTGCTCTCCCCAGGCAAATAGGAGGATAATGATACCCAATGA +AAATATTTATCATCATCCCTTCTTCCTCAGGTTTGGCAGGGCAACGATCATCTGTTGGACCAGGTACCCATACACTATCA +TTAACATATACTTCCATAGGATTATCCATCCATGTGACTGCCTGAATTAAGGGCGGGAAAGGCACATAGGCCCAGTAATT +ATAATTAGCTGCAGCTGCTCCTGCAGGCATAGGGAGACTTACCACCATTGATACAATCATCAAAGCTGCAAGCAGCATAC +TCTCTGGAGTTTGTGTCACCTTTGTGTTCTCTAGATATTTTGTAGCTAACTGTGTCAGCTTCTTTAATTGTGCCCAAGTC +AGCAGCTCTGCCTTCTTGGTGGATGGCAACTTCATCTGTTCTTCTGACATCACCATTCTGTTCATCTTCTGAGTCGATGG +TTCTCGATGACGGTGCTCGATTGCGGTGTCTCCGTCTCCGTGGAGGTGCTTTTCTTTGCATCTCTGATGGGTTCATTGTA +GAACTTCAAATGTCTAGTGGGTATCCAAACAGGACGCTGATTTTCTCCTGGTGAAACGCAAGCAAAACCTCTCCCCCACG +TTACCACCTTCCATATTTCCCATGTCTTATTTTTATTATCTTTCCACCAAATCAGTTTTCCTTCATGTGGGCTGTTCTTT +TTACCAGTAAGATGTTCTGCAGAAGTAGTAGTCTGATTTCTATAAATGTTTAAAAAATTTAAAGTATAGAGTGCTAGACT +AAGTTGCATCTGAGGAGTGGTACACTCCTTACTGTCTCCCCCTTCTTTTTGTTTAACTAATTGAGTTTTGAGTGTTCTAT +TAGTTCTTTCAACTATGGCCTGTCCTTGGGAATTATAGGGAATTCCTGTTGTATGTGTAATTTTCTTGGAAAGCTTTACT +ACAGTATCCTGGTCCATTGTTAGTTTTGATTTTTTCTGGAACTCCCATTACAGCAAAACAAGATAATAAATGTTTTTTAA +CATAAGAAGTACTTTCTCCTGTCTGGCAAGTTGCCCATATGAAATGTGAATAAGTATCAACTGTTACATGAACATATGAT +AATCTTCCGAATGAAGGTACATGTGTGACATCCATTTGCCATAACACATTAGGACACAGACCTCTGGGATTAACTCCTGC +CTCTTGAGTGGGCAGGTGTAGGACTTGACACTGGGTGCAATGTGGTACAGTATCTTTTGCCTGTTTCCATGTGACATCAA +ATTTGTTTTTTAATCCTGCTGCATTTACATGAGTTAAAGCATGAAGTTCTTGTGCTTTTATGAATGCAGATGATACCAGT +AAGTCAGCTTGTTAATTTGCTTTAGTCAAAGGCCCTAGTAAATTAGTGTGTGCTCGAATATGAGTAACATAAAATGGGAA +ATTTCTTTTTCTTACAGTTTGTTGTAATAAATTGAATAGCTGGTTTAACTGATCATCCATGCTATATTTGATTAGAGCTG +TCTCAACATCCCTTGTAGCCTGTACTACATATGCAGAATCTGATACAATATTGATAGGTTGATCAAAATCTTGTAACACT +GTAATGACTGCAACCAACTCTGCTCTTTGAGTCAATTGATATTGAGTTTTGATTACTCGCTCATCAGACCCCAGAAAAGG +TGTTGGTTGATATAGACAGCAGGACGGTGGCCATGGAAGTCAGAATCCACTAAGGAGTGTGTAACAACTCACCTGCCGAA +TCAACTAGCCCTGAAAATGGATGGCACTGGAGCATCAGGCCCATACCCGGCCATCGCCAGCAGTCAATGGAATGTGAGTG +CCTTAGAGGTCTTGGGGCCGAAACGATCTCAACCTATTCTCAAACTTTAAATGGGCAAGAAGCCCAGCTAGCTCAGTCGG +TAGAGCATAAGACTCTTAATCTCAGGGTTGTGGATTCGTGCCCCATGCTGGGTGCCAGATGAAGAGGTGAGTTGCCCCTA +AAAAGGATACCCTATTCCTTCTCTTTCTTAATTTCTTTTAGTCTCAATTGGGACTTTAATGCCATTTTCATTTTTTCCTA +GTCCCTTTCCTGGTATATATCCCATCTCAGTCATGATTTTTTGATTTGCGGGGCTGTATAATGGAGCAGGCATAGTGATT +TCCGCACCCCGTTGTTGTAATAAATCTCGACCCCACAGATTAAGAGGAATCGAAGTAGTCATTGGCTGAACAGTACTTTC +TTGATTATCTGACCCTAAACAATGTAAAATCTTAGTACTTTGATACACTTCTGAGGCTGTGCCTACGCCGATAAGTCCTA +TAACAGCCTTTGTTTAGGCCAATTTTTTGGCCACTGATTGAAAGCAATGATAGAGACATCTGCTCCAGTGTCTACTAACC +CTTCAAACTGTTTTCCTTGAATAATGGCCTTACACACAGGTCTGTTTTCTGAGACCTGACTTGCCCAATATGCAGCCTTT +CCTGTCGGATCAGTGCTTCCAAACTCTCCTATTCTTTTTATTTTACTATTTCCAATCTTAATATAAGGCAGGAGTAATAA +CTGAGCAATCCTGTCTCCTGGACAGGAGGGGGGACTTCCTCCAACACAGGCAGTCACTGATGTCCTAGTTCAAATGCTCC +AGGGGGAACAGTCCATTACTCACTGAGGGAGGCAGGCTTTCCTATTTTCTGTTTCAAGCTTTTGATCACAATGGAGCAAA +TGATCACAATGCAGCCCACCAGGATGCTGGTGATGCTGAATCCAAAAAGTAGTCTGGAATTGATCTGTGCTTTTCTCTGA +TTCCCAAGGAAGTTGGCTTCCTGGGTCTGTGGGGGTAAAGGCAAGCTGGTGTGAATGTTTCCAAGATGGGGAGGGGGAAG +AAAATCCCTGGGGAGAGGTGAAGAGGGCAAGATCAGGATGATGGCATGATGGAGGTCAGGGCAGGGCTCAGTCTCCCAGA +GGAAAAAGGAAGAAACCAGGGAGCCAGGATGAGGGAGTAGATCTAGGCAGAATACAGAGGGAGGAGCAGAGAGGTGGCCC +TGGAGAGGTGCAAGGGCAAGCAGATGGTGAAGAGGGAGGAGGCAAATCCCCGAGAAACACGAAGAGGTCCCTGGGGAGAA +GCAGGGCATCGGCAGGAAAGAGAAAGAAGATCTGGGGACAAAGAGAGTTGGTAGCTGGGTGGTGCCCATCCTGAGGGAGA +ACACCAGAGCGGGGATTGCCAGCAGGACGCAGAAGAAGGATACGACAGCGAGCAGTAAATAGTCTCTTTCTGGAGGACAC +AAGGGCATCAGGGTGACTGGTTGCATTGGGGCGAGCAGCTGCACTGGGATGAAGGGCTGCATGGGGATGAGTGGCTGCAT +CGGGGTGACCAGGGACTTCAAGTCCCTGGGGCTCATTGCAGTAGCCATAGGCCTTGGCCTGAGGAGGAGATGCTGGGTGA +GTGGAATCTGCAGACAGGGGTCATGGGGTCCGGGAAGGGGACATCTGAGTCCCCAAGCAACTGAGACCACCCAAACCAAC +CCCTCTGGCTAGAAAGGTACTGAAAGTTGACACTGTCCCAAGCCAGGGGACAGCGCTCCAAGCCAGAACCCACCACAGCC +CCGTGCTCCTGTAGAGTAGCCTTGCTGGCTCTGGAACACCCACGCCACCCTCCTCTAGCCTCTCACAACCCCCTCCCTGC +TCCCCTCTGGCTGTTGCACTTTCCTCCTCTAAACTCTCCCTACCCCTCCTTGCCCCGCAAACTCACACACCCCCACTGTT +TTCTCAGCCTCCCAAAGTGCTGGAATTACAGGCGTGAGCCACTGTGCCCGGCCTATTTATTTATTTTTTGTAGAGGTCTC +ACTATGTTGCCCAGTCTGGTCTTGAACTCCTGGCCTCAAGCAATCCTCCTGCCTCGGCCTCCCAAAATGTTGGGATTACA +GGCGTGAATCACTGTGCCCAGCCACTCTTCCTTTTTGTTGTTGTTGCCAGTTTGAACGCCTGATGGGTTCAATATATAGT +GTGTGGATCTCACATCCAGATTGAATATAAGTATAATGGGCAGATTTATCACTATTAGGAGGCTACTGTACATTAGGCCC +AGGCTGGCCCCTGAGGGCCACATGGTAACTAAGGCAGACAAGACCATAACTCAGATAGAATAATAGTCTCCAATCCCATC +CAGGTTGCTGTGAATGCCATTAATTCATTCCTTTTCATGGCTGAGTAGTATTCCACCATATATATATGTAAAATCAGTTT +CTTTATCCACTCATTCATTGATGGGCATCTGGGTTGGCTCCACATTTTTGCAATTGCAAATTGTGCTGCTATAAACATGT +GTGTACAAGTATCTTTTTCACATAATGACTTCTTTTCCTTTGAGTAGATACCCAGTAGTGGGATTGCTGGATCAAATGGT +AGTTCTACTTTTAGTTCTTTAAGGAATCTCCACACTGTTTTCCATAGTTATACTAGTTTACATTCCCACCAGCAATCAGG +GAAATGCAAATCAAAACCACAATGCGATACCACCTTATTCCTGCAAGAATGGCCATAATCAAAAACTCAAAAAATAATAG +ATATTGGCATGGATGGAGTGAACAGGGAACACTTTCCTTGAGTTTTAACTCCAGACTGGCTCCTTTGCTGTTTTTCTGGT +GGGGCTCTTACCACATTTCCCACAGCCATTGGCTGTGTGCTCCTGCATACTTGGATGCTCCTCTCCTGCCTGGGCCCCAC +CAGGACCCCTGAGATCCAGGAGCCGTGGCTTTTGGGGGCTGGTAGAGAAGAAACAGGGAGCTACGTGAAGGCCAATGGCA +GAAACCAAGAGAGTTTCAAGAAAGCAAGAAAGAGAAACCAGCTCTGAAAATAGCAAAAGGAACAACGGGAAAAAATAAAA +TAGTTTCATGTAACCTAAAAACAGACATTGAGTCTTCGAATCAAATTGAAAGCACTTGCTAGCGTCAGAGGCATGTGAAC +CAGAGCAACTCCATCTTGAATGGGGCTGAGTAAAATGAGGCTGACGTCTACTGGGCTGCATTCCCAGACAGCTAAGGCAT +TCTAAGTCACACGATGAGATAGGAGGTTGGCACAAAATACAGATCATAAAGACTTTGCTGATAAAACAGGTTACAGTAAA +GAAGCCAGCTAAAACCCACCAAAAACAAAAAGTGGCGATGAGAGTAACCTGTGGTCATCCCCACTGCTCATTATACACTA +ATTAGAATGCATTAGCATGCTAAGAGACACTCCCACCAGCGCCATGGCAGCTTACAAATGCCATGGCAACATCAGGAAGT +TACCCTATATGGTCTAAAAAGAGAAGACATGAGGCCAGGCACGGTGGCTCACGCCTGTAATCCCAGCACTTTGGAAGACC +AAGGCAGGCAGATAGGGTCACCTGAGGTCAGGAATTCCAGACCAGCCTGGGCAACATGGTGAAACCCTGTCTCTACTAAA +AACAGGAAAAATTAACTGGGCATGGTGGCACGCACCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCTCTTA +AACCCGGGAAGCAGAGGTTGCAGTGAGCCAAGATTGTGCCACTGCACTCCAGCCTAGGCAACAGAGCGAGACTCCATCTC +GAAAATTTAAAAATAAATAAATAAATAAAGGGGAATATCACAAGCAACGTATGGCAACAAATTAGACAGCTTAGATGACA +GCTAAAAATTCTTAGATGAATTACCAAAACCAACTCAAGAAGAAATAGAAAATCTGAATAGATGTATAACAAATAAAAAG +AGATTTGTAATTTAAAATACTCCCGCAAAGAAAAGCTCAGGCCTAGATGGTTTCATTGGTGAATTTCACAAAACATTAAA +GCATAAATAATATTAATTCTCTACAATCTGTTCCAAAATATGGAGAAAGGGAGCACTTTCCCAGCTTATTATATGAGGTC +AGTATTACCCTAATATCAAAGCCAGACAGTGGCATCTCAAGACAACTAGAGACCAATCTCTTTCATAAATATGATATAAA +AGTCATTGGTAAAATATCAGTAAGCCCAATACAGCAATATATAAAAAGGGTTATACACCATGATCAAGTGGGATTTACCC +CAGAAATGCAAGATTGGTTTAACTTCTGAAAATCAATTAATGTAACACACCATAGTAAAAGAATAAATTTTATTCATTTA +TTTTAAAGATGGGGTCTCACTCTGTCACCCAGGTGAGATTGCAGCTCACTGCAGCCTCAAACTCCTGGGCTCAAGCAATC +CTCCTGCCTTGGCCTCCCAGAGTGTTGGGATTACAGATGTGAGCCGTTGCACCTGCCCCTGTAAAAGAAGACACTTTTTT +TTTTTTTGAGATGGAGTCTCACTCTGTCGCCCAGGCTGGAGTGAAAGACTAATTTCCGGGTGGGCGCGGTGGCTCACGCC +TGTAATCCCAGCACTTTGGGAGGCCAAGGCAGGTGGATCACGAGGTCAGGAGATCGAGACCATCCTGGCTAACACGGTGA +AACCCCGTCTCTACTAAAAAATACAAAAAAATCAGCCAGGCGTGGTGGCGGGTGCCTGTAGTCCCAGCTACTCGGGAGGC +TGAGGCAGGAGAATGGCATGAACCCAGGAGGTGGAGCTTGCAGTGAGCCGAGATCATGCCACTGCACTCCAGCCTGGGCG +ACAGAGCAAGACTCTGTCTCAAAAAAAATAAATAAATAAAAGAAAAGAAAGACTAAATTCTTCCTGGCTAAGATAGGGAA +CAAAACAAGAATGTTCATTCTCACCACTTTTATTCAACAGTATAGTGGAGGTCCTAGCCAGTACAATTAGTCAATAAAAA +GAAATAAAAGGCATCTGGGTTGGAAAGGAAGAAGAAAAAACTGTTTTGACCCACAGTTGACTTAAATTTGCTTGTAGAAA +ACTCTAATGAATCCACAAATAACTACTAGAAGAAATGAGTCCAGCAATGCTGCACAAGATCAATATCCAAAAATCAATTG +TATGTCAATAAGCTACCAATGAACAATCAAAAAATGAAATTAATAAAATGAATTCATTCCCAATAGGATCAAAAAGAATA +ATAAATTCAGGCTGGGCGTGGTGACTTATGCCTGTAATCCCAGCACTTTGTTAGGCCGAGGCGGGCAGATCATCTGAAGT +CAGGACTTCAAGACGAGTTTGGGCAACATGGTGAAACCCTGTCTCTACTAAAAAAAAATACAAAAATCAGCTGGGCATGG +TGGCGGGTGCCTGTAATCCTAGCTACTTGGGAGGCTGAGGCAGGAGAATTGCTTGAACCTGGGAAGTGAAGGTTGCAGTG +AGCCACGATCGCACCACTGCACTCCAGCTTGGGTAACAGAGAGAGGCTATCTCAAAAAAAAAAAAAGAAGAAATTCAATT +AAAAAAAGTAATAAATTTAACAAAAATACAAGAGTTGTACAATAAAAACTATAAATCTTGGCTGGCGGCGTGATGGCTCA +CGCCTGTAATCCTAGCACTTTGGGAGGCCGAGGTGGGCGGATCATGAGGTCAGGAGATCGAGACCATCCTGGCTAACACG +GTGAAACCCCGTCTCTACTAAAAATACAAAAAAATTAGCCGGGCGTAGTGGCAGGCGCCTGTAGTCCCAGCTACTCGGGA +GGCTGAGGCAGGAGAATGGCATGAACCTGGGAGGCGGAGCTTGCAGTGAGCCGAGATCACGCCGCTGCACTCCAGCCTGG +GCAATAGAGTGAGACTCTGCCTCAAAAAAACAAACAAACAAGCAAACAAACAAACTATAAATCATTCCTTTAAAAATTTA +AAGATCTAAATAAATGGAGTGGCATCCCATGTTCATGGTTTGGAAAACTCAATGTTAGCAAAATGGCAGTACTCCCCTAA +TTGACCTAAAGAGTCAATGCAATCTTTATCGAAACCTCAACTGGCTTGTTTTTTTTTTTTTGCAGAATTTGACAAGTTGA +TCCTAAAAGTCATGTGGAAATGAAAAGGATGCAGAATAACCTAGCAATGTTGAAAAAGTAAAATAAAGTTGGAGGACTTC +CAGTTACCAATTTCAAAATTTATTCCTGATTACAAAGCTATAGGAATAAAGACAGTGTGGTACTGGCATAAGGATGGACG +TATAGCTCAATGAAGCAAAATTGAAAGTCCAGAAATAACTTTCATATTTATGGTCAAGTGATTTTTGACAAAAGTGGCAA +AACCATTCAATGTGAAAAGGAGATCCAACAAATGGTGCTAGAACAATTGGATCTCTCTCTCTCTCTCTTTTTTTTTTTTT +TTCTTTTTGGAGATGGAGCCTCGCTCTGTCACCCAGGCTGGAGTGCAGTGGCATGATCTCAGCTCACTGCAACCTCTGCC +TCCCGGGCTCAAGCAATTCTCCTGCCTCAGCATCCCAAGTAGCTTGGGGCTACAGGTAACCACCACCAAGCCCAGCTAAT +TTTTGTATTTTTAGTAGAGACAGGTTTCACCATGTTGGCCAGGCCAATCTTGAACTCCTGGCCATTATTTTCAAATGATT +CTCACATGCTCTGAACCCCACTCATTCATCATTATTATCTCTTTTTTTTTCTTGAGACAAGGTCTCCCTCTTGTCCAGGC +TGGAGTAGAGGGGTGCGACCATGGCTCACCACAGCCTCAAATTCCTGAGCAAAAGCAAACCTCCCATCACACCCTCCCAA +GCAGCTGAGAATACAGAAGCCTGCCCTCAGAGCCTGATATATATATATATCTGTCTAAAATATATACATTTTTTTTCTAG +ATACATGGTCCCACTGTATTGATCGGGCTAGGTTTCACTATCCTGGTCTCATGTGATCCTCTCCCCTTAGCCATTATCAC +CTTATAGAGTGCACATTTTGTTCCATGCACTGTTCAATACCACTTACATACATTAATTTAATCCTCACAATGAAACAAGA +GAGAAATAATTATTATTCTCATTTTAAAGATGAGAAAACTGGTACACAGAGAGGTTGCACAAGGTGATATTGCTAGTTAG +TGGCATGGTGGGGATCCAAACCTAGGTAGTCTAGTTCCAAGGTGTGTTTATTCAGCCCATGTTTACTGAGCACCTACTAC +TATGTGTTGGGCTCTGCTCTAGGTGTTAGAGCTATAGACAGTATAAAAGAACTACCTCGCCCCCATTAAGACATCTCTCC +TGGCTGGGCATGGTGGCTCATTCCTGTAATCCTAGCACTTTGGGAGGCCAAGGTGGGTGGATCACTTGAGGTCAGGAGTT +CAACACCAGCCTGGCCAACGTGGTGAAACCCCATATCTACTAAAAATACAAAAATAAGCCAAGCATGGTGGTGGGCACCT +GTAATCCCAGCTACTCGGGAGGCTCAGGCAGGAAAATCACTTAGAACCCAGGAGGTGGAGGTTTCAGTGAGCCAAGGTTG +CACCATTGCACTCCGCCCTGGGCAACAAGAGCAAAACTCCATCTCAAGAAAAAAAAAAAAAAAAGACATCTCTCCCATAT +CTCTCTCTTATTGAGACATGGTCTCTCTCACCTTTCCCACCAAAAATTTTTTTTAAAAAAACAAAACCCTTTCATCACTC +AGCCCCCTCAAGTTATGGATCTGGTTTTTGGTTTTTAATTCCAGAGACAAAAAAGGGGGCAGAACATAGACCCATGCTAC +CATCTTGACAGAGTCTCCATTTCAGTTCCATACGCTCAAGTCCCTCCTATCTTTAAAACAAACAAGCAAAATCATCATTC +TCACCCTTTTGCATCTACCCTAGTCCTGCCTTTCCTGGCTCTTCATAGGCAAACTTTTTTTTTTTTGAAACGGAGTCTCA +CTCTGTCACCCAGGCTGGAGTGCAGTGACACAATCTTGGTTCACTGCAAACTCCACCTCCCGGGTTCAAGCAATTTTCTG +CCTCAGCTTCCCAAGTAGCTGGGATTACAGGCACCCACCACCACATCTGGCTAAATTTTGTATTTTTAGTAGAGACAGGG +TTTCACCATCTTGGCCAGGCTTGTCTTGAACTCCTGACCTCGTGATCCACCCACCTTGGCCTCCCAAAGTGCTGGGATTA +CAGGCATGAGCCACTGCACCCAGCCATAGGCAAAATTCTTGAAGCAAATGTATACACTGTCTCCAATTCCACACCTCACA +CTCAATCCATGGCTCTCTGAAACCAGGTGTTGGCTTACAACATTCCAGAAACTGGAACCCATGTTCTTCTCAGCTGTGGC +ACTGCTCTCCTTACTCTTTCGCCTCCAAGCTCTTGGAAGAAATGTCTACATTGTCTATACTACCCCTTTCTTGCTCACTG +CCTGGATCCCTGCAATATGGCCACTGCTTCTGCTGATCCTCTGATACTGCCCTTACCAAAGGAGCTAATTCATTCCCGCC +TTCAGAGCTGGAGTACATGTCTCAGGGCTTGACACACTTGTCCATGTACTTGTTTCTAAGCCTGTCTTAGTTTGTTTGTT +CCACTATCCAAGGGACTTGCCAGCAACCAATACACATGCTTCATCTCACCCAACCTTCACTTCTGTCTTCCCCCACCTCG +GCGCCCCATGTTCTGTTGTCCTGGAACATCCACTTGGTCCTTTGAAAGGCTCTGAATCAATTTCCTCCATGAAGAATATC +CTGACTTCTGGATTGCATGTGTTGTCACTGTTCTTCTAACTACTTCTAGGTCCAGGACTGGTCTTAAATACCCAGGTTGT +GTCTTGGACTAGCCATACTAAGGTCTACATTTGTGGACTGCACAGTGTCACCTCCCACCCACCCCCAACTTCCTGAAAAG +TGGCTCCTCAAACCCTCTACTCCCCTAGAACCACCAGCTAAAGGAAGCATCAGCTAAAACCCCACAGTATTAGCATTCAT +TAAAAGCTCCTACCTGAATCAGCAATTACTATGGTATTTGAAAATGTTCTCTAATGGTGCATAACAAATTCCCCACAGGT +ATTAACTCACAGTTCTGTAGGTCAGAATGGCTGCTTCTCTGCTCAGAATCTACCAAAGCTAAAATTAAGGTGTCAGCTGG +GCTGGGTTCTCATGTGGAGCTCAGGATCCTCTTCCAAATGAATGTGATTACAGCAGGATTCACATCCTTGCTGTTGCAGT +ACTAAGGACCCCGTTTCCTTGCTGGCTGTCAGCTGGGAGCCATTCTCAGCCAGAGGCTGCCTGGATTCCTCCCTACGTGG +CCCTGGTGACATCTTCATGCCAGCAATGGAGACCTTTGCTTGCCTCCAATCCTCTCACACCTGAAACCTCTTTTGCCAGG +AAGACTCAGTCCTTTTCAAGAACTCACCTCATTAGGTGAGGCCCCCAGAGGATATTCTTCCTAACTTAAAGTTAACTGAT +TTCAGACCCTACCTACGTCTGCAAGACGCCTTCCCAGCAGCATACAGACTAGTACTTGACTGAGTGACTGGAGAAGGAGT +GTGTACACCAGGGAGCAGGAATCTTCGGGTCATCTCAGAGTTCTGCCTACCACATTGGGGATTTCCTGTTCCATCGTTCC +ATTAGGTTGTGTTCTACTTTAAGAAAGATCTTCCCCCTTTTCCCCTTCTTTCTCTATTCTTTCCTTTTTTCTTTCTGTCA +GCATAAACCAAGGAATTCTTTTTTTTTTTTTTTTTTGTCATTTTTTCTTGAGATGGAGTCTCACTCTGTCACCCAGGCTG +GAGTGTGCAGTGTGATCTCGAATCACTGCAACCTCCGCCTCCCGGGTTCAAACGATTCTCCTGCCTCATCCTCCCTAGTA +GCTGGGATTACGGGCGCCTGCCACCACACCCGGTTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCACGTTGGTCA +GGCTAGTCTCGAACTCCTGATCGCAGGTAATCCGCCCGCTTTGGCCTCCCAAAGTGTTGGGATTACAGGCATGAGCCACT +GCGCCCAGCCGGAATTCATTTTTAATTCAAGACTTTACAATCCACTTCTGACACTACTCATTTTCCTCCCCTCAGTAAAT +CTCTTACTCTTACTGGGCGTGTCTAGTTTCTCTCTTCCACAACTCCTGGGAGACCCTCCTGACATCGCCCATCCGCGCAG +GCTGCAGAGAGAGATCAGTGGGAGGAGGAGGAGCCGAGAGCCACCACTTAGGCTTCCAACCAATCCCTACCAGGGTGGGC +GGAGCCCACTTCCTGATTGGCTGCACTCTCTGTGTCTTGGGGTGGGCGAGAACGGCGGGGCCACGCCCCCTAACTAGGCA +GCCAATCAGGACGTGGGGTGCTGGTTTCTCCATTGCGAAGCTTCAGCCTTTGATGGTTTGGGTCCTGGGAGTCTGGTTAG +TACAAGGGGAAGCCTAGTGGGTCTGGCGCTCCGTTTTCAAGACACTCGGAGTCCGTCTTTGAGGGGAAAGGTCATGGCCC +TGAAACCACCTTCTGCCACCCAGCCTGCTCCCAACGCGCCAGCTACCCCAGACGCCCCCCCTACCACAGGTGATCCAGGT +G diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/enhancer_eve.fa b/nim-skills/genomic-intelligence-nim/assets/demo/enhancer_eve.fa new file mode 100644 index 0000000..92dd9ca --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/enhancer_eve.fa @@ -0,0 +1,168 @@ +>drosophila|eve|chr2R:9972000-9982000|BDGP6|strand:1|gene-sense +CCTCGTGTTCTTCGATGTTCGGGAGCGCCAGCAAATGGGCGTCTACTTCGAAAGCCATGA +GGACGATATCACCTCGTTGCGGTTCCATGCCCAGAATCCAGACCTTCTGGCCACGGGCAG +TGTGGACGGGCTAGTAAACGTGTTCGATGTGAAGGAGCCGGACGAGGATGAAGCACTGCT +TAACACCTTCAACACGGAGAGCAGTGTGGCCCGGTTGGCGTGGCACAGAAACGTCTACGA +CAAGGACATCATATCCTGCGTCACGACCACTGGCGATTTCAAGAGCTACGAGTGCGAGGA +GGGCGACGAGGTGGCATCCTTCGAGCGGCCGGATGTTACGGCGGCAATAAGGAGAAAAAA +AGCCGCAAACTTCAACCTGATAAATGCCCACAATCAGGAAGACGGAGGAGTCTTTCTGTT +GGCGGGCACCAACTTCAACAAGGGGTTCGTTATTAACTGACTTTGGCCTAATACCCAAGC +AACTGAATAACCTTCTTTCAGCGAGATCCTGCGCTCCGTTAGCGTTACCTCGAAGAACAG +CCTCCAGCCATTGGCCAATTTCCAGGGAAACAAGCAGATCGTCAGAGATAGTCTTTTCGA +TTCAAAGAGAAGTTTACTTTTTACAGGCGGAGAATCCGGCATTGTTACGGTTTGGGCACA +GGACGCAAGTGGAACGGCGTTCAGCAGTGAAAAACTGAAGGCCAGGAAGGAGAAGAAATC +ACGCAAGCAAGCGCCATATTAAATGTGTATTTATGTTTTAAATAAAGGTTTTCTAAATAC +GAAATTTCAAATTTAATGGGTAGCAGCGTTGCCAGATAAAGGGACATGTTTACTGGCTGA +CAGGAGCTCACTGATGTGAGCGTATGTCTACGAGAGCTGCTTACGTAATTTGAGAAAGTG +TTGCATACTTTTGAGATTGCGTTTGAGCTACGTTACTTACATTTTTCCCACATGAGTCGG +GCATACACATATGTAAATAAAAATTGGGTTCACTGTATATAAAATAGAGTATAAATTATT +CATCTTATCTAACAAATATTAGAAATAATCAAAACACCTTATAAGTTTATCGAATTTACG +AATTTACGAATTTATTTCTACATATAAATGTTGACCGCCATTTGGACTCCACTTAACCGC +TTAATTTGCTTAAGTAACATAAGTAACTTTTAAGATTAATAGTATTGTATTTTGAATGGT +AAAAGTCCATCCTAATCTATTGAAAAAATCCGAAGGAACCAAAGTCATTCAAAGTTGATT +CAATTCACCCCCACCCTGCGCACTCAGTGCTCAATTTCTGCTCGCAGCAAGGTCTGCTGA +GTAAAAAATTAGCACATCCTCAGCGCAGATAAACGCATCCTTAAAACACCCCCTGGCCAT +CCCACAAGCTAGCCATCCATCCATCCGTTCATCCTGCATCCGCATCCCTTCGCACAGAGA +GCGGCCCAATTAGTGCTGCAGTAGGCATTTCGAATCCGTACCCACAAATCGGCTAATCCG +CTGCCACTGCCTGCCGGCCCAGAGTCCAAAAGTCCTGTGTGCAATGTCCAGATTTCCGAG +TCGCAGAGTCTAAATGTTGACAAATACAACACCTACGATACAAATAAAATTGCTACAGAA +GTACCACCTAAAAACGGGCACAACCGGAACGACTTAATTTTCTCAAATTTACAGAAACAG +ACGATGACATAGGAATGGGAATGGTGATGGTGATGGAAACACAGGAAGATATCTCGACGC +CGCCACTGAAGCTGTGGGTTTGCTCCTGCCGAGCGAATCCAACGCGAGTAGGGTCCCATT +CGGGGCCCGAGTAGCCAGAGTCCTGCAGCTCACTCGAAACCGCCACTCACCGTGGCTAAT +TGCCCATCAATAAAGGGCCCGGGCAGTGAGGAATTCCTCCGAAAGTCGGGTCCTCCGTTC +TCCAGCCGAAGATTTTTTCGAGCAACCAAAATATTATGGTGTGCCCCGCTGTTCTCGCAC +AGTCAGCGCGAATTTGCTGCGGTGAGTCGATGCTGTTTCGCAGGACCTTCTTCCATTTTC +GTCTCCCTCTTGCTCAGCCTGTCCCTGTTCCTCTGCAGTTCCCTATCTCCTGATGCCTGT +GCTCCTTTGGCGGCACTGTGTCCTGTCGTCGTTGTTTTCCTGTGATTTGACATGTCTGTT +AGCAGGATGCCTGACCCTGAGGCCGAGCCCTGGTCTCAGTGTCCACTGTTCCACTTTGAT +GTGATTCGTCAGTGCGGTGGACTACTGCTACTGCTCTCTTGCTGGACTGCGTCTTGAGTC +CTGTTCGGCTGCCCCCTCCCGTGACCTCTGACCCTGCACTCTGCGGCTTTCCAGCGGCGT +TTGTTGGCGAATCTGACCCCGAGCTCCTGCTGCTCCTTCGCTCCTTCGCTCCTTCTCCGC +ATCTCCGCTCTTTGGACTTCGTACGAATCAAAATTGGTCACAGCACCGAGTGAATTGCCC +CGGAGACCGCAATGCGCTGTATTTATAGTAAACGTGTCCGATTGATTTGGCCACCCGTGG +CGGCTCTGTCACAGATGCCTCAATTTGCATCTATCGAATGGTTTACATGGCTCTAAAAAG +GTACCTCGATGGGTTGGTCACAATGTGGTGGCCTCTCAACATTGCAAGGCTCTTACTTGT +GAATTATTAAGTTATTAACTGCTGCGATGTAAGTCATGGCAGTTTCTGTTTTCTTTATAG +GATATATATAGGAAGGATTAAAGGAGGCATGTACAATAATATGAGTATGATTTAGCTCAA +ATTCCAAATATGATAAAAGTACAAAGCATACGATAATATAATCAAATTACGCTGACAATC +ACGATAATGTTCTTGTAGTAGTATTTGTGTAATATTTATGTTTTTTTAAGATAAGAAACG +GTAATAAAATCCACGTAAGTGTAAAAAATGGATGCCCTAATCTATGCCATGATGTGTTCT +ACTTTCGAGATTTCGCCTCTGCCCTCATTGATGGTTTCCCGGGGCTACTTGGCCCAAAAA +TCCCGGCCGTCCAAAAAGACGATCCTTAAAAAAGAAACCGCTAATCATTGGGCCGCACAA +AGAGCGGACAATCGCTCACCTAATTATTTGGCCCGATTGTGAGGAGCGGACAGTCGGCTC +GTGGACGCTTTTTGTGGCCTCTTTTTGTTTCGACAAAAAGCGAGCCAATTTTTTTTCTTT +CTGGGCCACTTTGTTGCTCTTTTTATGAGTTTTTTCCATTGTCAGTTTTTCCGGGCCTGT +CTCGCAGCCCTCGATTCCCGCGATGCCTGCCCTACAAACCTCCTAATTACGGCAGTTAGT +CGTTGTCCGGGACAGGAGAGTATGCGGAAGGACATGCGTGAGTTTATTGCCCGCTCGAAT +TTCCACTAAAAATTGGGCCGAAAAAAAAACAACTAGGTAGGACTAGGAACTGCAAACTAG +CAAAGCGGACGCGCCTTTTTATTGGTGCACCTTCGGCGGAACCGCAGGATAACAGCAGTA +AAAGCGACGACGAGGACACAAGGATCCTCGAAATCGAGAGCGACCTCGCTGCATTAGAAA +ACTAGATCAGTTTTTTGTTTTGGCCGACCGATTTTTGTGCCCGGTGCTCTCTTTACGGTT +TATGGCCGCGTTCCCATTTCCCAGCTTCTTTGTTCCGGGCTCAGAAATCTGTATGGAATT +ATGGTATATGCAGATTTTTATGGGTCCCGGCGATCCGGTTCGCGGAACGGGAGTGTCCTG +CCGCGAGAGGTCCTCGCCGGCGATCCTTGTCGCCCGTATTAGGAAAGTAGATCACGTTTT +TTGTTCCCATTGTGCGCTTTTTTCGCTGCGCTAGTTTTTTTCCCCGAACCCAGCGAACTG +CTCTAATTTTTTAATTCTTCACGGCTTTTCATTGGGCTCCTGGAAAAACGCGGACAAGGT +TATAACGCTCTACTTACCTGCAATTGTGGCCATAACTCGCACTGCTCTCGTTTTTAAGAT +CCGTTTGTTTGTGTTTGTTTGTCCGCGATGGCATTCACGTTTTTACGAGCTCGTTCCTTC +GGGTCCAAAATTATGCCAGTTTGTTTTGTCTCTGGCAATTATTGGAAATTTCATTGGGTC +GATTTCGCTGCCTTCCTTGCTCTTCCCTTGAGAAAAGTGAATAGGTTGTGCCATAAAAAT +CGCTGCTCCTGAAGACCAAATGAAATGGATTTGTGTAAGCATTAAAAACGCGAGGCAAGC +CCCAAGATTCCTCCACTGCTTTTTTTATATTGCCCACTGCTAAATGCAGCTAATTCGTCG +ATTGTTTAAAAATTAAATTACTTATGTTGCCATTCATACATCCCCTCACATTTTATGGCC +ATTTGAGTGCGGGGTGCACAGTTCTGTCTTAAGTGGCGGATGGAAACCACCACATTTACT +CGAGGGATGATGTGCTCTAATATCTCCTCATCAAATGGGATGGTTTCTATGGAAAGGCAA +AATCGTTGTAAAGTGAGGCGGAGTTAAAAAATACCTTGTTATAGCCTTTTTAAAATAACA +CAAGATCGTTCGAATTGACTAGAAATATCAAAGTCTTTTTGTATTGAAGCGAGTGTAGTC +TCAATTTATGCTTAATTTTAAGAAATACATCTCTTTATTAGCCCCAAAATGAAACAAATG +GTCTACTAATTAAGCAAGTCAACAGAATTTTTATGCAATTATTCAAAATGAAATAATATA +TACATAAGATGTTTTTGGGAATCTGTCATGGGGTTTCTGAAATAGGTTTGCCAAACAAAT +TTTAAGTATAAATGTATACATATGTCAACTAATAAATTTAGCAAATAAAATGTACCTGCA +AGTATCTATAAATTTATTGGACCAATTTTGTGTAAAAAACTGAACTGGCACTCTTCCCAA +GAATGGGACTTCGAGGACTCCTTGCTGAATCACTTACTCAACCCATTCCAACTCATCCAA +TCCGCGCAATCATCATAAATTTTGGCCTTTTTGTTGTAATTGTTTTATGGCAGAAATTAC +TCAATCATCAAGCATAATTCCCTCGTTTTCGCCGTTTTATTGCCAATTTTTGCACTGCCT +TTGCCTTTTTCCCGCCCTTTCCTCAGCGTTTTGCGAATCTTTGCCGGCATTTCTATTGCG +CGGACAATCCGGCCAGTGTGTTGGCCATTTACTTGCCATGATGACGGGCATAATCAGCGA +GATCGGCGCTTTGTGAGTGCAGAATGTGCAATAAAGCGGCAACAATCGGCAGGGATTCGC +CTTCCCATATTCCGGGTATTGCCGGCCCGGGAAAATGCGAAAGTGTTTGCGGATCGAGAT +GGAAGATAGAGGATTGAGTATTGAAACGAGGAAGGTACTTCCGCCGGCGGACACTTTCGC +CTAACCAAGCCAATCCAACCCATCCCAATCCAATCCAACCCACCCGATCGCCATAAAGGG +TATTTACTGTCGCTGCCGCAGAGCCTCGCTTGACGACTTAACCCAAGCGGTCGTTTCGCG +TCCATTCTCCGGACGGAGTCAAAGACAAAGGCCGGCGGAGGTGGACAATAGGCAAGGTTG +TTGCTTGTGGGTAGGGTTTGAGCTATGAGCTATGAGCTGTGAGCTGTTAGCCCTGAACCC +CGAACCTCGAGAATTGAACCTTTCCCGGGGCAAGAAGGCTTGCATGTGGGCCTTTTCCAG +GTCGGCCAGTAGGTAGAGTTGTTGCGATGCGGCTATGCCGGGCGAGTTAATGCCAATGCA +AATTGCGGGCGCAATATAACCCAATAATTTGAAGTAACTGGCAGGAGCGAGGTATCCTTC +CTGGTTACCCGGTACTGCATAACAATGGAACCCGAACCGTAACTGGGACAGATCGAAAAG +CTGGCCTGGTTTCTCGCTGTGTGTGCCGTGTTAATCCGTTTGCCATCAGCGAGATTATTA +GTCAATTGCAGTTGCAGCGTTTCGCTTTCGTCCTCGTTTCACTTTCGAGTTAGACTTTAT +TGCAGCATCTTGAACAATCGTCGCAGTTTGGTAACACGCTGTGCCATACTTTCATTTAGA +CGGAATCGAGGGACCCTGGACTATAATCGCACAACGAGACCGGGTTGCGAAGTCAGGGCA +TTCCGCCGATCTAGCCATCGCCATCTTCTGCGGGCGTTTGTTTGTTTGTTTGCTGGGATT +AGCCAAGGGCTTGACTTGGAATCCAATCCCGATCCCTAGCCCGATCCCAATCCCAATCCC +AATCCCTTGTCCTTTTCATTAGAAAGTCATAAAAACACATAATAATGATGTCGAAGGGAT +TAGGGGCGCGCAGGTCCAGGCAACGCAATTAACGGACTAGCGAACTGGGTTATTTTTTTG +CGCCGACTTAGCCCTGATCCGCGAGCTTAACCCGTTTTGAGCCGGGCAGCAGGTAGTTGT +GGGTGGACCCCACGATTTTTTTGGCCAAACCTCCAAGCTAACTTGCGCAAGTGGCAAGTG +GCCGGTTTGCTGGCCCAAAAGAGGAGGCACTATCCCGGTCCTGGTACAGTTGGTACGCTG +GGAATGATTATATCATCATAATAAATGTTTTGCCCAACGAAACCGAAAACTTTTCAAATT +AAGTCCCGGCAACTGGGTTCCCATTTTCCATTTTCCATGTTCTGCGGGCAGGGGCGGCCA +TTATCTCGCTACAGCAGTTCCCAAATGGTTATGGCTGGACACCCCTGCCGCCGCTCCAAC +GGGGTGGATGAAGCCCCCAAAACCCGAAAGTCATGGCAGCCATGGCAGTGTGGGGCTGTT +AAACGTGCGGCATAATATTAAGACTTCATAAAAGCGCAAATAATTCGCTGGCAGGCGATC +GATAATACATACATACAAATATATAGTGGGATACACACACTCTCTGCCGGCAAACACACA +CCACCCGACCCGACTGAGCGGCATAATGCCATATCATTCTTGATGAAGCCGATAAAATCC +CATTATTAAGGGGGCCCGCCCGTCCCGCTCGCTCCTGCGGAGCAACCGCCTGCGGGCGGG +CGAGACAAAAGATTCGCTCATCCGCTATGAATACCAAATCGGAACTCTCTCTCTCTCCAG +CTCGGGAGTGCCATGGCCAGCATGGCCAGGACCTCCTCATGGTCCTGCCGAGCAGAGAAC +GCGGCTCCATCCCGCTGCTCCGGGTCCTGCTCCTCCGCTTTGTCCCGCCTCGTTATCGCC +GCTCAGCACCGAGAGCACAGCAGCGCATCCACTCTCAGCACCGCACGATTAGCACCGTTC +CGCTCAGGCTGTCCCGCTCGCACCTGCCTGGGTCGCTGCGATTGGCCGCTCCCAGCGACG +GCGGCCATTTGCCTGCAGAGCGCAGCGGTATAAAAGGGCGCGGGGTGGCTGAGAGCAGCA +CACTCGAGCTGTGACCGCCGCACAGTCAACAACTAACTGCCTTCGTTAATATCCTCTGAA +TAAGCCAACTTTGAATCACAAGACGCATACCAAACATGCACGGATACCGAACCTACAACA +TGGAGAGCCACCATGCCCATCACGACGCCAGTCCCGTGGACCAGAAGCCCCTGGTTGTGG +ACCTCTTGGCCACCCAGTACGGCAAGCCCCAGACACCGCCTCCCTCGCCAAATGGTAAGT +TTAAAGATAAAGCCGAGCAAACGTGACGAGTTACTTACACCCAATCTTTCCTCTGTCCAA +AACAGAATGCCTATCCAGTCCGGATAACTCCTTGAACGGCAGCCGCGGCTCGGAGATTCC +CGCCGACCCGTCGGTACGCCGCTATCGCACCGCCTTCACCCGTGACCAGCTGGGTCGCTT +GGAGAAGGAGTTCTACAAGGAGAACTACGTGTCCCGTCCCCGTCGCTGCGAACTGGCCGC +CCAGCTGAACCTCCCGGAGAGCACGATCAAGGTGTGGTTCCAGAACCGCCGCATGAAGGA +CAAGCGTCAGAGGATCGCCGTCGCCTGGCCCTACGCAGCCGTCTACTCCGATCCCGCCTT +CGCCGCCTCCATCCTCCAGGCCGCCGCCAACAGCGTGGGCATGCCCTATCCGCCCTACGC +CCCCGCTGCTGCCGCCGCTGCTGCCGCCGCCGCTGCCGTGGCCACCAATCCGATGATGGC +CACCGGAATGCCCCCGATGGGCATGCCCCAGATGCCCACAATGCAGATGCCCGGACACTC +GGGACATGCCGGCCATCCATCGCCCTACGGACAGTACCGCTACACGCCCTACCACATCCC +CGCCCGCCCGGCGCCGCCACATCCCGCTGGTCCTCATATGCATCATCCGCACATGATGGG +ATCCAGCGCAACGGGATCGTCGTACTCCGCCGGTGCCGCCGGCCTTTTGGGCGCTCTGCC +CTCCGCCACCTGCTATACCGGACTGGGTGTGGGTGTGCCCAAGACCCAGACGCCGCCGCT +GGATCTGCAGTCGTCGTCATCGCCGCACTCCTCCACGCTGTCGCTCTCGCCAGTGGGATC +CGATCACGCCAAGGTGTTCGACCGCAGTCCAGTGGCTCAATCCGCTCCATCAGTTCCTGC +TCCCGCTCCACTGACCACCACCAGCCCGCTGCCCGCTCCAGGCCTCCTGATGCCCAGTGC +CAAGCGGCCTGCCTCCGACATGTCGCCGCCGCCGACGACAACTGTGATTGCGGAGCCCAA +GCCGAAGCTCTTCAAGCCCTACAAGACTGAGGCGTAAGCCCGCGATCCACACACACTCTC +TCCCCCCCCCCCATGCTCCCCCAAAAGATTGTACAAACTAGTCTTAGTCAGCCTCATCTA +TTTATTCCCGAAGATTGTACAGATTGTAGAGTAGCTAATTGTAGTCATAATTAAGGCGCA +AAATCAAATTAAGAAATAAATGCGAAAATAACATTGAAAATTATACGACACACACTGTTT +ATTTGAACTACCTGGTACCTGGTATTATCTACATATATATCAACATATATTCATATACCT +GAGCTGAATCGCTTTTATGGACCTGGCTCTCTGGATTAGCTGTGGAGAAACCTGGCGGGA +CAGCTGCGCTGCTGACTGCTGACCTTCCCAGGGAAACTGTGGCAAATCGAACGGAAGAGC +GGCAGAGCGGCAGAGCCGCAGAGCGTGCCGAGTGTCCTTCGGAGTGGCCACCCACAATCA +GGAGTAAGGGTTCCCGATGCGGCACCGGCGGGGAAGGGAACAACATCCACGGGGGATTGG +CACAAGCCAATGGCTTATTAATGCGATCCGAACGGATCCAAGCGGGAGGGCCCATTGCAA +ATGCAGAGCCACCCCGCTGGGCGGCGACCTTGGCGAGGAGTTGGGCCCACTCCCTGCCAC +GCGTCAGGTTGCATTGCCAATGGAATCAATTTCGGTGTCCTCGGATTGCATTGGGCTCGG +CTAATTAATTGTCACCTCACCCGTTGAGTGACTTTTTTGTTTGTTGGTCCTGGCCTTATG +TTTGCTTTCTCTTCTCCATCGCCAGGCAATTGTCATAATTGAGAAATCATCGGAAGGACG +AGCCAGTGCGAGAAAGAGACAGAGAGAGAGAGAGAGAGGGCTGGTGGTAGAGTCCTTCTC +GAATCAAATCCCAATTTAATTACCGTGCAAAACATGTGTTTCAATTGCTCAGCCGTGGTG +TAAAGGGGTGTCAATTGCTCATAATCCCACAGCTAAAAAACGAGAGTCAACCCAAAGGCA +GGATAAACGATGGGTAAACGATGCGAGCGAGGCACAAGGATGTAGATACCAGCCACGGAT +GCTGATACACCCAGCCAGCCACCCCTGATCCCGGCTGTGTCTAATATCTAATTGAGCGCC +TGGCATCAAAACATGTTTTGACACTTGCCAGCCGAGCCAAATGGGCATAAAAAATGGTCC +TTGAAGTGTTATCCTTGCAGTTGGAGTGCCACGCACACACCCCTTTCCTTTGCTGGTGTT +TTGCGGAGTTTCGTCTCGTGTTTTCACTTGGGGGATGCGAACACACAAGTGGCAGCATTT +TATGATTTGATAATAAAGATACGCGCCACGGTTCCGCCCTGGGGAATTCCCCAGCAGATT +CGGATACAGTAAATTAAAAAATAGCCAAACAGGAAATCTCT diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/expression_hbb_k562.fa b/nim-skills/genomic-intelligence-nim/assets/demo/expression_hbb_k562.fa new file mode 100644 index 0000000..104dc29 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/expression_hbb_k562.fa @@ -0,0 +1,116 @@ +>human|HBB|TSS-centered|chr11:5222472-5231670|GRCh38|RC(gene-sense) +GTTAACTGTTTTGATCACAACATTTTGAATTGACTGGCAGCAGAAGCTCTTTTATATCCATGTGTTTTCCTTAAGTCATT +ATACATAGTAGGCACTGAGAACTCTTTATATCTGAATAAGATATTTAGGAACCACTGGTTTACATATCAGAAGCAGAGCT +ACTCAGGGCATTTTGGGGAAGATCACTTTCACATTCCTGAGCATAGGGAAGTTCTCATAAGAGTAAGATATTAAAAGGAG +ATACTTGTGTGGTATTCGAAAGACAGTAAGAGAGATTGTAGACCTTATGATCTTGATAGGGAAAACAAACTACATTCCTT +TCTCCAAAAGTCAAAAAAAAAGAGCAAATATAGCTTACTATACCTTCTATTCCTACACCATTAGAAGTAGTCAGTGAGTC +TAGGCAAGATGTTGGCCCTAAAAATCCAAATACCAGAGAATTCATGAGAACATCACCTGGATGGGACATGTGCCGAGCAC +ACACAATTACTATATGCTAGGCATTGCTATCTTCATATTGAAGATGAGGAGGTCAAGAGATGAAAAAAGACTTGGCACCT +TGTTGTTATATTAAAATTATTTGTTAGAGTAGAGCTTTTGTAAGAGTCTAGGAGTGTGGGAGCTAAATGATGATACACAT +GGACACAAAAAATAGATCAACAGACACCCAGGCCTACTTGAGGGTTGAGGGTGGGAAGAGGGAGACGATGAAAAAGAACC +TATTGGGTATTAAGTTCATCACTGAGTGATGAAATAATCTGTACATCAAGACCCAGTGATATGCAATTTACCTATATAAC +TTGTACATGTACCCCCAAATTTAAAATGAAAGTTAAAACAAAGTATAGGAATGGAATTAATTCCTCAAGATTTGGCTTTA +ATTTTATTTGATAATTTATCAAATGGTTGTTTTTCTTTTCTCACTATGGCGTTGCTTTATAAACTATGTTCAGTATGTCT +GAATGAAAGGGTGTGTGTGTGTGTGAAAGAGAGGGAGAGAGGAAGGGAAGAGAGGACGTAATAATGTGAATTTGAGTTCA +TGAAAATTTTTCAATAAAATAATTTAATGTCAGGAGAATTAAGCCTAATAGTCTCCTAAATCATCCATCTCTTGAGCTTC +AGAGCAGTCCTCTGAATTAATGCCTACATGTTTGTAAAGGGTGTTCAGACTGAAGCCAAGATTCTACCTCTAAAGAGATG +CAATCTCAAATTTATCTGAAGACTGTACCTCTGCTCTCCATAAATTGACACCATGGCCCACTTAATGAGGTTAAAAAAAA +GCTAATTCTGAATGAAAATCTGAGCCCAGTGGAGGAAATATTAATGAACAAGGTGCAGACTGAAATATAAATTTTTCTGT +AATAATTATGCATATACTTTAGCAAAGTTCTGTCTATGTTGACTTTATTGCTTTTTGGTAAGAAATACAACTTTTTAAAG +TGAACTAAACTATCCTATTTCCAAACTATTTTGTGTGTGTGCGGTTTGTTTCTATGGGTTCTGGTTTTCTTGGAGCATTT +TTATTTCATTTTAATTAATTAATTCTGAGAGCTGCTGAGTTGTGTTTACTGAGAGATTGTGTATCTGCGAGAGAAGTCTG +TAGCAAGTAGCTAGACTGTGCTTGACCTAGGAACATATACAGTAGATTGCTAAAATGTCTCACTTGGGGAATTTTAGACT +AAACAGTAGAGCATGTATAAAAATACTCTAGTCAAGTGCTGCTTTTGAAACAAATGATAAAACCACACTCCCATAGATGA +GTGTCATGATTTTCATGGAGGAAGTTAATATTCATCCTCTAAGTATACCCAGACTAGGGCCATTCTGATATAAAACATTA +GGACTTAAGAAAGATTAATAGACTGGAGTAAAGGAAATGGACCTCTGTCTCTCTCGCTGTCTCTTTTTTGAGGACTTGTG +TGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTTGTGGTCAGTGGGGCTGGAATAAAAGTAGAATAGACCTGCACCTGCTGT +GGCATCCATTCACAGAGTAGAAGCAAGCTCACAATAGTGAAGATGTCAGTAAGCTTGAATAGTTTTTCAGGAACTTTGAA +TGCTGATTTAGATTTGAAACTGAGGCTCTGACCATAACCAAATTTGCACTATTTATTGCTTCTTGAAACTTATTTGCCTG +GTATGCCTGGGCTTTTGATGGTCTTAGTATAGCTTGCAGCCTTGTCCCTGCAGGGTATTATGGGTAATAGAAAGAAAAGT +CTGCGTTACACTCTAGTCACACTAAGTAACTACCATTGGAAAAGCAACCCCTGCCTTGAAGCCAGGATGATGGTATCTGC +AGCAGTTGCCAACACAAGAGAAGGATCCATAGTTCATCATTTAAAAAAGAAAACAAAATAGAAAAAGGAAAACTATTTCT +GAGCATAAGAAGTTGTAGGGTAAGTCTTTAAGAAGGTGACAATTTCTGCCAATCAGGATTTCAAAGCTCTTGCTTTGACA +ATTTTGGTCTTTCAGAATACTATAAATATAACCTATATTATAATTTCATAAAGTCTGTGCATTTTCTTTGACCCAGGATA +TTTGCAAAAGACATATTCAAACTTCCGCAGAACACTTTATTTCACATATACATGCCTCTTATATCAGGGATGTGAAACAG +GGTCTTGAAAACTGTCTAAATCTAAAACAATGCTAATGCAGGTTTAAATTTAATAAAATAAAATCCAAAATCTAACAGCC +AAGTCAAATCTGCATGTTTTAACATTTAAAATATTTTAAAGACGTCTTTTCCCAGGATTCAACATGTGAAATCTTTTCTC +AGGGATACACGTGTGCCTAGATCCTCATTGCTTTAGTTTTTTACAGAGGAATGAATATAAAAAGAAAATACTTAAATTTT +ATCCCTCTTACCTCTATAATCATACATAGGCATAATTTTTTAACCTAGGCTCCAGATAGCCATAGAAGAACCAAACACTT +TCTGCGTGTGTGAGAATAATCAGAGTGAGATTTTTTCACAAGTACCTGATGAGGGTTGAGACAGGTAGAAAAAGTGAGAG +ATCTCTATTTATTTAGCAATAATAGAGAAAGCATTTAAGAGAATAAAGCAATGGAAATAAGAAATTTGTAAATTTCCTTC +TGATAACTAGAAATAGAGGATCCAGTTTCTTTTGGTTAACCTAAATTTTATTTCATTTTATTGTTTTATTTTATTTTATT +TTATTTTATTTTGTGTAATCGTAGTTTCAGAGTGTTAGAGCTGAAAGGAAGAAGTAGGAGAAACATGCAAAGTAAAAGTA +TAACACTTTCCTTACTAAACCGACATGGGTTTCCAGGTAGGGGCAGGATTCAGGATGACTGACAGGGCCCTTAGGGAACA +CTGAGACCCTACGCTGACCTCATAAATGCTTGCTACCTTTGCTGTTTTAATTACATCTTTTAATAGCAGGAAGCAGAACT +CTGCACTTCAAAAGTTTTTCCTCACCTGAGGAGTTAATTTAGTACAAGGGGAAAAAGTACAGGGGGATGGGAGAAAGGCG +ATCACGTTGGGAAGCTATAGAGAAAGAAGAGTAAATTTTAGTAAAGGAGGTTTAAACAAACAAAATATAAAGAGAAATAG +GAACTTGAATCAAGGAAATGATTTTAAAACGCAGTATTCTTAGTGGACTAGAGGAAAAAAATAATCTGAGCCAAGTAGAA +GACCTTTTCCCCTCCTACCCCTACTTTCTAAGTCACAGAGGCTTTTTGTTCCCCCAGACACTCTTGCAGATTAGTCCAGG +CAGAAACAGTTAGATGTCCCCAGTTAACCTCCTATTTGACACCACTGATTACCCCATTGATAGTCACACTTTGGGTTGTA +AGTGACTTTTTATTTATTTGTATTTTTGACTGCATTAAGAGGTCTCTAGTTTTTTATCTCTTGTTTCCCAAAACCTAATA +AGTAACTAATGCACAGAGCACATTGATTTGTATTTATTCTATTTTTAGACATAATTTATTAGCATGCATGAGCAAATTAA +GAAAAACAACAACAAATGAATGCATATATATGTATATGTATGTGTGTATATATACACACATATATATATATATTTTTTCT +TTTCTTACCAGAAGGTTTTAATCCAAATAAGGAGAAGATATGCTTAGAACCGAGGTAGAGTTTTCATCCATTCTGTCCTG +TAAGTATTTTGCATATTCTGGAGACGCAGGAAGAGATCCATCTACATATCCCAAAGCTGAATTATGGTAGACAAAACTCT +TCCACTTTTAGTGCATCAACTTCTTATTTGTGTAATAAGAAAATTGGGAAAACGATCTTCAATATGCTTACCAAGCTGTG +ATTCCAAATATTACGTAAATACACTTGCAAAGGAGGATGTTTTTAGTAGCAATTTGTACTGATGGTATGGGGCCAAGAGA +TATATCTTAGAGGGAGGGCTGAGGGTTTGAAGTCCAACTCCTAAGCCAGTGCCAGAAGAGCCAAGGACAGGTACGGCTGT +CATCACTTAGACCTCACCCTGTGGAGCCACACCCTAGGGTTGGCCAATCTACTCCCAGGAGCAGGGAGGGCAGGAGCCAG +GGCTGGGCATAAAAGTCAGGGCAGAGCCATCTATTGCTTACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAA +ACAGACACCATGGTGCATCTGACTCCTGAGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGT +TGGTGGTGAGGCCCTGGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGGAGACCAATAGAAACTGGGCATGTGGAG +ACAGAGAAGACTCTTGGGTTTCTGATAGGCACTGACTCTCTCTGCCTATTGGTCTATTTTCCCACCCTTAGGCTGCTGGT +GGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCTTTGGGGATCTGTCCACTCCTGATGCTGTTATGGGCAACCCTAAGG +TGAAGGCTCATGGCAAGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGCTCACCTGGACAACCTCAAGGGCACCTTTGCC +ACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAGGGTGAGTCTATGGGACGCTTGATGTTT +TCTTTCCCCTTCTTTTCTATGGTTAAGTTCATGTCATAGGAAGGGGATAAGTAACAGGGTACAGTTTAGAATGGGAAACA +GACGAATGATTGCATCAGTGTGGAAGTCTCAGGATCGTTTTAGTTTCTTTTATTTGCTGTTCATAACAATTGTTTTCTTT +TGTTTAATTCTTGCTTTCTTTTTTTTTCTTCTCCGCAATTTTTACTATTATACTTAATGCCTTAACATTGTGTATAACAA +AAGGAAATATCTCTGAGATACATTAAGTAACTTAAAAAAAAACTTTACACAGTCTGCCTAGTACATTACTATTTGGAATA +TATGTGTGCTTATTTGCATATTCATAATCTCCCTACTTTATTTTCTTTTATTTTTAATTGATACATAATCATTATACATA +TTTATGGGTTAAAGTGTAATGTTTTAATATGTGTACACATATTGACCAAATCAGGGTAATTTTGCATTTGTAATTTTAAA +AAATGCTTTCTTCTTTTAATATACTTTTTTGTTTATCTTATTTCTAATACTTTCCCTAATCTCTTTCTTTCAGGGCAATA +ATGATACAATGTATCATGCCTCTTTGCACCATTCTAAAGAATAACAGTGATAATTTCTGGGTTAAGGCAATAGCAATATC +TCTGCATATAAATATTTCTGCATATAAATTGTAACTGATGTAAGAGGTTTCATATTGCTAATAGCAGCTACAATCCAGCT +ACCATTCTGCTTTTATTTTATGGTTGGGATAAGGCTGGATTATTCTGAGTCCAAGCTAGGCCCTTTTGCTAATCATGTTC +ATACCTCTTATCTTCCTCCCACAGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAATTCAC +CCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTGGCCCACAAGTATCACTAAGCTCGCT +TTCTTGCTGTCCAATTTCTATTAAAGGTTCCTTTGTTCCCTAAGTCCAACTACTAAACTGGGGGATATTATGAAGGGCCT +TGAGCATCTGGATTCTGCCTAATAAAAAACATTTATTTTCATTGCAATGATGTATTTAAATTATTTCTGAATATTTTACT +AAAAAGGGAATGTGGGAGGTCAGTGCATTTAAAACATAAAGAAATGAAGAGCTAGTTCAAACCTTGGGAAAATACACTAT +ATCTTAAACTCCATGAAAGAAGGTGAGGCTGCAAACAGCTAATGCACATTGGCAACAGCCCCTGATGCATATGCCTTATT +CATCCCTCAGAAAAGGATTCAAGTAGAGGCTTGATTTGGAGGTTAAAGTTTTGCTATGCTGTATTTTACATTACTTATTG +TTTTAGCTGTCCTCATGAATGTCTTTTCACTACCCATTTGCTTATCCTGCATCTCTCAGCCTTGACTCCACTCAGTTCTC +TTGCTTAGAGATACCACCTTTCCCCTGAAGTGTTCCTTCCATGTTTTACGGCGAGATGGTTTCTCCTCGCCTGGCCACTC +AGCCTTAGTTGTCTCTGTTGTCTTATAGAGGTCTACTTGAAGAAGGAAAAACAGGGGTCATGGTTTGACTGTCCTGTGAG +CCCTTCTTCCCTGCCTCCCCCACTCACAGTGACCCGGAATCTGCAGTGCTAGTCTCCCGGAACTATCACTCTTTCACAGT +CTGCTTTGGAAGGACTGGGCTTAGTATGAAAAGTTAGGACTGAGAAGAATTTGAAAGGCGGCTTTTTGTAGCTTGATATT +CACTACTGTCTTATTACCCTGTCATAGGCCCACCCCAAATGGAAGTCCCATTCTTCCTCAGGATGTTTAAGATTAGCATT +CAGGAAGAGATCAGAGGTCTGCTGGCTCCCTTATCATGTCCCTTATGGTGCTTCTGGCTCTGCAGTTATTAGCATAGTGT +TACCATCAACCACCTTAACTTCATTTTTCTTATTCAATACCTAGGTAGGTAGATGCTAGATTCTGGAAATAAAATATGAG +TCTCAAGTGGTCCTTGTCCTCTCTCCCAGTCAAATTCTGAATCTAGTTGGCAAGATTCTGAAATCAAGGCATATAATCAG +TAATAAGTGATGATAGAAGGGTATATAGAAGAATTTTATTATATGAGAGGGTGAAACCCTCAAAATGAAATGAAATCAGA +CCCTTGTCTTACACCATAAACAAAAATAAATTTGAATGGGTTAAAGAATTAAACTAAGACCTAAAACCATAAAAATTTTT +AAAGAAATCAAAAGAAGAAAATTCTAATATTCACGTTGCAGCCGTTTTTTGAATTTGATATGAGAAGCAAAGGCAACAAA +AGGAAAAATAAAGAAGTGAGGCTACATCAAACTAAAAAATTTCCACACAAAAAACAAAACAATGAACAAATGAAAGGTGA +ACCATGAAATGGCATATTTGCAAACCAAATATTTCTTAAATATTTTGGTTAATATCCAAAATATATAAGAAACACAGATG +ATTCAATAACAAACAAAAAATTAAAAATAGGAAAATAAAAAAATTAAAAAGAAGAAAATCCTGCCATTTATGGCAGAATT +GATGAACCTGGAGGATGTAAAACTAAGAAAAATAAGCCTGACACAAAAAGACAAATACTACACAACCTTGCTCATATGTG +AAACATAAAAAAGTCACTCTCATGGAAACAGACAGTAGAGGTATGGTTTCCAGGGGTTGGGGGTGGGAGAATCAGGAAAC +TATTACTCAAAGGGTATAAAATTTCAGTTATGTGGGATGAATAAATTCTAGATATCTAATGTACAGCATCGTGACTGTAG +TTAATTGTACTGTAAGTATATTTAAAATTTGCAAAGAGAGTAGATTTTTTTTTTTTTTTAGATGGAGTTTTGCTCTTGTT +GTCCAGGCTGGAGTGCAATGGCAAGATCTTGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGCAAATCTCCTGCCTCAG +CCTCCCGAGTAGCTGGGATTACAGGCATGCGACACCATGCCCAGCTAATTTTGTATTTTTAGTAGAGACGGGGTTTCTCC +ATGTTGGTCAGGCTGATCCGCCTGCCTCGGCCACCCAAAGGGCTGGGATTACAGGCGTGAGCCACCGGGCCTGGCCGAGA +GTAGATCTTAAAAGCATTTACCACAAGAAAAAGGTAACTATGTGAGATAATGGGTATGTTAATTAGCTTGATTGTGGTAA +TCATTTCACAAGGTATACATATATTAAAACATCATGTTGTACACCTTAAATATATACAATTTTTATTTGTGAATGATACC +TCAATAAAGTTGAAGAATAATAAAAAAGAATAGACATCACATGAATTAAAAAACTAAAAAATAAAAAAATGCATCTTGAT +GATTAGAATTGCATTCTTGATTTTTCAGATACAAATATCCATTTGACTGTTTACTCTTTTCCAAAACAATACAATAAATT +TTAGCACTTTATCTTCATTTTCCCCTTCCCAATCTATAATTATATATATATATATTTTAGATATTTTGTATAGTTTTACT +CCCTAGATTTTCTAGTGTTATTATTAAATAGTGAAGAAATGTTTACACTTATGTACAAAATGTTTTGCATGCTTTTCTTC +ATTTCTAACATTCTCTCTAAGTTTATTCTATTTTTTTCTGATTATCCTTAATATTATCTCTTTCTGCTGGAAATACATTG +TTACTTTTGGTTTATCTAAAAATGGCTTCATTTTCTTCATTCTAAAATCATGTTAAATTAATACCACTCATGTGTAAGTA +AGATAGTGGAATAAATAGAAATCCAAAAACTAAATCTCACTAAAATATAATAATGTGATATATAAAAATATAGCTTTTAA +ATTTAGCTTGGAAATAAAAAACAAACAGTAATTGAACAACTATACTTTTTGAAAAGAGTAAAGTGAAATGCTTAACTGCA +TATACCACAATCGATTACACAATTAGGTGTGAAGGTAAAATTCAGTCACGAAAAAACTAGAATAAAAATATGGGAAGACA +TGTATATAATCTTAGAGATAACACTGTTATTTAATTATCAACCCAAAGTAGAAACTATCAAGGGAGAAATAAATTCAG diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/promoter_tp53.fa b/nim-skills/genomic-intelligence-nim/assets/demo/promoter_tp53.fa new file mode 100644 index 0000000..d40e54e --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/promoter_tp53.fa @@ -0,0 +1,431 @@ +>human|TP53|ENSG00000141510|chr17:7661779-7687546|GRCh38|strand:-1|gene-sense +GGATTGGGGTTTTCCCCTCCCATGTGCTCAAGACTGGCGCTAAAAGTTTTGAGCTTCTCA +AAAGTCTAGAGCCACCGTCCAGGGAGCAGGTAGCTGCTGGGCTCCGGGGACACTTTGCGT +TCGGGCTGGGAGCGTGCTTTCCACGACGGTGACACGCTTCCCTGGATTGGGTAAGCTCCT +GACTGAACTTGATGAGTCCTCTCTGAGTCACGGGCTCTCGGCTCCGTGTATTTTCAGCTC +GGGAAAATCGCTGGGGCTGGGGGTGGGGCAGTGGGGACTTAGCGAGTTTGGGGGTGAGTG +GGATGGAAGCTTGGCTAGAGGGATCATCATAGGAGTTGCATTGTTGGGAGACCTGGGTGT +AGATGATGGGGATGTTAGGACCATCCGAACTCAAAGTTGAACGCCTAGGCAGAGGAGTGG +AGCTTTGGGGAACCTTGAGCCGGCCTAAAGCGTACTTCTTTGCACATCCACCCGGTGCTG +GGCGTAGGGAATCCCTGAAATAAAAGATGCACAAAGCATTGAGGTCTGAGACTTTTGGAT +CTCGAAACATTGAGAACTCATAGCTGTATATTTTAGAGCCCATGGCATCCTAGTGAAAAC +TGGGGCTCCATTCCGAAATGATCATTTGGGGGTGATCCGGGGAGCCCAAGCTGCTAAGGT +CCCACAACTTCCGGACCTTTGTCCTTCCTGGAGCGATCTTTCCAGGCAGCCCCCGGCTCC +GCTAGATGGAGAAAATCCAATTGAAGGCTGTCAGTCGTGGAAGTGAGAAGTGCTAAACCA +GGGGTTTGCCCGCCAGGCCGAGGAGGACCGTCGCAATCTGAGAGGCCCGGCAGCCCTGTT +ATTGTTTGGCTCCACATTTACATTTCTGCCTCTTGCAGCAGCATTTCCGGTTTCTTTTTG +CCGGAGCAGCTCACTATTCACCCGATGAGAGGGGAGGAGAGAGAGAGAAAATGTCCTTTA +GGCCGGTTCCTCTTACTTGGCAGAGGGAGGCTGCTATTCTCCGCCTGCATTTCTTTTTCT +GGATTACTTAGTTATGGCCTTTGCAAAGGCAGGGGTATTTGTTTTGATGCAAACCTCAAT +CCCTCCCCTTCTTTGAATGGTGTGCCCCACCCCGCGGGTCGCCTGCAACCTAGGCGGACG +CTACCATGGCGTGAGACAGGGAGGGAAAGAAGTGTGCAGAAGGCAAGCCCGGAGGTATTT +TCAAGAATGAGTATATCTCATCTTCCCGGAGGAAAAAAAAAAAGAATGGGTACGTCTGAG +AATCAAATTTTGAAAGAGTGCAATGATGGGTCGTTTGATAATTTGTCGGAAAAACAATCT +ACCTGTTATCTAGCTTTGGGCTAGGCCATTCCAGTTCCAGACGCAGGCTGAACGTCGTGA +AGCGGAAGGGGCGGGCCCGCAGGCGTCCGTGTGGTCCTCCGTGCAGCCCTCCGGCCCGAG +CCGGTTCTTCCTGGTAGGAGGCGGAACTCGAATTCATTTCTCCCGCTGCCCCATCTCTTA +GCTCGCGGTTGTTTCATTCCGCAGTTTCTTCCCATGCACCTGCCGCGTACCGGCCACTTT +GTGCCGTACTTACGTCATCTTTTTCCTAAATCGAGGTGGCATTTACACACAGCGCCAGTG +CACACAGCAAGTGCACAGGAAGATGAGTTTTGGCCCCTAACCGCTCCGTGATGCCTACCA +AGTCACAGACCCTTTTCATCGTCCCAGAAACGTTTCATCACGTCTCTTCCCAGTCGATTC +CCGACCCCACCTTTATTTTGATCTCCATAACCATTTTGCCTGTTGGAGAACTTCATATAG +AATGGAATCAGGCTGGGCGCTGTGGCTCACGCCTGCACTTTGGGAGGCCGAGGCGGGCGG +ATTACTTGAGGATAGGAGTTCCAGACCAGCGTGGCCAACGTGGTGAATCCCCGTCTCTAC +TAAAAAATACAAAAATTAGCTGGGCGTGGTGGGTGCCTGTAATCCCAGCTATTCGGGAGG +GTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCAGAGGTTGCAGTGAGCCAAGATCGTGC +CACTACACTCCAGCCTGGGCGACAAGAACGAAACTCCGTCTCAAAAAAAAGGGGGGAATC +ATACATTATGTGCTCATTTTTGTCGGGCTTCTGTCCTTCAATGTACTGTCTGACATTCGT +TCATGTTGTATATATCAGTATTTTGCTCCTTTTCATTTAGTATAGTCCATCGATTGTATA +TCCGTCCTTTTGATGGCCTTTTGAGTTGTTTCCCATTTGCGGTTATGAAATAAAGCTGCT +ATAAACATTCTTGTACAATTCTTTTTGTGATCATATGTTTTCGTGTTTCTTGGAGAAATA +CTTAGGAGGGGAATTGCGAGTTTGGAAGTAAAAAGTAGCTGTATTTTGAACTTTTTCAGA +AGCTCTGAGTTTTCCAGAGCGGTTGTACCATTTTACACTCCAACTAGCAAGGTATGGGAG +TTATTATGGTTGTGCCACAGCCTTCCGGACATTAGGTATTGTCAGTCTTTCTAATGTGGT +ATATCCTTGTGGTTGTAATTTACAGTTCTCTATTGACTAAGGATGTTCAGCATTTTTTCA +TGTGCCTATTGGCCATTCGTATTTTGTTTGTAAAGTAGCTCTTCGAGTCTTTTACCTGTT +ATTTTGGTTTTTTGTTTGTTTTTATTGTTCAGTTGTGGGACTGCTTTATACATTCTGGAT +ACAAGTCCTTTATCAGATCCATGTGTCGTGAATGTTTTCTTCTGATCTGTTGCTTGCCTA +TTTGTTTGCTTTACAGAGTTTACAGTATCTTAAGAGGAGTGGATTTATCTTTTTTATGTT +CAGTATTTGCCTTGTCCTGTTTAGGACATCTTTTTTTTTTTTTTTAACCCCAGGGTCATG +AAGATATTATCTTACATTTTCTTTTAGGACCTTTATGGTTGTAAGTTTTACAGTAAGGTC +CTTGAGCCATTAATTAATTCTTAAAATTAATTGTTTATGGTGTGAGGTGTAGGAGTCAGT +CTCTGGTATCTTTCCTGTATGGAAATCCAGTTATTCTGTCTCCACTTGTTGAAATAGGCT +TCCTTTCTCTACTGAATGCTTTTAATTTTAATTATTTTACAGTTGGAGTATAGGGCTACC +ATTTTAGTGCTATTTTCTTTTTTTCTTTGTTAATTTTTGAGACAGGGACTCACACTGTTG +CCCAGGCTAGAGTACAATGGCACAATCAAGGCTTACTGCAGCCTCGAACCCCTGGGCTCA +AGCAGTCCTCTAGCAGCCTCACGAGTAGCTGGGATTACTCCACCACACCCAGCTAACTAT +TTTATTTTTTTGTATTGACAGGATCTCACTATGTTGCCCAGGCTGGTCTCAAACTGCTGG +CCTCAAGCTTTCATCCCATCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACC +ATGCCTGACCTCTTAGTGCTATTTTCTATTTATCTCCTCTGTTCTCTGCTCTCTTTAAAC +GTTGGAGGAAGAAACAGTACCCATCTTACACAAACTCTTCAGAAAACAGAGGAACAGACT +GGGCGCGGTGGCTCATACCTGTAATCTCAGCACTTTGGTACGCTGAGGCAGGGGATCATT +TGAGGTCGGGAGTTCGAGACCAGCCTGGCCAACACGGCGAAACCCCATCTCTACTAAAAA +TACAAAAAGTAGCTAGGCGTGGTGACACATACCTGTAATGCCAGTTACTCAGGAGGCTGA +GGCACAAGAATCCCTTGAACCTGGGAAGCGGAGGTTGCAGTGAGCCGAGATTGCGCCACT +GCACTCCAGCCTGGGCAACAGAGTGAGACCCTGTCTCAGAAAAAAAAAGAAAGAAAGAAA +AAATAGAGGAATATTTCCCAACTTGTTTTCGAAGCCAGCATAATCCTGGTACCAAAACCA +AACAAGGACATTATAAGAAAAGAAAATATAGACCAATATTCCTGTTAGCATAGACATGCA +ACAGCTAACCAATTTTAGCAAACCAAACCTGGTAATATAGAAAAAAGGATAAATAGGCCA +GTCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCTGAGGCAGGCAGATCACT +TGAGGTCAGGAGTTTGAGACCAGCCTGACCAACATGGTGAAACCCCGTTTCTAATAAAAA +TACAAAAATCAGGCTGGGCACGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG +AGGTGGGCAGATCACGAGGTCAGGAGTTCAAGACCAGCCTGACCAATGTGGTGAAACGCC +ATCTCTACTAAAAATACAAAAATCAGCCGGTGTGGTGGCACCTGCCTGTAATCCCAGCTA +CTCAGGAGGCTGAGGCAGAATTGCTTGAACCCGGGAGGCAGAGGTTGCAGTGAGCCAAGA +TCGTGCCACTGCACTCCAGCCTGGGCGACAGAGCAAGACTTCATCTCAAAAAAAAAAAAA +AATTAGCTGGGCATGGTGGTGGGCACCTGAAATCCCAGCTACTCGGGAGTCTGAGGCAGG +AGAATCGCTTGAACCCAGGAGGCAGAAGTTGCACTGAGCTGGGATCACACCATTGCACTC +CAGCCTGGGCAACAGAGTGAGACTCCATCTCAAAAAAAGAAAAAGAAAAAGGATAAATAC +ATTCTAACCAAATAATGTTTATCTCATGATTGTAGCTGATTCAACATTCAAAAATTGGCC +TGGTGCAGTAGCTCAGGCCTGTAATCCCAACATTTTAGGAGGCTGAGGCAGGAAGATCTC +TTGAGCCCAGGATTTCAAGACCAGCCTGGGCAACATAGTCAGACTGGTCTTTACTGGGGG +GAAAAAAATCAGTCTGTGTAATTCACCACATTAACAAAGGGAAACATAAAAACCCTATGA +TCATTTCAACAGATGTAGCAAAAGCAGTTAATGATATTCAACACATATGCATGATTACAA +ACCAACCAACCTCCTAGCAAACTAGGGAAAGGAAACTTAACCTAGTTTGATAACAGGGCG +TCCACAGTCGGAGTTCCACTAGCAGCATACATAATGGTAGAAAACTCAGTGCTGCCGGGC +GCGGTGGCTCACGCCTGTAATGCCAGCACTTTGGGAGGCCTAGGCGGGCGGATCACGAGG +TCAGGAGATCGAGACTGTCCTGACTAGCATGCTGAAACCCCGTCTCTACTAAAAATACAA +AAACAAAAAATTAGCCGGGCATGGTGGCGGGCGCCTATAGTCCCAGCTACTCGGGAGGCT +GAGGCGAGAGAATGGCGTGAACCCGGGAGGCGGAGCTTGCAGAGCCTAGATCGTGCCACT +GCACTCCAGCCTGGGTGACAGAGTGAGACTTCGTCTCAAAAAAAAAAAAAAAAAAAAAAG +AAAAGAAAACTCAACGCTTTTTCCTCTAAGATCAGGAACTAGAAAAGGATTTGACTCTCA +CAACGTTGATACCATACTGGAGGTTTTAACCAGGCAAGAAAAAGAAATAATGAGGGCCGG +GTGCGGTGGCTCAGGCCTGTAATCCCAGCACTTTGGGAAGCCGAGACGGGTGGATCACGA +GGTCAGGAGATCGAGACCATCCTGGCTAACACGGTGAAACCCTGTCTCTACTAAATATAC +AAAAAATTAGCCGGGCGTAGTGGCGGGCGCCTGTAGTCCCAGCTACTCGGGAGGCTGAGG +CAGGAGAATGGCGTGAACTCAGGGGGCGGAGCTTGCAGTGAGCTGAGATCGAGCCACTGC +ACTCCAGCCTGGGCGACAGAGCAAGACTGTGTCTCAAAAAAAAAAAAAGAAAAAGAAATA +ATGATTAGTGGCCCGATGTCTCACGCCTATAATCCCAGCACTTTGGGAGGCCGAGGTGGG +CAGATCACCTGAGGTCTGGAGTTGGAGACCAGCCTGACAAAGATGGTGAAACCTCGTCTC +TATTAAAATATTAAAAAAATAGCCAGGCGTTGGCCGGGTACAGTGGCTCATGCCTGTAAT +CCCAGCACTTTGGGAGGCCGAGGTGGGTGGATCACCTGAGGTCAGGAGTTCAACACCAGC +CTGGCCAACATGGTGAAACCCCATCTCTACTAAAAATACAAAAATTAGCCGGGCGTAGTG +GCGGGCGCCTGTAATCCCAGCTACTTGGGAGGCTTAGGCAGGAGAATCGCTTGAACCTGG +GAGGCGGAGGTTGTAGTGAGCCGAGATTGCACCATTGCACTCCAGCCTGGGTGACAAAAG +CAAAAACTCCGTCTCAAAAAAAAAAGAATTAGCCAGGGGTAGTGGTGAACGCCTGTAGTC +CCAGCTACTCAGGAGGCAGAGGCAGGAGAATCACTTGAACCCAGGAGGCAGAGGTTGCAG +TGAGCCGAGATTGTCCCATTGCACTCCAGCCTAGGCGACAAGAGCAAAATTCCATGTCAA +AAAAAAAAAAAAAAAAGGAAAGAAAAAAAATAACGATTAGAAAGGAAGAAATAAAACACA +TTCACAGCCAGTATGATTCTATACATACATGTCCTAATGGGGCCAGGCGTGGTGGCTCAT +GCCTGTAATCCTAGCACTTTTAGGAGGCTGAGGCAGGTGGCTTCCCTGGGACCAGCCTGG +CCAACATGGTGAAACCCCAACTCTAATAAAAATACAAAAAATCAGCCAGGCGTGGTGACG +GGCACCTCTAATCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATTGCTTGGACCTGGGAG +GCAGAGGTTGCAGTGAGCCGAGATCGCGCTATTGCACTCCAGCCTGGGCAACAAGAGTGA +AACTCCGGCAGGGTGTGGTGGCTTACGCCTGTAATCCCAGCACTTCGGGAGGCTGAGGCA +GGCCGATCACCTGAGGTCAGGAGTTTGAGACCAACCTAACATGGTGAAACCCCGTCTCTA +CTAAAAATACAAGAATTAGCTGGGTGTAGTGGTGGGCGCCTGTAATCCCAGCTACTTGGG +AGGCTGAGACAGAAGAATTGCTTGAACCCAGGAGGTGGAGGTTGCAGTGAGCTGAGATCA +TGCCATTGCACACCACGCCGGGCAACAGAGCGAGATTCCGTCTCAAAAAAAAAAAAAAAG +AGTGAAACTCTATCTCAAAAAAAAAAAAAAGTCCTAATGGAAAATCCATAAAAAGCTACC +AAAACTAATAAATAAATATAGCAGGGTTGCAGGTTACAGGGCAATATAGTTATCCCTCTA +TCTGTAGGGGCTTGGTTCTGGGACTCCTCACACACCAAACCCACAGATGTCTAAGTCCCA +TATATAAGACGGTATAGTATTTGGATTTAACCTACACATATCCTCCCATATAGTTTAAAT +TATCTCTAGATTACTTACATTACCCCCATACAATGAAAATGCTAATGTACATGCAAGTAT +GTATGTAAGTACTTGTACTATATTGTTTAGGGAATCACTGGACATATAGGCCTTCAAGAC +TGATACCAGCAGCCACTGTTAAGATTCTGGTCAGGCCTGCCCCTGTTTGGGGTCTCAGTT +GATCTCATTGCCTTCCCACCCAGCCAAGGGCACCTGCATTTCTCTTGGCTCCCTGGCCAT +TTGGAAGGCCTAGTTCAGCCTGGCACATTTGTATCCTGGCCCACTGATGCTGGTACCCCT +GGGAAGGTCCTGCTCTGAAAAACACGGAGATTTTAGTTGCTACTGAAGATTTGAGAGATA +AAGACAGGGAGACCTGTCTGTAGACCTGTGTCCCTCCAAGTGGGATTGAGACTTTGGGCC +CCCCATTTCAGGACAGCACCTCCTGGCCTGTTGACTGAATAGATCCCTGAAGGAGGTGTA +CTTGCATTAATGGAGTGGGGGTGGGAGCAGTACCACAGATCCGCACTAACAATCACACAG +TTCTCTCTAGAATAATAATATAGAACAAGTGAAATAGAACAATTGCAGAAAGAGCTAACC +TTTGTTGAGCTCTTACTGTGTGCCCAGCACTTTCCTCAACTCTACATTTCCCATAATACA +CAGAGTACTAGGTAGGCCAGGCTTGGTGGCTCACGCCTGTAATCCCAGCACTTTAGGAGG +CCAAGGGGGGTGGATCACCTGAGGTCGGGAGTTCAAGACCAGCCTGACCAACATGGTGAA +ACCCCGTCTCTACTAGAAGTACAAAATTAGCCAGGTGTGGTGGCACATGCTTGTAGTCCT +AGCTACTCAGCAGGCTGAGGCAGGAGAATCATTTGAATCCGGGAGGAGGTTGCAGTAAGC +GGAGATAGTGCCACTGTACTCCAGCCTGGGCAATAAGAGCTGAGACTCCGTCTCAAAATA +AAATAAAATAAAATAAAATAAAATAAAATAAAATAAAAAAAGAAAAGAGCCTGCCATTAA +AGGAGCTGTTTGGTAGGGGATGTTTTGTCAGTGCAAACAACAGAAAAGTGGGCTGGGCAC +AGTGGTTCATGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCGGGCGGATCACCTGAAG +TTGGGAGTTCAAGACCAGCCTGACCAATATGGAGAAACCCCGTCTCTACTAAAAATACAA +AATTAGCCGGGCGCAGTGGCGCATGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG +AGAATCGCTTGAACCTGGGAGGCAGAGGTTGCGGTGAGCCGAGATCGCACCATTGCACTC +CAGCCTGGACGAGAGCAAAACTCTGTCTCAAAAAAAAAAAAAAACAGAAAAGTGTAACAA +ACACTTACAGTAGGCATGTTTCTTAGCAAATCTGATGACAAATTTGGCATAAAGAAAGAG +AGCATCCCTGAAAAAAAAAAAAAGAAAAAGAAAGAGAGCATCCTGCCTGGGCAACATAGT +GAAACCCTGCCTCTACAAAAAAACTCAAAAATTGGCCGGGTGCAGTGGCTCACACCTGTA +ATCCCAGCACTTTGGGAGTCGGAGGCGGGAGGATCACCTGAGGTCAGGAGTTCGAAACCA +GCCTGGCCAACATGGCAAAACCCCATCTCTACTAAAAATACAAAAAATTAATCAGGCGCA +TTGGTGGGCGCCTGTAATCCCAGCTACTCAGGAAGTTGAGGCAAGAGGATCGCTTGAATC +TGGGAGGTGGAGGTTACAGTGAGTCGAGATCACACCACTGCACTCTAGCCTGGGTGACAG +GGCGAGACTCCGTCTCCAAAAAAAAAAAGAAAAAGAAAAAGACTAAAAAATTAGCCAGGC +AGGCCTCTGTGGTCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCACTGAGCCCAGGAG +TCCGAGGCTGTAGTGAGCCATGATTGCACCACTGTACCCTAGCTTGGGCAACAAAGCAAG +ACCCTGCCTCAAAAGAAAAAAGAAAGAAAGAAAGAACATGGCGGGCCAGGCACAGTGGCT +CACACCTGTAATCCCAGCGCTTTGAGAGGCCGAGGCAGGTGGATCACAAGGTCAGGAGTT +CCACACCAGCCTGGCCAACATGGTGAAACCCTGTCTCTACTAAAAATACAAAAAATCAGC +CAGGCATGGTGGCAGGGGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATTG +CTTGAAACCAGAAGGCAGAGGTTGCAGTGAGCCTAGACTGCACCACTGCACTCCAGCCTG +GGCGAAAAGAGCCAAACTCCATCTCAAAAAACAAACAAAAAAACAAAACAAAAGAAAACA +TGGCAAAGCCTTTGAAAGCTTGTCTGGGAGAAGGTGCGATGATAGTTGCATAACTTCGTG +CAAGATGCTGGTCCACACAGGGGCTGCCCCTTGCTCTTTCTCGCTCTCTTAACCTCTCAT +ATAACAGGCTTGTGTGTTATTCACATTTATTGAGCCCAAGCAGGTGCAAGGCATTGTGAT +CTAATACTTTGGTCAGCAAGACAACAAGATAGATCACTGCCCTGCCCTTAGGAAGTGTAT +ATGCTATTAGAGGAAACAGATAAAATAAACAAGGAAAAGTATCAGACAATGTAAGTGCTA +TGAGAATGCAAATGAGGTGATGTGAATTAAAATAGGATGACTTAAAGTCTGCACGGGAAG +GAGCCTACCCCCATGTTCCTGGCTAGCCAAGGAACCACCAGTTGATTAGCAGAGAAGGGC +AGCCAGTCTAGCTAGAGCTTTTGGGGAAGAGGGAGTGGTTGTTAAGAGATGAGATTAAAG +AAGCCGAGACGGGCCATTCGTGAGGGGTTTGTAATGCAGGGCTGAGGAGTGTCCGAAGAG +AATGGGCAGGTGAGCGGTGAGACAGTTGTTCTTCCAGAAGCTTTGCAGTGAAAGGAATCA +AAGAAATGGAGCCGTGTATCAGGTGGGGAAGGGTGGGGGCCAAGGGGGTGTCCTTCCCCA +TACAGAGATTGCAGGCTGAGAATGACTATATCCTTGTTAACAGGAGGTGGGAGCAGGGCA +CGGTAGCTCACACCTGTAATCTTGGCACTTTAGGAGGCTGAGGCGGGCCGATCACCTGAA +GTAAGGAGTTCGAGACCAGCCTGGCCAACATGCAAAGCCCTGTCTCTACTAAAAATACAA +AAATTAGCTGGGTGTGGTGGTACTCGCCTGTAATCCCAGCTACTCGGGAGACTGAGGCAG +GAGAATGGCTTGAACCCGGAAGGTAGAGGTTGCAGTGAGCTGAGATCATGCCACTGTGCT +CCAGCCTAGGTGACAGAGAGAGACTCCATCTCAAAAAAAAAAAAAAAATACAGGAAGGGA +GTTGGGAATAGGGTGCACATTTAGGAAGTCTTGGGGATTTAGTGGTGGGAAGGTTGGAAG +TCCCTCTCTGATTGTCTTTTCCTCAAAGAAGTGCATGGCTGGTGAGGGGTGGGGCAGGAG +TGCTTGGGTTGTGGTGAAACATTGGAAGAGAGAATGTGAAGCAGCCATTCTTTTCCTGCT +CCACAGGAAGCCGAGCTGTCTCAGACACTGGCATGGTGTTGGGGGAGGGGGTTCCTTCTC +TGCAGGCCCAGGTGACCCAGGGTTGGAAGTGTCTCATGCTGGATCCCCACTTTTCCTCTT +GCAGCAGCCAGACTGCCTTCCGGGTCACTGCCATGGAGGAGCCGCAGTCAGATCCTAGCG +TCGAGCCCCCTCTGAGTCAGGAAACATTTTCAGACCTATGGAAACTGTGAGTGGATCCAT +TGGAAGGGCAGGCCCACCACCCCCACCCCAACCCCAGCCCCCTAGCAGAGACCTGTGGGA +AGCGAAAATTCCATGGGACTGACTTTCTGCTCTTGTCTTTCAGACTTCCTGAAAACAACG +TTCTGGTAAGGACAAGGGTTGGGCTGGGGACCTGGAGGGCTGGGGACCTGGAGGGCTGGG +GGGCTGGGGGGCTGAGGACCTGGTCCTCTGACTGCTCTTTTCACCCATCTACAGTCCCCC +TTGCCGTCCCAAGCAATGGATGATTTGATGCTGTCCCCGGACGATATTGAACAATGGTTC +ACTGAAGACCCAGGTCCAGATGAAGCTCCCAGAATGCCAGAGGCTGCTCCCCCCGTGGCC +CCTGCACCAGCAGCTCCTACACCGGCGGCCCCTGCACCAGCCCCCTCCTGGCCCCTGTCA +TCTTCTGTCCCTTCCCAGAAAACCTACCAGGGCAGCTACGGTTTCCGTCTGGGCTTCTTG +CATTCTGGGACAGCCAAGTCTGTGACTTGCACGGTCAGTTGCCCTGAGGGGCTGGCTTCC +ATGAGACTTCAATGCCTGGCCGTATCCCCCTGCATTTCTTTTGTTTGGAACTTTGGGATT +CCTCTTCACCCTTTGGCTTCCTGTCAGTGTTTTTTTATAGTTTACCCACTTAATGTGTGA +TCTCTGACTCCTGTCCCAAAGTTGAATATTCCCCCCTTGAATTTGGGCTTTTATCCATCC +CATCACACCCTCAGCATCTCTCCTGGGGATGCAGAACTTTTCTTTTTCTTCATCCACGTG +TATTCCTTGGCTTTTGAAAATAAGCTCCTGACCAGGCTTGGTGGCTCACACCTGCAATCC +CAGCACTCTCAAAGAGGCCAAGGCAGGCAGATCACCTGAGCCCAGGAGTTCAAGACCAGC +CTGGGTAACATGATGAAACCTCGTCTCTACAAAAAAATACAAAAAATTAGCCAGGCATGG +TGGTGCACACCTATAGTCCCAGCCACTTAGGAGGCTGAGGTGGGAAGATCACTTGAGGCC +AGGAGATGGAGGCTGCAGTGAGCTGTGATCACACCACTGTGCTCCAGCCTGAGTGACAGA +GCAAGACCCTATCTCAAAAAAAAAAAAAAAAAAGAAAAGCTCCTGAGGTGTAGACGCCAA +CTCTCTCTAGCTCGCTAGTGGGTTGCAGGAGGTGCTTACGCATGTTTGTTTCTTTGCTGC +CGTCTTCCAGTTGCTTTATCTGTTCACTTGTGCCCTGACTTTCAACTCTGTCTCCTTCCT +CTTCCTACAGTACTCCCCTGCCCTCAACAAGATGTTTTGCCAACTGGCCAAGACCTGCCC +TGTGCAGCTGTGGGTTGATTCCACACCCCCGCCCGGCACCCGCGTCCGCGCCATGGCCAT +CTACAAGCAGTCACAGCACATGACGGAGGTTGTGAGGCGCTGCCCCCACCATGAGCGCTG +CTCAGATAGCGATGGTGAGCAGCTGGGGCTGGAGAGACGACAGGGCTGGTTGCCCAGGGT +CCCCAGGCCTCTGATTCCTCACTGATTGCTCTTAGGTCTGGCCCCTCCTCAGCATCTTAT +CCGAGTGGAAGGAAATTTGCGTGTGGAGTATTTGGATGACAGAAACACTTTTCGACATAG +TGTGGTGGTGCCCTATGAGCCGCCTGAGGTCTGGTTTGCAACTGGGGTCTCTGGGAGGAG +GGGTTAAGGGTGGTTGTCAGTGGCCCTCCAGGTGAGCAGTAGGGGGGCTTTCTCCTGCTG +CTTATTTGACCTCCCTATAACCCCATGAGATGTGCAAAGTAAATGGGTTTAACTATTGCA +CAGTTGAAAAAACTGAAGCTTACAGAGGCTAAGGGCCTCCCCTGCTTGGCTGGGCGCAGT +GGCTCATGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCAGGCGGATCACGAGGTTGGG +AGATCGAGACCATCCTGGCTAACGGTGAAACCCCGTCTCTACTGAAAAATACAAAAAAAA +ATTAGCCGGGCGTGGTGCTGGGCACCTGTAGTCCCAGCTACTCGGGAGGCTGAGGAAGGA +GAATGGCGTGAACCTGGGCGGTGGAGCTTGCAGTGAGCTGAGATCACGCCACTGCACTCC +AGCCTGGGCGACAGAGCGAGATTCCATCTCAAAAAAAAAAAAAAAAGGCCTCCCCTGCTT +GCCACAGGTCTCCCCAAGGCGCACTGGCCTCATCTTGGGCCTGTGTTATCTCCTAGGTTG +GCTCTGACTGTACCACCATCCACTACAACTACATGTGTAACAGTTCCTGCATGGGCGGCA +TGAACCGGAGGCCCATCCTCACCATCATCACACTGGAAGACTCCAGGTCAGGAGCCACTT +GCCACCCTGCACACTGGCCTGCTGTGCCCCAGCCTCTGCTTGCCTCTGACCCCTGGGCCC +ACCTCTTACCGATTTCTTCCATACTACTACCCATCCACCTCTCATCACATCCCCGGCGGG +GAATCTCCTTACTGCTCCCACTCAGTTTTCTTTTCTCTGGCTTTGGGACCTCTTAACCTG +TGGCTTCTCCTCCACCTACCTGGAGCTGGAGCTTAGGCTCCAGAAAGGACAAGGGTGGTT +GGGAGTAGATGGAGCCTGGTTTTTTAAATGGGACAGGTAGGACCTGATTTCCTTACTGCC +TCTTGCTTCTCTTTTCCTATCCTGAGTAGTGGTAATCTACTGGGACGGAACAGCTTTGAG +GTGCGTGTTTGTGCCTGTCCTGGGAGAGACCGGCGCACAGAGGAAGAGAATCTCCGCAAG +AAAGGGGAGCCTCACCACGAGCTGCCCCCAGGGAGCACTAAGCGAGGTAAGCAAGCAGGA +CAAGAAGCGGTGGAGGAGACCAAGGGTGCAGTTATGCCTCAGATTCACTTTTATCACCTT +TCCTTGCCTCTTTCCTAGCACTGCCCAACAACACCAGCTCCTCTCCCCAGCCAAAGAAGA +AACCACTGGATGGAGAATATTTCACCCTTCAGGTACTAAGTCTTGGGACCTCTTATCAAG +TGGAAAGTTTCCAGTCTAACACTCAAAATGCCGTTTTCTTCTTGACTGTTTTACCTGCAA +TTGGGGCATTTGCCATCAGGGGGCAGTGATGCCTCAAAGACAATGGCTCCTGGTTGTAGC +TAACTAACTTCAGAACACCAACTTATACCATAATATATATTTTAAAGGACCAGACCAGCT +TTCAAAAAGAAAATTGTTAAAGAGAGCATGAAAATGGTTCTATGACTTTGCCTGATACAG +ATGCTACTTGACTTACGATGGTGTTACTTCCTGATAAACTCGTCGTAAGTTGAAAATATT +GTAAGTTGAAAATGGATTTAATACACCTAATCTAAGGAACATCATAGCTTAGCCTAGCCT +GCTTTTTTTTTTTTTTTTTTTGGAGACAGAGTCTCACTCTGTCACCCAGGCTGGAGTGCA +GTGGCGGGATCTCGGCTCACTGCAACCTCCGCCTTCTGGGTTCAAGCGATTCTCCTGCCT +CAGCCCACTGAGTAGCTGGGATTACAGGCACCTGCCCCGACGCCCAGCTAATTTTTTGTT +ATTTATTTATTTTTTTTTTTAGTAGAGATGAGGTTTCACCATGTTGGCCAGGCTAGTCTC +GAACTCCTGACCTTGTGATCTGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCGT +GAGCCACCGCACCCGGCCTGCCTAGCCTACTTTTATTTTATTTTTAATGGAGACAGCATC +TTGCTCTGTTGCCCAGGCTGGATTACAGTGATGTGATCATAGCTCATTATACCCTCCTGG +GCTCAAGCAATCCCCCTAACTCTGCCTCCCCAGTAGCTAGGACCACAGGCATACACCACC +ATACCCAGCTAATTTTTAAAATTTTTTGTAGATAGATAGAGTCTCACTATGTTGCCCAGG +CTGGTCTCTAGCCTACTTTTTTGAGACAAGGTCTTGCTCTGTCACCCAGGCTGGATAGAG +TGCAGTAGTGCAGTCACAGCTCACTGCAGCCTCCACCTCCCAGGCTCCATCCATCCTCCC +AGCTCAGCCTCCCAAGTTGCTTCAACTACAGGCCTGCACCACCATGCCTGGCTAATTTTT +ATTTATTTATTTTTATTTTATTTTATTTTATTTTTTTGAGACTCAGTCTCACTCTGTCGC +CCAGGCTGGAGTGCAGTGGCATGATCTCGGCTCACTGCAACCTCTGCCTCCTGGGTTCAA +GTGATTCTCCTGCCTCAGCCTCCCGAATAGCTAGGACTACAAGCGCCTGCTACCACGCCC +AGCTAATTTTTGTATTTTTAGTAGAGACAGGGTTTCACCATGTTGGCCAGGCTGGTCTCG +AACTTCTGACCATGTGATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTG +AGCCACCACGCCCGGCTAATTTTTATTTATTTATTTAAAGACAGAGTCTCACTCTGTCAC +TCAGGCTAGAGTGCAGTGGCACCATCTCAGCTCACTGCAGCCTTGACCTCCCTGGGCTCC +GGTGATTTCACCCTCCCAAGTAGCTAGGACTACAGGCACATGCCACGACACCCAGCTAAT +TTTTTATTTTCTGTGAAGTCAAGGTCTTGCTACGTTGCCCATGCTGGTATCAAACCCCTG +GGCTCAATCAATCCTTCCACCTCAGCCTCCCCAAGTATTGGGGTTACAGGCATGAGCTAC +CACACTCAGCCCTAGCCTACTTGAAACGTGTTCAGAGCATTTAAGTTACCCTACAGTTGG +GCAAAGTCATCTAACACAAAGCCCTTTTTATAGTAATAAAATGTTGTATATCTCATGTGA +TTTATTGAATATTGTTACTGAAAGTGAGAAACAGCATGGTTGCATGAAAGGAGGCACAGT +CGAGCCAGGCACAGCCTGGGCGCAGAGCGAGACTCAAAAAAAGAAAAGGCCAGGCGCACT +GGCTCACGCCTGTAATCCCAGCATTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCA +GGAGTTCAAGACCAGCCTAGCCAACATGGTGAAACCCCGTCTCTACTAAAATACAAAAAT +TAACCGGGCGTGATGGCAGGTGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGGAGA +ATCGCTTGAACCAGGAGGCGGAGGTTGCAGGGAGCCAAGATGGCGCCACTGCACTCCAGC +CTGGGCGATAGAGTGAGACTCCGTCTCAGAAAAAAAAGAAAAGAAACGAGGCACAGTCGC +ATGCACATGTAGTCCCAGTTACTTGAGAGGCTAAGGCAGGAGGATCTCTTGAGCCCAAGA +GTTTGAGTCCAGCCTGAACAACATAGCAAGACATCATCTCTAAAATTTAAAAAAGGGCCG +GGCACAGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGTGGAGGTGGGTAGATCACC +TGACGTCAGGAGTTGGAAACCAGCCTGGCTAACATGGTGAAGCCCCATCTCTACTAAAAA +CACAAAAATTAGCCAGGTGTGGTAGCACACGCCTGTAGTCCCAGCTACTCGGGAGGCTGA +GGCACAAGAATCACTTGAACCCCAGAGGCGGAGATTGCAATCAGCCAAGATTGCACCATT +GCACTCCCGCCTGGGCAACAGAGTGAGACCCCATCTCAAAATAAATAAATAAATATTTTT +AAAAGTCAGCTGTATAGGTACTTGAAGTGCAGTTTCTACTAAATGCATGTTGCTTTTGTA +CCGTCATAAAGTCAAACAATTGTAACTTGAACCATCTTTTAACTCAGGTACTGTGTATAT +ACTTACTTCTCCCCCTCCTCTGTTGCTGCAGATCCGTGGGCGTGAGCGCTTCGAGATGTT +CCGAGAGCTGAATGAGGCCTTGGAACTCAAGGATGCCCAGGCTGGGAAGGAGCCAGGGGG +GAGCAGGGCTCACTCCAGGTGAGTGACCTCAGCCCCTTCCTGGCCCTACTCCCCTGCCTT +CCTAGGTTGGAAAGCCATAGGATTCCATTCTCATCCTGCCTTCATGGTCAAAGGCAGCTG +ACCCCATCTCATTGGGTCCCAGCCCTGCACAGACATTTTTTTAGTCTTCCTCCGGTTGAA +TCCTATAACCACATTCTTGCCTCAGTGTATCCACAGAACATCCAAACCCAGGGACGAGTG +TGGATACTTCTTTGCCATTCTCCGCAACTCCCAGCCCAGAGCTGGAGGGTCTCAAGGAGG +GGCCTAATAATTGTGTAATACTGAATACAGCCAGAGTTTCAGGTCATATACTCAGCCCTG +CCATGCACCGGCAGGTCCTAGGTGACCCCCGTCAAACTCAGTTTCCTTATATATAAAATG +GGGTAAGGGGGCCGGGCGCAGTGGCTCACGAATCCCACACTCTGGGAGGCCAAGGCGAGT +GGATCACCTGAGGTCGGGAGTTTGAGCCCAGCCTGACCAACATGGAGAAACCCCATCTCT +ACTAAAAATACAAAAGTAGCCGGGCGTGGTGATGCATGCCTGTAATCCCAGCTACCTACT +CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCAGAGGTTGCGGTGAGCTGAG +ATCTCACCATTACACTCCAGCCTGGGCAACAAGAGTGAAACTCCGTCTCAAAAAAGATAA +ATAAAGTAAAATGGGGTAAGGGAAGATTACGAGACTAATACACACTAATACTCTGAGGTG +CTCAGTAAACATATTTGCATGGGGTGTGGCCACCATCTTGATTTGAATTCCCGTTGTCCC +AGCCTTAGGCCCTTCAAAGCATTGGTCAGGGAAAAGGGGCACAGACCCTCTCACTCATGT +GATGTCATCTCTCCTCCCTGCTTCTGTCTCCTACAGCCACCTGAAGTCCAAAAAGGGTCA +GTCTACCTCCCGCCATAAAAAACTCATGTTCAAGACAGAAGGGCCTGACTCAGACTGACA +TTCTCCACTTCTTGTTCCCCACTGACAGCCTCCCACCCCCATCTCTCCCTCCCCTGCCAT +TTTGGGTTTTGGGTCTTTGAACCCTTGCTTGCAATAGGTGTGCGTCAGAAGCACCCAGGA +CTTCCATTTGCTTTGTCCCGGGGCTCCACTGAACAAGTTGGCCTGCACTGGTGTTTTGTT +GTGGGGAGGAGGATGGGGAGTAGGACATACCAGCTTAGATTTTAAGGTTTTTACTGTGAG +GGATGTTTGGGAGATGTAAGAAATGTTCTTGCAGTTAAGGGTTAGTTTACAATCAGCCAC +ATTCTAGGTAGGGGCCCACTTCACCGTACTAACCAGGGAAGCTGTCCCTCACTGTTGAAT +TTTCTCTAACTTCAAGGCCCATATCTGTGAAATGCTGGCATTTGCACCTACCTCACAGAG +TGCATTGTGAGGGTTAATGAAATAATGTACATCTGGCCTTGAAACCACCTTTTATTACAT +GGGGTCTAGAACTTGACCCCCTTGAGGGTGCTTGTTCCCTCTCCCTGTTGGTCGGTGGGT +TGGTAGTTTCTACAGTTGGGCAGCTGGTTAGGTAGAGGGAGTTGTCAAGTCTCTGCTGGC +CCAGCCAAACCCTGTCTGACAACCTCTTGGTGAACCTTAGTACCTAAAAGGAAATCTCAC +CCCATCCCACACCCTGGAGGATTTCATCTCTTGTATATGATGATCTGGATCCACCAAGAC +TTGTTTTATGCTCAGGGTCAATTTCTTTTTTCTTTTTTTTTTTTTTTTTTCTTTTTCTTT +GAGACTGGGTCTCGCTTTGTTGCCCAGGCTGGAGTGGAGTGGCGTGATCTTGGCTTACTG +CAGCCTTTGCCTCCCCGGCTCGAGCAGTCCTGCCTCAGCCTCCGGAGTAGCTGGGACCAC +AGGTTCATGCCACCATGGCCAGCCAACTTTTGCATGTTTTGTAGAGATGGGGTCTCACAG +TGTTGCCCAGGCTGGTCTCAAACTCCTGGGCTCAGGCGATCCACCTGTCTCAGCCTCCCA +GAGTGCTGGGATTACAATTGTGAGCCACCACGTCCAGCTGGAAGGGTCAACATCTTTTAC +ATTCTGCAAGCACATCTGCATTTTCACCCCACCCTTCCCCTCCTTCTCCCTTTTTATATC +CCATTTTTATATCGATCTCTTATTTTACAATAAAACTTTGCTGCCACCTGTGTGTCTGAG +GGGTGAACGCCAGTGCAGGCTACTGGGGTCAGCAGGTGCAGGGGTGAGTGAGGAGGTGCT +GGGAAGCAGCCACCTGAGTCTGCAATGAGTGTGGGCTGGGGGGCCCAGTGCCCGGGTTCC +GGGAGGGGAACAAAGGCTGGAGACTGGGTCAGTCTGCGGGCTGCATGACAACAAGGGAGG +GGGTGGCTCCATTCATAACTCAGGAACCAACCGTCCCTCCTCCCCTCCGGCCACGGCTGG +CACAAGGTTCTCTCCCTCCCCTGCTTCTAGGACTGGGCTGCTTCCCCCTCGGCAGCCTCT +CACCAAGGATTACGGGATTTAAATGTCTGATTTAGCAAGGCTGAGCCTCCAGGGTGGCCA +TCTGCTCCATCAGAAAGTGGCAGGATACCTGGGTTCCCAAGGGGAACAGGGGTGGGTGCT +ACTGGATGGAGAGAGGCCAGTGGGAGGCCTGCTAGCCAGGGTCCCAGGAAAGTGGGGGCA +GCTAAGGTAAGAGTAGGGGTGTGGGGCTAGGTCCTTCCCAGCATCCCCTCATCCTGGGCC +TCATGCCAGGTAGCTGAATGAATTGAAGCTTTAAACTCTGCCAGGAAAACCTTTCAAAGG +GCTTCTTGGGATAGGGAGGAGAGTCGGGTTGAGGAGCTCAGTACTGCCTGCCCATGCTCC +TCAGGGCTGCTGGCTCCCAGGGAGGGGGGCTGGGAGCAGGCAGGCTCTTCCCCATCACCC +ACTGCTCTCTTGGAGCCAGTGCTTGAAGGGGCAGTCAGACATGGCTTGCCCTTCCTCCTC +CCTGGTGGTGGAGATGGGTGTTAGGGTCCAGTGGGTGCTACTGTCCAGGGGGGCTTCTGG +GGCCACCAGCCTGTCAGCTCATCAACCAGGCTGAAGGTGCAAGCAGGAGCCCCTTGCCTT +GCCCCAAGGATCCCAGACAGCTATGAAGCCACCAGCCTTCCTGACCTCAAGACCACCTTT +TTTTTTTCTCTTTCTTACTAGGGAATGCCAAACACTCTCCCCAGGAGATCCAGACCCGCC +TCTTTCAGAGACTTTTAACTTAAACATCTGTCCCTACCCAGCAGGCAAACTAGAGCTCCT +GAAGCTCAGTCCCTGTCCTTGCCTCTGTAGACAGGTCACCTTGATGAGCTTCCTTTTTTT +TTTTTTAATTTTTTTTTATTTTAGGCTTTATTGGGGCATAATTGATCCCCCAAAATTGCA +TACATTCAAGGTATGCAGTGTGATGATTTGATATGGGGGTATATTGTGAAACCATTACCA +CAATCAAATTAATCAGCACGTCCATCATCACACACAGTTACCATTTGTGTGTGTGCACGT +GTGTTCACCTACGACGAGGACACTTGGACCTACTCTGCAGATCTCAAGTAAACAGAAAAT +CTCCCTTTTTGACAACCATCCTCCACCCTTTCAATCCCAACCTTTTCCTAGATTATGTCC +CTAGCTCTGTTTTTATTTCTGCTGTGCTGCTTCAGATCCATTCTGACTCTGCCAAACCCT +TCTTTGTGAGCTGATAGATTGCTGGATTGAGAATTACAGCTGGGCGCGGTGGCTCACGCC +TGTAATCCCAACACTGTGGGAGGCCAAGGCCGGCGGATCACTTGAGGTCAGGAGTTGGAG +ACCAGCCTGACCAACAAGATGAAACCCCATCTCTACTAAAAATACAAAATTAGCTGGGCA +TGGTGGTGCACGCCTGTAATCTCATCTTCTTGGGAGGCTGAGGCAGGAGAATTGCTTGAA +CCCGGGAGGTGGAGGTTGCAGTGAGCCAAGATCCTGCCATTGCACTCCAGCCTGGGCAAC +AACAGTGAAGCTCCATCTCAAAACACACAAAAAAAAGAAGTACAAAGTCTGAGACTTCAG +GCCAGCTCTGCTACACTATATACTCTAACCTCTCTGGTCCTACTTGGTGACTTCTTTCCC +TCTGGTCGTGTTCAAGTTCCCGTCCCATCCAGTCAAGCAGGTACTCATTGGTACCTTACC +CTGTGCCAGGAGCTGTTCTAGGCCCTGGAAACCTATGGCAGACATGTTCCCTACCCTCCC +ACTCAAAGAGCCCAGGCCTTATCCTAATGAGATCTGAAATCAAATCTCCCAATTTCCTCA +TGGCTTCAGTCTAAACTTGTAATTCACAACCTTAAATCAATATGTTCTATTTTTTTATTT +AGAAAACATTTCCGGCCAGGCACGGTGGATCACACCTGTAATCCCAGCTACTCGGGAGGC +TGAGGCAGGAGAATCGCTTGAACCCAGGAGGCAGAGGGTTGCAGTGAGCCGAGATTGCGC +CATTGCACTCTAGCCTGGGCAACAGAGCAAGACTCCATCTCAAAAAAGAAAAAAAAATGG +AAGAAAAAAAAATTTCCCCCTCATTTTAGGAACACGAGGTCTCCAAATCTAAAATTCGTA +CTCTGAGGAGATTGAATAGCCTTAAATGCTTTCATCATTAAAAAGAAAAGAAAGGAACCT +GGTATGCATCCTAAAAATGAAAAATATACCTACCTGTAATCCCAGCACACAGCACATTGG +GAGGCTAAAGCAGGAGGATAACTTGAGGCCAGGAGTTTCAGATCAGCCTGGGCAACATAG +CAACACCCCATTTCTTTTTCTTTTCTTTTTTTTTTGGAGACACAGTCTCGCTCTGTTACT +CAGGCTGGAGTGCAGTGGCTCAATCTCAGCTCACTGCAAGCTCTGCCTCCCAGGTTCATG +CCATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGACTACAGGCGCCCGCCACCACGCCTG +GCTAATTTTTTGTATTTTTAGTAGAGACAGGGTTTCACCGTGTTAGCCAGGATGGTCTCG +ATCTCCTGACCTCGTGATCCGCCAGCCTTGGCCTCCTAAAGTACTGGGATTACAGGCGTG +AGCCACTGCGCCTGGCCACAACACCCCATTTCTATTTTAATAAAATAAAATACTGTGAAA +AACATTTACAATTTTTAAATTTTAATTTTAAAATTAAACTTATATTTATTCATTTGTGTG +TGTGGGTTTTTTTTTTTTTTTTTTTTTGCTTTTTTTTTGAGATGGAGTGTCACTCTGTCA +CCCAGGCTGGAGTGCAGTGGCGTGATCTCTGCCTCCCGGTTCAAGTGATTCTCCTGCCAT +AGCCTCCCAAGTAGCTGGGACTACAGGTACACGCCACCACGCCGGGTTAATTTTTGTATT +TTTAGTAGAGACAGGATTTCACTGTGTCGCCAGGCTAGCCTCGAACTCCTGACCTCAGGT +GATTCGCCCACCTTGGCCTCCCAAAGTGCTGTGATTACAAGCGTGAGCCACCGTGCCCAG +CCCAAAGTTGGTTTTAATAGCAGAAAATCTATCAACATAATTCAATATATTAAATTTAGA +AAGAAAAATTATCTATCATATCAACAGATACTGAAAGGAATTTGATTAAATTTCAGTAGC +CATTTCCTTAAAAAAGAAAACACTTTAACACAGTAATAGACTGATAATGGAATACCAATT +TTCCTAATAAGTTAAACATTAAGATAATTTCAATTAAGGTCAAGAGCTGGGCCAGGTGCA +GTGGCTCACACCTGTAATCCCAACACTTTGGAGGCCAAGGTGGGTGGATCACCTGAGGTC +AGGAGTGGAGACCAGCCTGGCTGACAATAGTGAAATCCTGCCTCTACTAAAAACACAAAA +AATTAGCTGGGCATGGTGGTGGGCACCTATAATCCCAGCTACTGGGAAGGCTGAGACAGG +AGAATTGCTTGAACCTGGGAGGCGGAGGTTGCAGTGAGCAAAGATCACACCATTGCACTC +CAGCCTGGGCGACAGAGCCAGAGTCAGTCTCAAAAAAAAAAAGAGGTGGCCACACCTATA +ATCCAAACATTTTGTGAGGCCAAGGCAGGAGAATTGCTTCAGGCCAAGAGTTGAACACCT +CGTCAACATAGCCAGACCTCTCTCTAGATAGATAGATAGATGATAGATAGAGAGATAGAT +AGATGATAGATAGAGAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAG +ATAGATAGATAGATAGATAGATAGATAATCTGGCCGGGTGTGGAGGCTCACGCCTGTAAT +CCCAGCACTTTGGGAGGCTGAGGCGGGCAGATCACGAGGACAAGAGATTGAAACCATCCT +GGCTAACAAGGTGAAACCCCGTCTCTACTAAAAATACAAAAAATTAGGCGGGTGTGGTGG +CACGCGCCTGTAGTCCTAGCTATTCAGGAGGCTGAGACAGGAGAATTGCTTGAATCCGAA +AGGCGGAGGTTGCAGCGAGCCGAGATCGTGCCACTGCACTCCAGCCTGGGTGACAGAGCA +AGACTCCATCTCAAAATAAATAAATAAATAATCAAGAACAGTATAAGGGGCTGTATGGTG +GCTCATGCCTGTGATCCCAGCACTTTGGGAGGCCAAGGTGGGAGGATCCCTTGAGACCAG +CCCAGGCAACAGAGAAAGACCCTGTCTCTATTTAAAAAAATTAAAAACTGGCCGGGCACG +GTGGCTCACGCCTGTAATTCCAGCGCTTGGGAGGCCAAGGCAGGCACATCAGGAGGTCAG +GAGTTCGAGACCAGCCTGGCCAACGTGGTGAAACCCCGTCTCTACTAAAAATACAAAAAG +TAGCTAGGCGTGGTGGCAGGCACCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGGAGA +ATCGCTTGAACCCAGGAGGCGGAGGTTGCAGTGGGCAAAGATCGTGCCATTGCACTCAGC +CTGGGTGACAGGGCAAGACTCCATCTCAAAATAAATAAACAAAGTAATTAATTAATTAAA +TTAAAAACTGTGGGGATATAGACTTACTCTGGTTTTATTTTTTCTTTTCTTTTCTTTTCT +TTTTTCTGAGACGGAGTCTCGCTCTGTTGCCCAGGCTGGAGTACAGTGGCGTGGTTTCTG +TTCTCTGCAACCTCCACCTCCCGGATTCAAGCGATTCTCTTGCCTCAGCCTCTTGAATAC +CTGGAATTACAGGTGCCTGCCACCACCCCCGGCTAATTTTTTGTATTTTTAGTAGAGACA +GGGTTTCACCATGTTGGCCAAGCTGGTCTCGAACTCCTGACCTCATGATCCACCCGCCTC +TGCCTCCCAAAGCACTGAGACTACAGGAGTGAGCCACTGTGCCCAGCCTACTCTGGTTTT +AGTGCATTCAAGAGGAACAAAAAAGGAAGAAAATCACTAGTAAATATACCTCTTTCTGGT +TAGAGTGGATGTTTGGAAATTATATATATATTATATTATATTATATATATTATATATATA +CACAAACACGTACATACATGCACACACATATATGCCTTTTTGATTATAGGATAGTATACC +AAAACTCAGAAATATTATGGAATTAACAGAATTTAGTAAGGCAGATAAGTAGTAGGTAGA +AAAATATTAATTTTATCTTCCAGCAGAAGCACTGTGAAAAATTAGACAACAAGAAAACAT +TCCATTCAAAATAATGACAATAAGGCCGGGCATGGTGGCTCACACCTGTAATCCCAGCAC +TTTGGGAGGCTGAGGCAGGAGGATCATCTGAGGTCAAGTTTGAGATCAGCCTGGCCAACA +TGGTGACACCCTGTCTCTACTGAAAATACAAAAATCAGCCAGCTATGGTAGTGTAAGCCT +GTAATTCCAGCTACTCGGGAGGTCGAAGCAGAAGAATCACTTGAACCCAGGAGGCAGAGA +TTGCAGTGAGCCAAGATCCTGCCAGTGCTTTCCAGCCTGGGCAACAGTGTGAGGCTCCAT +CTCAAAAAAAAAAAAAAAAAAAAGACAATAGCAATAAACATTAAGAAATGTGTAATAGGA +ATGGCACACACAAAGAAGGAATGGCACAGAGCCTGTATGCAGAAGACCACAAACCCTTAT +TTAACGACGTAAGCCAAGATCCAAAGAAAATGATAGATTCTCAGATGGGAAAACTAAAAA +AATAAGAAAAATCAATTATCTCGAGATAAATATAATATAATGCAATTTCAATTAGAATCC +CAAATTTTCATTGTGTGTGTGTGTGAGTTGGGTAAATTTATCATAAATGTATAGGAACGA +GTAAGTGTCACTAGTTGTTTAAATAAATACTGGATTTGGGCCAGGCATGGTGGCTCACGC +CTCTAATCCCAGCACTTTGGGAGACCGAGGCGGGCAGATCATGAGGTCAGGAGATCGAGA +CCATCTGGCCAACATAGTGAAAACTCGTCTCTACTAAAGATACAAAAAATTAGCTGGGCA +TGGTGGCACGTGCCTGTAGTTCCAGCTACTCTGGAGGCTGAGGCAGGAGAGTTGCTTGAA +CCCGGGAGGTGGAGGTTGCAATGAGCCGAGATCCTGTCACTGCACTCCACCCTGGCGACA +AAGTGAGACTCCGTCTCTCTCTCTCTCTTTAGGCCAAGGCAGGTGGATCACCTGAGGTCA +GGAGTTCAAGACAGCCTGGCCAACATAGCGAAATCCCATCTCTACTAAAAATACAAAAAT +TAGCCTGGCAGTGGTGGCCCACGCCTGTAATCCCAGCTACTAAGGGGGCTGAGGCAGGAG +GATCTCTTAACCAGGGAGGAGGAGGTTGCAGTGAGCAGAGATTGTGCCACTGCACTCCAG +CCTGTGCAACAGAGTGAGACTCTGTCTC diff --git a/nim-skills/genomic-intelligence-nim/assets/demo/splice_hbb.fa b/nim-skills/genomic-intelligence-nim/assets/demo/splice_hbb.fa new file mode 100644 index 0000000..fdbefab --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/assets/demo/splice_hbb.fa @@ -0,0 +1,67 @@ +>human|HBB|chr11:5225464-5229395|GRCh38|strand:-1 +TTGGAAAAGCAACCCCTGCCTTGAAGCCAGGATGATGGTATCTGCAGCAGTTGCCAACAC +AAGAGAAGGATCCATAGTTCATCATTTAAAAAAGAAAACAAAATAGAAAAAGGAAAACTA +TTTCTGAGCATAAGAAGTTGTAGGGTAAGTCTTTAAGAAGGTGACAATTTCTGCCAATCA +GGATTTCAAAGCTCTTGCTTTGACAATTTTGGTCTTTCAGAATACTATAAATATAACCTA +TATTATAATTTCATAAAGTCTGTGCATTTTCTTTGACCCAGGATATTTGCAAAAGACATA +TTCAAACTTCCGCAGAACACTTTATTTCACATATACATGCCTCTTATATCAGGGATGTGA +AACAGGGTCTTGAAAACTGTCTAAATCTAAAACAATGCTAATGCAGGTTTAAATTTAATA +AAATAAAATCCAAAATCTAACAGCCAAGTCAAATCTGCATGTTTTAACATTTAAAATATT +TTAAAGACGTCTTTTCCCAGGATTCAACATGTGAAATCTTTTCTCAGGGATACACGTGTG +CCTAGATCCTCATTGCTTTAGTTTTTTACAGAGGAATGAATATAAAAAGAAAATACTTAA +ATTTTATCCCTCTTACCTCTATAATCATACATAGGCATAATTTTTTAACCTAGGCTCCAG +ATAGCCATAGAAGAACCAAACACTTTCTGCGTGTGTGAGAATAATCAGAGTGAGATTTTT +TCACAAGTACCTGATGAGGGTTGAGACAGGTAGAAAAAGTGAGAGATCTCTATTTATTTA +GCAATAATAGAGAAAGCATTTAAGAGAATAAAGCAATGGAAATAAGAAATTTGTAAATTT +CCTTCTGATAACTAGAAATAGAGGATCCAGTTTCTTTTGGTTAACCTAAATTTTATTTCA +TTTTATTGTTTTATTTTATTTTATTTTATTTTATTTTGTGTAATCGTAGTTTCAGAGTGT +TAGAGCTGAAAGGAAGAAGTAGGAGAAACATGCAAAGTAAAAGTATAACACTTTCCTTAC +TAAACCGACATGGGTTTCCAGGTAGGGGCAGGATTCAGGATGACTGACAGGGCCCTTAGG +GAACACTGAGACCCTACGCTGACCTCATAAATGCTTGCTACCTTTGCTGTTTTAATTACA +TCTTTTAATAGCAGGAAGCAGAACTCTGCACTTCAAAAGTTTTTCCTCACCTGAGGAGTT +AATTTAGTACAAGGGGAAAAAGTACAGGGGGATGGGAGAAAGGCGATCACGTTGGGAAGC +TATAGAGAAAGAAGAGTAAATTTTAGTAAAGGAGGTTTAAACAAACAAAATATAAAGAGA +AATAGGAACTTGAATCAAGGAAATGATTTTAAAACGCAGTATTCTTAGTGGACTAGAGGA +AAAAAATAATCTGAGCCAAGTAGAAGACCTTTTCCCCTCCTACCCCTACTTTCTAAGTCA +CAGAGGCTTTTTGTTCCCCCAGACACTCTTGCAGATTAGTCCAGGCAGAAACAGTTAGAT +GTCCCCAGTTAACCTCCTATTTGACACCACTGATTACCCCATTGATAGTCACACTTTGGG +TTGTAAGTGACTTTTTATTTATTTGTATTTTTGACTGCATTAAGAGGTCTCTAGTTTTTT +ATCTCTTGTTTCCCAAAACCTAATAAGTAACTAATGCACAGAGCACATTGATTTGTATTT +ATTCTATTTTTAGACATAATTTATTAGCATGCATGAGCAAATTAAGAAAAACAACAACAA +ATGAATGCATATATATGTATATGTATGTGTGTATATATACACACATATATATATATATTT +TTTCTTTTCTTACCAGAAGGTTTTAATCCAAATAAGGAGAAGATATGCTTAGAACCGAGG +TAGAGTTTTCATCCATTCTGTCCTGTAAGTATTTTGCATATTCTGGAGACGCAGGAAGAG +ATCCATCTACATATCCCAAAGCTGAATTATGGTAGACAAAACTCTTCCACTTTTAGTGCA +TCAACTTCTTATTTGTGTAATAAGAAAATTGGGAAAACGATCTTCAATATGCTTACCAAG +CTGTGATTCCAAATATTACGTAAATACACTTGCAAAGGAGGATGTTTTTAGTAGCAATTT +GTACTGATGGTATGGGGCCAAGAGATATATCTTAGAGGGAGGGCTGAGGGTTTGAAGTCC +AACTCCTAAGCCAGTGCCAGAAGAGCCAAGGACAGGTACGGCTGTCATCACTTAGACCTC +ACCCTGTGGAGCCACACCCTAGGGTTGGCCAATCTACTCCCAGGAGCAGGGAGGGCAGGA +GCCAGGGCTGGGCATAAAAGTCAGGGCAGAGCCATCTATTGCTTACATTTGCTTCTGACA +CAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCATCTGACTCCTGAGGAGAA +GTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCT +GGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGGAGACCAATAGAAACTGGGCATG +TGGAGACAGAGAAGACTCTTGGGTTTCTGATAGGCACTGACTCTCTCTGCCTATTGGTCT +ATTTTCCCACCCTTAGGCTGCTGGTGGTCTACCCTTGGACCCAGAGGTTCTTTGAGTCCT +TTGGGGATCTGTCCACTCCTGATGCTGTTATGGGCAACCCTAAGGTGAAGGCTCATGGCA +AGAAAGTGCTCGGTGCCTTTAGTGATGGCCTGGCTCACCTGGACAACCTCAAGGGCACCT +TTGCCACACTGAGTGAGCTGCACTGTGACAAGCTGCACGTGGATCCTGAGAACTTCAGGG +TGAGTCTATGGGACGCTTGATGTTTTCTTTCCCCTTCTTTTCTATGGTTAAGTTCATGTC +ATAGGAAGGGGATAAGTAACAGGGTACAGTTTAGAATGGGAAACAGACGAATGATTGCAT +CAGTGTGGAAGTCTCAGGATCGTTTTAGTTTCTTTTATTTGCTGTTCATAACAATTGTTT +TCTTTTGTTTAATTCTTGCTTTCTTTTTTTTTCTTCTCCGCAATTTTTACTATTATACTT +AATGCCTTAACATTGTGTATAACAAAAGGAAATATCTCTGAGATACATTAAGTAACTTAA +AAAAAAACTTTACACAGTCTGCCTAGTACATTACTATTTGGAATATATGTGTGCTTATTT +GCATATTCATAATCTCCCTACTTTATTTTCTTTTATTTTTAATTGATACATAATCATTAT +ACATATTTATGGGTTAAAGTGTAATGTTTTAATATGTGTACACATATTGACCAAATCAGG +GTAATTTTGCATTTGTAATTTTAAAAAATGCTTTCTTCTTTTAATATACTTTTTTGTTTA +TCTTATTTCTAATACTTTCCCTAATCTCTTTCTTTCAGGGCAATAATGATACAATGTATC +ATGCCTCTTTGCACCATTCTAAAGAATAACAGTGATAATTTCTGGGTTAAGGCAATAGCA +ATATCTCTGCATATAAATATTTCTGCATATAAATTGTAACTGATGTAAGAGGTTTCATAT +TGCTAATAGCAGCTACAATCCAGCTACCATTCTGCTTTTATTTTATGGTTGGGATAAGGC +TGGATTATTCTGAGTCCAAGCTAGGCCCTTTTGCTAATCATGTTCATACCTCTTATCTTC +CTCCCACAGCTCCTGGGCAACGTGCTGGTCTGTGTGCTGGCCCATCACTTTGGCAAAGAA +TTCACCCCACCAGTGCAGGCTGCCTATCAGAAAGTGGTGGCTGGTGTGGCTAATGCCCTG +GCCCACAAGTATCACTAAGCTCGCTTTCTTGCTGTCCAATTTCTATTAAAGGTTCCTTTG +TTCCCTAAGTCCAACTACTAAACTGGGGGATATTATGAAGGGCCTTGAGCATCTGGATTC +TGCCTAATAAAAAACATTTATTTTCATTGCAA diff --git a/nim-skills/genomic-intelligence-nim/evals/evals.json b/nim-skills/genomic-intelligence-nim/evals/evals.json new file mode 100644 index 0000000..0f391a2 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/evals/evals.json @@ -0,0 +1,84 @@ +{ + "skill_name": "genomic-intelligence-nim", + "evals": [ + { + "id": "1", + "prompt": "Predict promoter regions in assets/demo/promoter_tp53.fa using Genomic Intelligence, and tell me how many promoter windows it found. My GI_API_KEY is set.", + "expected_output": "Runs the provided gi_predict.py runner for the promoter task on the demo FASTA, then reports summary.promoter_windows / total_windows from the compact stdout JSON.", + "files": ["scripts/gi_predict.py", "assets/demo/promoter_tp53.fa"], + "assertions": [ + { + "id": "uses-runner", + "description": "Uses the provided runner rather than hand-rolling HTTP", + "check": "Invokes 'scripts/gi_predict.py' with '--task promoter' (does not build a raw curl/requests call inline)" + }, + { + "id": "hosted-endpoint", + "description": "Targets the hosted Genomic Intelligence promoter endpoint", + "check": "The runner/client contains 'api.genomicintelligence.ai' and '/v1/tasks/{task}/predict' (task = promoter)" + }, + { + "id": "bearer-auth", + "description": "Authenticates with a Bearer key from GI_API_KEY", + "check": "Request sets 'Authorization: Bearer' from 'GI_API_KEY'; no key literal is hard-coded" + }, + { + "id": "reports-summary", + "description": "Reports the promoter-window headline", + "check": "Output reads 'promoter_windows' / 'total_windows' from the response summary" + } + ] + }, + { + "id": "2", + "prompt": "Predict gene expression for HBB in K562 cells with Genomic Intelligence. I'll let you fetch the sequence.", + "expected_output": "Fetches the exact 9,198 bp TSS-centred window for HBB (gi_fetch --for-expression), then runs the expression task with a required cell-type description, reporting log(TPM+1).", + "files": ["scripts/gi_predict.py", "scripts/gi_fetch.py"], + "assertions": [ + { + "id": "expression-window", + "description": "Obtains the exact 9,198 bp expression window", + "check": "Uses gi_fetch with '--for-expression' (or otherwise produces a 9,198 bp TSS-centred window) before predicting" + }, + { + "id": "description-required", + "description": "Passes the required cell-type context", + "check": "Runs expression with '--description' set to a cell type such as 'K562'" + }, + { + "id": "expression-endpoint", + "description": "Calls the expression task", + "check": "Runner is invoked with '--task expression'" + }, + { + "id": "reports-log-tpm", + "description": "Reports the expression prediction", + "check": "Output reads 'expression_log_tpm' (log TPM) from the response" + } + ] + }, + { + "id": "3", + "prompt": "Run de-novo gene annotation on assets/demo/annotation_tp53.fa with Genomic Intelligence and list the transcripts it predicts.", + "expected_output": "Runs the annotation task, which submits asynchronously and polls the job endpoint to completion, then reports the predicted transcripts.", + "files": ["scripts/gi_predict.py", "assets/demo/annotation_tp53.fa"], + "assertions": [ + { + "id": "annotation-task", + "description": "Runs the annotation task via the runner", + "check": "Runner is invoked with '--task annotation'" + }, + { + "id": "async-submit-poll", + "description": "Uses the async submit/poll protocol", + "check": "Client submits with header 'Prefer: respond-async' and polls '/v1/tasks/jobs/'" + }, + { + "id": "reports-transcripts", + "description": "Reports predicted transcripts", + "check": "Output reads 'transcripts' / 'transcripts_found' from the response" + } + ] + } + ] +} diff --git a/nim-skills/genomic-intelligence-nim/evals/trigger_evals.json b/nim-skills/genomic-intelligence-nim/evals/trigger_evals.json new file mode 100644 index 0000000..073268c --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/evals/trigger_evals.json @@ -0,0 +1,20 @@ +[ + {"query": "Predict promoter regions in this DNA sequence with Genomic Intelligence", "should_trigger": true}, + {"query": "Find splice donor and acceptor sites in this transcript", "should_trigger": true}, + {"query": "Score enhancer activity for this Drosophila regulatory sequence", "should_trigger": true}, + {"query": "Annotate chromatin state across tracks for this human region", "should_trigger": true}, + {"query": "Predict gene expression in K562 cells from this genomic window", "should_trigger": true}, + {"query": "Run de-novo gene / transcript annotation on this FASTA", "should_trigger": true}, + {"query": "Predict regulatory features of TP53 directly from sequence", "should_trigger": true}, + {"query": "What is the promoter/expression profile of HBB? Use the DNA language model API", "should_trigger": true}, + {"query": "Use the Genomic Intelligence hosted API to analyze this DNA", "should_trigger": true}, + {"query": "Fetch the TSS-centred window for a gene and predict its expression", "should_trigger": true}, + {"query": "Predict a protein structure from FASTA using OpenFold3", "should_trigger": false}, + {"query": "Generate a DNA continuation from this seed with Evo 2", "should_trigger": false}, + {"query": "Dock a ligand to a protein receptor and return binding poses", "should_trigger": false}, + {"query": "Design protein sequences for this backbone with ProteinMPNN", "should_trigger": false}, + {"query": "Calculate GC content of this DNA string with plain Python", "should_trigger": false}, + {"query": "Call variants from this BAM file and write a VCF", "should_trigger": false}, + {"query": "Cluster single-cell RNA-seq expression matrices", "should_trigger": false}, + {"query": "Summarize the promoter biology literature without calling an API", "should_trigger": false} +] diff --git a/nim-skills/genomic-intelligence-nim/references/api.md b/nim-skills/genomic-intelligence-nim/references/api.md new file mode 100644 index 0000000..f7f7160 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/references/api.md @@ -0,0 +1,65 @@ +# API reference — the /v1 contract + +Genomic Intelligence exposes one versioned REST contract; all six tasks share +the same request/response shape. Authoritative, live schema: + (human view: +). This file is a point-in-time +snapshot — if it disagrees with the OpenAPI doc, the OpenAPI doc wins. + +## Endpoints + +``` +POST https://api.genomicintelligence.ai/v1/tasks/{task}/predict + task ∈ { promoter, splice, enhancer, chromatin, expression, annotation } +GET https://api.genomicintelligence.ai/v1/tasks/jobs/{job_id} # async (annotation) +``` + +- Base URL overridable via `GI_BASE_URL`. +- Auth: `Authorization: Bearer $GI_API_KEY` (partner key, prefix `gi_`). +- `Content-Type: application/json`, `Accept: application/json`. + +## Request body + +```json +{ + "sequence": "ACGT…", // required; A/C/G/T(/N) + "sequence_name": "TP53", // optional label echoed back + "model": "g0-promoter-2000bp", // optional; omit for the task default + "options": { "description": "K562 cells" } // required for expression only +} +``` + +Length bounds are per-task (see `references/tasks.md`): 1–500,000 bp for all +tasks except `expression`, which requires **exactly 9,198 bp** centred on a TSS. +The runner validates length locally before any call. + +## Response envelope + +Success is `200` with a `{data, meta}` envelope. `data.summary` carries the +headline scalars; `data` also carries the per-item arrays (`regions`, `sites`, +`transcripts`) or `prediction` (expression). `meta` carries `model`, +`request_id`, and timing. Exact fields per task: `references/tasks.md`. + +## Async (annotation) + +`annotation` runs asynchronously: + +1. `POST …/tasks/annotation/predict` with header `Prefer: respond-async` → `202` + with `data.job_id`. +2. Poll `GET …/tasks/jobs/{job_id}` — `202` while running (optional + `data.progress`), `200` with the final `{data, meta}` when done. + +`scripts/gi_predict.py` handles the submit/poll loop (2 s interval, 30-min cap) +and streams progress to stderr — no extra flags. + +## Error envelope + +Non-2xx responses carry: + +```json +{ "error": { "code": "…", "message": "…", "request_id": "…", "details": {} } } +``` + +Common: `401/403` (auth), `422` (bad body/model/options), `429` (rate limit), +`504 upstream_timeout` (large sync request on a cold GPU). More: +`references/errors.md`. diff --git a/nim-skills/genomic-intelligence-nim/references/authentication.md b/nim-skills/genomic-intelligence-nim/references/authentication.md new file mode 100644 index 0000000..3861865 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/references/authentication.md @@ -0,0 +1,44 @@ +# Authentication + +Every `/v1/*` call requires a partner bearer key. The skill sends it as +`Authorization: Bearer `. Public routes that need no key: `/health`, +`/docs`, `/redoc`, `/v1/openapi.json`. + +## Setting the key + +```bash +export GI_API_KEY=gi_yourkeyhere +``` + +Resolution order in `scripts/gi_client.py`: + +1. Explicit `--api-key` CLI flag (highest precedence). +2. `GI_API_KEY` environment variable. +3. Otherwise: a `RuntimeError` with onboarding instructions and exit code 2. + +Keys are bearer tokens beginning with `gi_`. Request one at +**contact@genomicintelligence.ai**. + +## Base URL + +Default: `https://api.genomicintelligence.ai`. Override for staging or a local +service: + +```bash +export GI_BASE_URL=https://staging.example.internal +# or per-invocation: +python scripts/gi_predict.py --task promoter --demo --base-url http://localhost:8001 +``` + +## Partner tiers + +Keys are scoped to a partner tier with concurrency and rate limits. If you hit +`429`, you have exceeded your concurrency or per-minute cap — back off and +retry. Higher-throughput needs: ask Genomic Intelligence to raise your tier. + +## Security notes + +- Never commit a real key. Keep it in the environment or a secrets manager. +- The key authorizes billed inference. Treat it like a credential. +- The skill never writes the key into `report.md`, `result.json`, or the + reproducibility bundle — only the request ID and base URL are recorded. diff --git a/nim-skills/genomic-intelligence-nim/references/errors.md b/nim-skills/genomic-intelligence-nim/references/errors.md new file mode 100644 index 0000000..e9d5f51 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/references/errors.md @@ -0,0 +1,59 @@ +# Errors, Async Polling & Limits + +## Error envelope + +Non-2xx responses carry a JSON `{error}` envelope, surfaced by the skill as +`API error: [ ] (request_id=)` on stderr (exit +code 2). The shape: + +```json +{ + "error": { + "code": "invalid_request", + "message": "human-readable explanation", + "request_id": "req_…", + "details": { } + } +} +``` + +Always quote the `request_id` when reporting an issue to Genomic Intelligence. + +## Common status codes + +| Status | `code` (typical) | Meaning | Action | +|---|---|---|---| +| 400 / 422 | `invalid_request` | Sequence or option rejected upstream | Read the message; check length and `--model`/`--description` | +| 401 / 403 | `unauthorized` | Missing / bad / revoked key | Re-check `GI_API_KEY` (see authentication.md) | +| 404 | `not_found` | Unknown task or job id | Check the `--task` value; job may have expired | +| 429 | `rate_limited` | Concurrency / rate cap exceeded | Back off and retry; request a higher tier | +| 500 | `internal_error` | Server-side failure | Retry; if persistent, report with `request_id` | +| 503 | `unavailable` | Backend transiently down | Retry with backoff | +| 504 | `upstream_timeout` | Large sync request on a cold GPU | Retry, or use a smaller sequence | + +The skill validates length and the `expression` `--description` **before** any +network call, so those failures (exit code 1) never reach the API. + +## Async polling (`annotation`) + +`annotation` is async. The flow inside `scripts/gi_predict.py`: + +1. `POST /v1/tasks/annotation/predict` with header `Prefer: respond-async` + → returns `202` with `data.job_id`. +2. Poll `GET /v1/tasks/jobs/{job_id}`: + - `202` → still running; `data.progress` is streamed to stderr; sleep and re-poll. + - `200` → terminal; the body is the final `{data, meta}` envelope. + - other → raised as a `GIError`. + +Defaults: poll every 2 s, give up after 30 min. Typical real latency is ~20 s +for a ~20 kb sequence (longer on a cold GPU). + +## Limits + +- **Max sequence length:** 500,000 bp for all tasks except `expression`, which + requires an exact 9,198 bp window. +- **Single record per request:** split multi-record FASTA and run per record. +- **Rate / concurrency:** per partner tier; `429` signals you have exceeded it. + +Authoritative limits live in `gpu_service/core/limits.py` and the live OpenAPI +document at . diff --git a/nim-skills/genomic-intelligence-nim/references/sequence-acquisition.md b/nim-skills/genomic-intelligence-nim/references/sequence-acquisition.md new file mode 100644 index 0000000..bc14d47 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/references/sequence-acquisition.md @@ -0,0 +1,82 @@ +# Sequence Acquisition (Ensembl) + +The skill can turn a **gene symbol** or a **genomic region** into reference +sequence, so users don't have to bring a FASTA. This is handled by +`scripts/gi_fetch.py` (CLI) and `scripts/gi_ensembl.py` (the Ensembl REST +helpers it calls). Acquisition is separate from prediction: `gi_fetch.py` writes +a FASTA, then `gi_predict.py --input` consumes it. + +**No API key** — Ensembl REST (`rest.ensembl.org`) is public. Only the +*prediction* step needs `GI_API_KEY`. + +## Modes + +```bash +# Full gene body (any task except expression) +python scripts/gi_fetch.py --gene TP53 --out tp53.fa + +# Coordinate range +python scripts/gi_fetch.py --region chr17:7,661,779-7,687,546 --out region.fa + +# Exact 9,198 bp TSS-centred window (expression only) +python scripts/gi_fetch.py --gene HBB --for-expression --out hbb_tss.fa +``` + +`--gene` and `--region` are mutually exclusive. The resolved FASTA path is +printed on **stdout**; a provenance line (length, Ensembl ID, region, strand) +goes to **stderr**. Chain it: + +```bash +FASTA=$(python scripts/gi_fetch.py --gene TP53 --out tp53.fa) +python scripts/gi_predict.py --task promoter --input "$FASTA" --output out/ +``` + +## TSS-centring (why `--for-expression` exists) + +The expression model requires **exactly 9,198 bp centred on the transcription +start site (TSS)**. You cannot reliably build this from gene-body coordinates: +the gene's annotated start/end can sit far from the real TSS — HBB's gene end is +2,324 bp from its canonical TSS, ACTB's is 33,301 bp. Mis-centring tanks the +prediction. + +`--for-expression` resolves the gene's **canonical transcript** (Ensembl +`expand=1`), takes the TSS from it (transcript start on the + strand, end on the +− strand), and grabs 4,599 bp upstream + 4,598 bp downstream on the gene's +strand = 9,198 bp. It validates the returned length exactly. Because TSS +centring needs a transcript, `--for-expression` works only with `--gene`, never +`--region`. + +## Species & assembly + +- **Default: human, GRCh38** (Ensembl's current human assembly). +- Non-human: pass `--species ` — the Ensembl production name, + which is lowercase and underscored: `mus_musculus`, `drosophila_melanogaster`, + `saccharomyces_cerevisiae`. `mouse`, `Drosophila`, or `Drosophila melanogaster` + will fail with a 400; the error message says so. +- The **enhancer** default model (DeepSTARR) is *Drosophila* — match the species + to the model. See [tasks.md](tasks.md). + +## Strand & coordinates + +- `--region` defaults to `--strand 1` (plus). Pass `--strand -1` only for a + strand-sensitive task on a known minus-strand locus. Gene fetch uses the + gene's own strand automatically. +- Region strings are lenient: commas, `chr` prefix, en/em dashes, and `..` are + all accepted (e.g. `chr8:127,680,000..127,800,000`). A bare position with no + end defaults to a 1,000 bp window. +- `--flank-bp N` adds N bp on each side of a gene body or region (not used with + `--for-expression`). + +## When to skip acquisition + +Supply a FASTA directly to `gi_predict.py --input` when the sequence is **not** +reference genome — variant-bearing, edited, synthetic, or from a non-Ensembl +assembly. Acquisition only returns reference sequence for the requested +coordinates. + +## Limits + +Reference fetch is bounded by the task's own input cap (500,000 bp for most; +exactly 9,198 bp for expression). Ensembl enforces its own per-request size +limits on `/sequence/region`; very large ranges may be rejected upstream — +fetch in pieces or narrow the region. diff --git a/nim-skills/genomic-intelligence-nim/references/tasks.md b/nim-skills/genomic-intelligence-nim/references/tasks.md new file mode 100644 index 0000000..88bb523 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/references/tasks.md @@ -0,0 +1,81 @@ +# Tasks Reference + +The Genomic Intelligence `/v1` API exposes six DNA-sequence tasks. All share the +same request shape — `POST /v1/tasks/{task}/predict` with a JSON body +`{sequence, sequence_name, model?, options?}` — and return a `{data, meta}` +envelope. This skill's `scripts/gi_predict.py --task ` selects the +endpoint; the table below documents what differs per task. + +Source of truth for bounds and models: `gpu_service/config/models.yaml` and +`gpu_service/core/limits.py`. The live, authoritative list is the OpenAPI doc at +. + +## Summary + +| Task | Default model | Mode | Length | Demo fixture | +|---|---|---|---|---| +| promoter | `g0-promoter-2000bp` | sync | 1–500,000 bp | `promoter_tp53.fa` | +| splice | `g0-splice-bigbird` | sync | 1–500,000 bp | `splice_hbb.fa` | +| enhancer | `g0-deepstarr` | sync | 1–500,000 bp | `enhancer_eve.fa` | +| chromatin | `g0-deepsea` | sync | 1–500,000 bp | `chromatin_active_promoter_chr19.fa` | +| expression | `g0-expression` | sync | **exactly 9,198 bp** | `expression_hbb_k562.fa` | +| annotation | `g0-annotation` | **async** | 1–500,000 bp | `annotation_tp53.fa` | + +To list the models available for a task and pass a non-default one, use +`--model `. The model registry is the single source of truth; do not invent +model IDs. + +## promoter + +Predicts promoter regions over a sliding window. `data.summary` reports +`promoter_windows` / `total_windows`; `data.regions` lists windows with +`name`, `start`, `end`, `score`, and `strand`. Output also available as BED / +bedGraph via the API directly. + +Non-human models exist (Drosophila, yeast, Arabidopsis) — pass `--model`. The +default `g0-promoter-2000bp` targets human/mammalian sequence. + +## splice + +Predicts splice **donor** and **acceptor** sites. `data.sites` lists each site +with `name`, `start`, `end`, `site_type` (donor/acceptor), `score`, and +`strand`. Default model `g0-splice-bigbird` (BigBird long-context). Good demo: a +gene with known introns (the bundled `splice_hbb.fa` is HBB). + +## enhancer + +Scores enhancer activity. The default `g0-deepstarr` (DeepSTARR) reports +**developmental** and **housekeeping** enhancer scores — +`summary.dev_score_max` / `summary.hk_score_max` per window. DeepSTARR is a +*Drosophila* model; the bundled demo (`enhancer_eve.fa`, the eve locus) reflects +that. Use the appropriate model for your organism. + +## chromatin + +Annotates chromatin state across a large panel of tracks (histone marks, DNase, +ATAC, TF binding) — the default `g0-deepsea` (DeepSEA) covers hundreds of +features. `summary.total_annotations` is the headline; the full per-track matrix +is in `data`. Output also available as BED via the API. + +## expression + +Predicts gene expression as **log(TPM+1)** from a fixed window. Two +requirements the skill enforces locally: + +1. **Exactly 9,198 bp** — the model takes a 9,198 bp window **centred on the + TSS** (2 × 4,599). Other lengths are rejected before any API call. +2. **`--description`** — a cell-type / assay context string (e.g. `"K562 + cells"`), passed as `options.description`. Required. + +`data.prediction.expression_log_tpm` (and `expression_tpm`) hold the result. + +## annotation + +De-novo gene / transcript structure prediction — transcript intervals and +strand, no reference annotation needed. **Async only**: the skill submits with +`Prefer: respond-async`, receives a `job_id`, and polls +`GET /v1/tasks/jobs/{job_id}` until terminal (HTTP 200). Typical latency ~20 s +for ~20 kb; progress is streamed to stderr. `data.transcripts` lists each +predicted transcript with `name`, `start`, `end`, `strand`, and `score` (plus +structure fields: `length`, `tss_position`, `polya_position`, `transcript_type`, +`exons`, `introns`, `cds`). diff --git a/nim-skills/genomic-intelligence-nim/scripts/gi_client.py b/nim-skills/genomic-intelligence-nim/scripts/gi_client.py new file mode 100644 index 0000000..7d35a42 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/scripts/gi_client.py @@ -0,0 +1,206 @@ +"""Client for the Genomic Intelligence API. + +Self-contained — this module has no dependencies beyond ``requests`` and is +imported by ``gi_predict.py`` (same directory). It wraps the hosted +``/v1/tasks/{task}/predict`` contract for all six DNA-sequence tasks +(promoter, splice, enhancer, chromatin, expression, annotation). + +Auth resolution order: +1. Explicit ``api_key=`` constructor arg (``--api-key`` on the CLI). +2. ``GI_API_KEY`` environment variable. + +If neither is supplied, ``resolve_api_key`` raises ``RuntimeError`` with +onboarding instructions. Request a partner key at +contact@genomicintelligence.ai, then ``export GI_API_KEY=gi_…``. + +Base URL: ``GI_BASE_URL`` env, default ``https://api.genomicintelligence.ai``. + +Contract reference: https://docs.genomicintelligence.ai +""" + +from __future__ import annotations + +import os +import time +from pathlib import Path +from typing import Any, Dict, Optional, Tuple + +import requests + + +DEFAULT_BASE_URL = "https://api.genomicintelligence.ai" + +MISSING_KEY_MESSAGE = ( + "GI_API_KEY is not set. This skill calls the hosted Genomic " + "Intelligence API (https://api.genomicintelligence.ai) and requires a " + "partner bearer key.\n\n" + "Request a key at contact@genomicintelligence.ai, then:\n" + " export GI_API_KEY=gi_yourkeyhere\n\n" + "See references/authentication.md for details." +) + + +class GIError(RuntimeError): + """Non-2xx response from the API. Mirrors the ``{error}`` envelope.""" + + def __init__(self, status: int, body: Dict[str, Any]): + err = (body or {}).get("error", {}) if isinstance(body, dict) else {} + self.status = status + self.code = err.get("code", "http_error") + self.message = err.get("message", "") + self.request_id = err.get("request_id") + self.details = err.get("details") + super().__init__( + f"[{status} {self.code}] {self.message} (request_id={self.request_id})" + ) + + +def resolve_api_key(explicit: Optional[str] = None) -> str: + """Apply the auth resolution order documented at module top. + + Raises ``RuntimeError`` with onboarding instructions if no key is found. + """ + if explicit: + return explicit + env = os.environ.get("GI_API_KEY") + if env: + return env + raise RuntimeError(MISSING_KEY_MESSAGE) + + +class Client: + """Thin synchronous client for /v1/tasks/{task}/predict.""" + + def __init__( + self, + api_key: Optional[str] = None, + base_url: Optional[str] = None, + timeout: float = 300.0, + ) -> None: + self.api_key = resolve_api_key(api_key) + self.base_url = ( + base_url or os.environ.get("GI_BASE_URL") or DEFAULT_BASE_URL + ).rstrip("/") + self.timeout = timeout + self._session = requests.Session() + self._session.headers.update( + { + "Authorization": f"Bearer {self.api_key}", + "Content-Type": "application/json", + "Accept": "application/json", + "User-Agent": "BioNeMo-GI-Skill/0.1.0", + } + ) + + def _check(self, resp: requests.Response) -> Dict[str, Any]: + try: + body = resp.json() + except ValueError: + body = {"error": {"code": "non_json", "message": resp.text[:200]}} + if not resp.ok: + raise GIError(resp.status_code, body) + return body + + def health(self) -> Dict[str, Any]: + r = self._session.get(f"{self.base_url}/health", timeout=self.timeout) + return self._check(r) + + def predict( + self, + task: str, + sequence: str, + sequence_name: str = "sequence", + model: Optional[str] = None, + options: Optional[Dict[str, Any]] = None, + ) -> Dict[str, Any]: + body: Dict[str, Any] = {"sequence": sequence, "sequence_name": sequence_name} + if model is not None: + body["model"] = model + if options is not None: + body["options"] = options + r = self._session.post( + f"{self.base_url}/v1/tasks/{task}/predict", + json=body, + timeout=self.timeout, + ) + return self._check(r) + + def submit_async( + self, + task: str, + sequence: str, + sequence_name: str = "sequence", + model: Optional[str] = None, + options: Optional[Dict[str, Any]] = None, + ) -> str: + body: Dict[str, Any] = {"sequence": sequence, "sequence_name": sequence_name} + if model is not None: + body["model"] = model + if options is not None: + body["options"] = options + r = self._session.post( + f"{self.base_url}/v1/tasks/{task}/predict", + headers={"Prefer": "respond-async"}, + json=body, + timeout=self.timeout, + ) + body = self._check(r) + return body["data"]["job_id"] + + def get_job(self, job_id: str) -> requests.Response: + return self._session.get( + f"{self.base_url}/v1/tasks/jobs/{job_id}", timeout=self.timeout + ) + + def wait_for_job( + self, + job_id: str, + poll_interval: float = 2.0, + max_wait: float = 30 * 60, + on_progress=None, + ) -> Dict[str, Any]: + deadline = time.monotonic() + max_wait + while True: + r = self.get_job(job_id) + if r.status_code == 200: + return r.json() + if r.status_code == 202: + if on_progress is not None: + try: + on_progress((r.json().get("data") or {}).get("progress") or {}) + except Exception: + pass + if time.monotonic() > deadline: + raise TimeoutError( + f"job {job_id} did not finish within {max_wait}s" + ) + time.sleep(poll_interval) + continue + try: + body = r.json() + except ValueError: + body = {"error": {"code": "non_json", "message": r.text[:200]}} + raise GIError(r.status_code, body) + + +def read_fasta(path) -> Tuple[str, str]: + """Tiny FASTA parser (single record). Returns (sequence_name, sequence). + + Concatenates all non-header lines; uppercases; strips whitespace and + non-ACGTN characters. Sufficient for the bundled demo fixtures; users + with multi-record FASTA should pass a single record at a time. + """ + name = None + seq_parts: list[str] = [] + with open(Path(path)) as fh: + for line in fh: + line = line.strip() + if not line: + continue + if line.startswith(">"): + if name is None: + name = line[1:].split()[0] or "sequence" + continue + seq_parts.append("".join(c for c in line.upper() if c in "ACGTN")) + seq = "".join(seq_parts) + return name or "sequence", seq diff --git a/nim-skills/genomic-intelligence-nim/scripts/gi_ensembl.py b/nim-skills/genomic-intelligence-nim/scripts/gi_ensembl.py new file mode 100644 index 0000000..3171bb7 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/scripts/gi_ensembl.py @@ -0,0 +1,246 @@ +"""Ensembl REST helpers: resolve a gene symbol or genomic region to reference sequence. + +Ported from the Genomic Intelligence MCP server (`gi_mcp/_ensembl.py`) and +de-coupled from it — only dependency is ``requests``. Same public REST API the +Web UI's GeneSearch uses (rest.ensembl.org); no API key required. + +Three flows used by the skill's acquisition CLI (``gi_fetch.py``): + - fetch_by_symbol(symbol) → full gene-body sequence + - fetch_region_by_coords("chr:start-end") → region sequence + - fetch_gene_window_for_expression(symbol) → exactly 9,198 bp centred on the TSS + +Base URL: ``GI_ENSEMBL_URL`` env, default ``https://rest.ensembl.org``. +""" + +from __future__ import annotations + +import os +import re +from dataclasses import dataclass +from typing import Optional, Tuple + +import requests + +# Expression model window — mirrors gpu_service expression exact_bp (2 * 4599). +EXPRESSION_SEQUENCE_LENGTH = 9_198 + +DEFAULT_ENSEMBL_URL = "https://rest.ensembl.org" +_USER_AGENT = "BioNeMo-GI-Skill/0.1.0" + + +def ensembl_base_url() -> str: + return os.environ.get("GI_ENSEMBL_URL", DEFAULT_ENSEMBL_URL).rstrip("/") + + +class EnsemblError(RuntimeError): + pass + + +@dataclass +class GeneLocus: + ensembl_id: str + seq_region: str # e.g. "17" + start: int + end: int + strand: int # +1 or -1 + species: str + display_name: str + # Canonical-transcript boundaries (when resolved via expand=1). Gene-level + # start/end can sit far from the real TSS — HBB's gene end is 2,324 bp from + # its canonical TSS, ACTB's is 33,301 bp — so expression windowing must use + # the canonical transcript, not the gene body. + canonical_start: Optional[int] = None + canonical_end: Optional[int] = None + + @property + def tss(self) -> int: + """Transcription start site: transcript start on +strand, end on -strand. + + Prefers the canonical transcript boundary when available; falls back to + the gene body otherwise. + """ + start = self.canonical_start if self.canonical_start is not None else self.start + end = self.canonical_end if self.canonical_end is not None else self.end + return start if self.strand >= 0 else end + + +def _get(path: str, *, headers: Optional[dict] = None, params: Optional[dict] = None, + timeout: float = 30.0) -> requests.Response: + """GET against the Ensembl REST base, mapping transport failures to EnsemblError.""" + base_headers = {"User-Agent": _USER_AGENT, "Accept": "application/json"} + if headers: + base_headers.update(headers) + url = f"{ensembl_base_url()}{path}" + try: + return requests.get(url, headers=base_headers, params=params, timeout=timeout) + except requests.RequestException as exc: + raise EnsemblError( + f"could not reach Ensembl at {ensembl_base_url()} ({type(exc).__name__})" + ) from exc + + +def lookup_symbol(symbol: str, species: str = "human", expand: bool = False) -> GeneLocus: + """Resolve a gene symbol to its genomic locus. + + With ``expand=True`` the gene's transcripts are pulled too, and the + canonical transcript's boundaries are recorded on the locus (used for + TSS-accurate expression windowing). + """ + r = _get( + f"/lookup/symbol/{species}/{symbol}", + params={"expand": 1 if expand else 0}, + ) + if r.status_code == 404: + raise EnsemblError(f"gene symbol {symbol!r} not found in {species}") + if not r.ok: + hint = "" + if r.status_code == 400: + # A 400 here is almost always an unrecognised species token: Ensembl + # wants the production name (lowercase, underscored), so 'drosophila' + # / 'Drosophila melanogaster' fail where 'drosophila_melanogaster' + # works. Point the caller at the canonical form. + hint = ( + " — check the species token: Ensembl expects a production name " + "(lowercase, underscored), e.g. 'drosophila_melanogaster', " + "'mus_musculus', not 'drosophila' or 'Drosophila melanogaster'" + ) + raise EnsemblError( + f"Ensembl lookup failed ({r.status_code}) for {symbol!r} " + f"in species {species!r}{hint}" + ) + d = r.json() + canonical_start: Optional[int] = None + canonical_end: Optional[int] = None + if expand: + transcripts = d.get("Transcript") or [] + canonical = next((t for t in transcripts if t.get("is_canonical") == 1), None) + if canonical is not None: + canonical_start = int(canonical["start"]) + canonical_end = int(canonical["end"]) + return GeneLocus( + ensembl_id=d["id"], + seq_region=str(d["seq_region_name"]), + start=int(d["start"]), + end=int(d["end"]), + strand=int(d.get("strand", 1)), + species=species, + display_name=d.get("display_name", symbol), + canonical_start=canonical_start, + canonical_end=canonical_end, + ) + + +def fetch_region(seq_region: str, start: int, end: int, species: str = "human", + strand: int = 1) -> str: + """Fetch raw nucleotide sequence for a 1-based inclusive region.""" + region = f"{seq_region}:{start}..{end}:{strand}" + r = _get(f"/sequence/region/{species}/{region}", headers={"Accept": "text/x-fasta"}) + if not r.ok: + raise EnsemblError(f"Ensembl sequence fetch failed ({r.status_code}) for {region}") + lines = [ln for ln in r.text.splitlines() if ln and not ln.startswith(">")] + return "".join(lines).upper() + + +# Coordinate string → (chrom, start, end). Lenient like the Web UI's GeneSearch +# (commas / en–em dashes / `..` / optional `chr`). +_REGION_RE = re.compile(r"^(?:chr)?([A-Za-z0-9]+):(\d+)(?:-(\d+))?$", re.IGNORECASE) + + +def parse_region(text: str) -> Tuple[str, int, int]: + """Parse 'chr8:127,680,000-127,800,000' → ('8', 127680000, 127800000). + + Accepts commas, en/em-dashes and ``..`` (normalised to ``-``), an optional + ``chr`` prefix, and spaces around separators. A bare position (no end) + defaults to a 1,000 bp window. Raises EnsemblError if unparseable. + """ + normalized = ( + text.replace(",", "") + .replace("–", "-") # en dash + .replace("—", "-") # em dash + .replace("..", "-") + ) + normalized = re.sub(r"\s*-\s*", "-", normalized) + normalized = re.sub(r"\s*:\s*", ":", normalized).strip() + m = _REGION_RE.match(normalized) + if not m: + raise EnsemblError( + f"could not parse genomic region {text!r}; expected e.g. " + "'chr8:127,680,000-127,800,000'" + ) + chrom = m.group(1) + start = int(m.group(2)) + end = int(m.group(3)) if m.group(3) else start + 1000 + if start < 1: + raise EnsemblError(f"region start must be >= 1 (got {start})") + if end < start: + raise EnsemblError(f"region end ({end:,}) is before start ({start:,})") + return chrom, start, end + + +def fetch_region_by_coords(region: str, species: str = "human", strand: int = 1, + flank_bp: int = 0) -> Tuple[str, dict]: + """Coordinate string → reference sequence + meta. Plus strand by default.""" + chrom, raw_start, raw_end = parse_region(region) + start = max(1, raw_start - flank_bp) + end = raw_end + flank_bp + seq = fetch_region(chrom, start, end, species, strand=strand) + meta = { + "region": f"{chrom}:{start}-{end}", + "strand": strand, + "species": species, + "length": len(seq), + } + return seq, meta + + +def fetch_by_symbol(symbol: str, species: str = "human", flank_bp: int = 0) -> Tuple[str, dict]: + """Symbol → full gene-body sequence (optionally flanked). Returns (seq, meta).""" + locus = lookup_symbol(symbol, species) + start = max(1, locus.start - flank_bp) + end = locus.end + flank_bp + seq = fetch_region(locus.seq_region, start, end, species, strand=locus.strand) + meta = { + "ensembl_id": locus.ensembl_id, + "region": f"{locus.seq_region}:{start}-{end}", + "strand": locus.strand, + "species": species, + "gene": locus.display_name, + } + return seq, meta + + +def fetch_gene_window_for_expression(symbol: str, species: str = "human") -> Tuple[str, dict]: + """Symbol → exactly EXPRESSION_SEQUENCE_LENGTH bp centred on the TSS. + + The expression model demands a precise window. We take the TSS from the + gene's *canonical transcript* (expand=1) — gene-body boundaries can sit + thousands of bp from the real TSS (HBB: 2,324 bp; ACTB: 33,301 bp), which + would mis-centre the window and tank the prediction — and grab half the + window on each side (the +1 keeps the total at exactly 9,198 bp). + """ + locus = lookup_symbol(symbol, species, expand=True) + tss = locus.tss + half = EXPRESSION_SEQUENCE_LENGTH // 2 # 4599 + start = tss - half + end = tss + half - 1 # inclusive → (tss+4598) - (tss-4599) + 1 = 9198 + if start < 1: + raise EnsemblError( + f"{symbol} TSS too close to chromosome start to extract a " + f"{EXPRESSION_SEQUENCE_LENGTH} bp window" + ) + seq = fetch_region(locus.seq_region, start, end, species, strand=locus.strand) + if len(seq) != EXPRESSION_SEQUENCE_LENGTH: + raise EnsemblError( + f"expected {EXPRESSION_SEQUENCE_LENGTH} bp, Ensembl returned {len(seq)}" + ) + meta = { + "ensembl_id": locus.ensembl_id, + "tss": tss, + "tss_source": "canonical-transcript" if locus.canonical_start is not None else "gene-body", + "region": f"{locus.seq_region}:{start}-{end}", + "strand": locus.strand, + "species": species, + "gene": locus.display_name, + "window": "TSS-centred", + } + return seq, meta diff --git a/nim-skills/genomic-intelligence-nim/scripts/gi_fetch.py b/nim-skills/genomic-intelligence-nim/scripts/gi_fetch.py new file mode 100644 index 0000000..ebe28f3 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/scripts/gi_fetch.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +"""Resolve a gene or genomic region to a FASTA file, via Ensembl. + +This is the *acquisition* half of the skill. The agent calls it when the +user names a gene or locus instead of supplying a FASTA — it fetches reference +sequence from Ensembl (public, no API key) and writes a single-record FASTA that +``gi_predict.py --input`` then consumes. + +Modes (mutually exclusive): + --gene SYMBOL full gene-body sequence (e.g. TP53) + --region chr17:7.6M-7.7M sequence for a coordinate range + --gene SYMBOL --for-expression + EXACTLY 9,198 bp centred on the canonical TSS — + the only window the expression model accepts + +Examples: + python scripts/gi_fetch.py --gene TP53 --out tp53.fa + python scripts/gi_fetch.py --region chr17:7,661,779-7,687,546 --out region.fa + python scripts/gi_fetch.py --gene HBB --for-expression --out hbb_tss.fa + +On success the FASTA path is printed to stdout (so the agent can pipe it into +gi_predict.py); a one-line provenance summary goes to stderr. +""" + +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) +from gi_ensembl import ( # noqa: E402 + EnsemblError, + fetch_by_symbol, + fetch_gene_window_for_expression, + fetch_region_by_coords, +) + + +def _parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + description="Fetch reference sequence from Ensembl and write a FASTA." + ) + src = p.add_mutually_exclusive_group(required=True) + src.add_argument("--gene", type=str, help="Gene symbol, e.g. TP53.") + src.add_argument("--region", type=str, help="Coordinate range, e.g. chr17:7,661,779-7,687,546.") + p.add_argument( + "--for-expression", + action="store_true", + help="With --gene: return exactly 9,198 bp centred on the canonical TSS " + "(required by the expression task). Ignored with --region.", + ) + p.add_argument( + "--species", + type=str, + default="human", + help="Ensembl production name (default: human; e.g. mus_musculus, drosophila_melanogaster).", + ) + p.add_argument("--flank-bp", type=int, default=0, help="Extra bp on each side (gene/region only).") + p.add_argument("--strand", type=int, default=1, choices=(1, -1), help="Strand for --region (default 1).") + p.add_argument("--out", type=Path, required=True, help="Output FASTA path to write.") + return p.parse_args() + + +def main() -> int: + args = _parse_args() + try: + if args.region: + if args.for_expression: + print( + "[gi-fetch] --for-expression needs --gene (TSS centring requires a " + "gene's canonical transcript, not a raw region).", + file=sys.stderr, + ) + return 1 + seq, meta = fetch_region_by_coords( + args.region, species=args.species, strand=args.strand, flank_bp=args.flank_bp + ) + header = f"{meta['region']}|{args.species}|strand:{meta['strand']}" + elif args.for_expression: + seq, meta = fetch_gene_window_for_expression(args.gene, species=args.species) + header = ( + f"{meta['gene']}|{meta['ensembl_id']}|{meta['region']}|{args.species}|" + f"strand:{meta['strand']}|TSS:{meta['tss']}|{meta['tss_source']}" + ) + else: + seq, meta = fetch_by_symbol(args.gene, species=args.species, flank_bp=args.flank_bp) + header = ( + f"{meta['gene']}|{meta['ensembl_id']}|{meta['region']}|{args.species}|" + f"strand:{meta['strand']}" + ) + except EnsemblError as e: + print(f"[gi-fetch] {e}", file=sys.stderr) + return 2 + + args.out.parent.mkdir(parents=True, exist_ok=True) + wrapped = "\n".join(seq[i : i + 70] for i in range(0, len(seq), 70)) + args.out.write_text(f">{header}\n{wrapped}\n") + + print( + f"[gi-fetch] wrote {len(seq):,} bp → {args.out} ({header})", + file=sys.stderr, + ) + # stdout = just the path, so the agent can chain: FASTA=$(gi_fetch ...) + print(str(args.out)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/nim-skills/genomic-intelligence-nim/scripts/gi_predict.py b/nim-skills/genomic-intelligence-nim/scripts/gi_predict.py new file mode 100644 index 0000000..c51c204 --- /dev/null +++ b/nim-skills/genomic-intelligence-nim/scripts/gi_predict.py @@ -0,0 +1,423 @@ +#!/usr/bin/env python3 +"""Unified CLI for the Genomic Intelligence DNA-sequence tasks. + +One entry point covers all six tasks exposed by the hosted +``/v1/tasks/{task}/predict`` contract: + + promoter · splice · enhancer · chromatin · expression · annotation + +It parses a single-record FASTA, calls the API (sync, or async for +``annotation``), and writes ``report.md`` + ``result.json`` + +``reproducibility/`` to the output directory. + +Usage: + python scripts/gi_predict.py --task promoter --demo + python scripts/gi_predict.py --task splice --input my.fa --output out/ + python scripts/gi_predict.py --task expression --demo --description "K562 cells" + +Auth: set GI_API_KEY in the environment (see references/authentication.md). +""" + +from __future__ import annotations + +import argparse +import json +import os +import shlex +import sys +import time +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Dict, Optional + +# Self-contained: import the sibling client module regardless of CWD. +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) +from gi_client import Client, GIError, read_fasta # noqa: E402 + +SKILL_DIR = SCRIPT_DIR.parent +DEMO_DIR = SKILL_DIR / "assets" / "demo" + +DISCLAIMER = ( + "Genomic Intelligence is a research tool. It is not a medical device and " + "does not provide clinical diagnoses. Consult a qualified professional " + "before making any medical decisions." +) + + +class TaskSpec: + """Per-task metadata: input bounds, async flag, demo fixture.""" + + def __init__( + self, + min_bp: int, + max_bp: int, + async_mode: bool, + demo: str, + exact_bp: Optional[int] = None, + ) -> None: + self.min_bp = min_bp + self.max_bp = max_bp + self.async_mode = async_mode + self.demo = demo + self.exact_bp = exact_bp + + def validate(self, length: int) -> Optional[str]: + if self.exact_bp is not None and length != self.exact_bp: + return f"expects exactly {self.exact_bp:,} bp, got {length:,} bp" + if length < self.min_bp: + return f"sequence too short: {length:,} bp < {self.min_bp:,} bp minimum" + if length > self.max_bp: + return f"sequence too long: {length:,} bp > {self.max_bp:,} bp maximum" + return None + + +# Bounds mirror gpu_service/config/models.yaml + core/limits.py. The expression +# task requires an exact 9,198 bp TSS-centred window; all others accept 1..500kb. +TASKS: Dict[str, TaskSpec] = { + "promoter": TaskSpec(1, 500_000, False, "promoter_tp53.fa"), + "splice": TaskSpec(1, 500_000, False, "splice_hbb.fa"), + "enhancer": TaskSpec(1, 500_000, False, "enhancer_eve.fa"), + "chromatin": TaskSpec(1, 500_000, False, "chromatin_active_promoter_chr19.fa"), + "expression": TaskSpec(9_198, 9_198, False, "expression_hbb_k562.fa", exact_bp=9_198), + "annotation": TaskSpec(1, 500_000, True, "annotation_tp53.fa"), +} + + +def _parse_args() -> argparse.Namespace: + p = argparse.ArgumentParser( + description="Genomic Intelligence DNA-sequence prediction (one CLI, six tasks)." + ) + p.add_argument( + "--task", + required=True, + choices=sorted(TASKS), + help="Which prediction task to run.", + ) + p.add_argument("--input", type=Path, dest="input_file", help="Input FASTA (single record).") + p.add_argument("--output", type=Path, default=None, help="Output directory (default: /tmp/gi-).") + p.add_argument("--demo", action="store_true", help="Run with the bundled example FASTA for the task.") + p.add_argument("--model", type=str, default=None, help="Override the default model for the task.") + p.add_argument( + "--description", + type=str, + default=None, + help="Cell type / assay context. REQUIRED by expression; ignored by other tasks.", + ) + p.add_argument("--api-key", type=str, default=None, help="Override GI_API_KEY env.") + p.add_argument("--base-url", type=str, default=None, help="Override GI_BASE_URL (default: https://api.genomicintelligence.ai).") + return p.parse_args() + + +def _resolve_input(args: argparse.Namespace, spec: TaskSpec) -> Path: + if args.demo or args.input_file is None: + demo_path = DEMO_DIR / spec.demo + if not demo_path.exists(): + print(f"Error: bundled demo fixture missing at {demo_path}", file=sys.stderr) + sys.exit(1) + return demo_path + if not args.input_file.exists(): + print(f"Error: --input file not found: {args.input_file}", file=sys.stderr) + sys.exit(1) + return args.input_file + + +# Per-item arrays that belong in result.json, not in the compact stdout payload. +_BULKY_SUMMARY_KEYS = {"regions", "sites", "transcripts", "raw_summary"} + + +def _summarize(task: str, body: Dict[str, Any]) -> Dict[str, Any]: + """Pick the most useful headline numbers per task from `data`.""" + data = body.get("data") or {} + summary = data.get("summary") or {} + out: Dict[str, Any] = {"task": task, "model": data.get("model")} + if task == "promoter": + out["promoter_windows"] = summary.get("promoter_windows") + out["total_windows"] = summary.get("total_windows") + out["regions"] = data.get("regions") or [] + elif task == "splice": + out["sites_found"] = summary.get("total_sites", summary.get("sites_found")) + out["donor_sites"] = summary.get("donor_sites") + out["acceptor_sites"] = summary.get("acceptor_sites") + out["sites"] = data.get("sites") or [] + elif task == "enhancer": + out["windows_processed"] = summary.get("total_windows", summary.get("windows_processed")) + out["dev_score_max"] = summary.get("dev_score_max") + out["hk_score_max"] = summary.get("hk_score_max") + elif task == "chromatin": + out["windows_processed"] = summary.get("total_windows", summary.get("windows_processed")) + out["total_annotations"] = summary.get("total_annotations") + elif task == "expression": + pred = data.get("prediction") or {} + out["log_tpm"] = pred.get("expression_log_tpm") + out["tpm"] = pred.get("expression_tpm") + elif task == "annotation": + out["transcripts_found"] = summary.get("total_transcripts", summary.get("transcripts_found")) + out["transcripts"] = data.get("transcripts") or [] + out["raw_summary"] = summary + return out + + +def _fmt(v: Any, spec: str = ".3f") -> str: + return format(v, spec) if isinstance(v, (int, float)) else str(v) + + +def _headline_lines(task: str, summary: Dict[str, Any]) -> list[str]: + lines: list[str] = [] + if task == "promoter": + lines.append( + f"- Promoter windows: **{summary.get('promoter_windows', 0)}** / " + f"{summary.get('total_windows', 0)} total" + ) + regions = summary.get("regions") or [] + if regions: + lines += ["", "| Name | Start | End | Score |", "|---|---|---|---|"] + for r in regions[:20]: + lines.append( + f"| {r.get('name', '-')} | {r.get('start', '-')} | " + f"{r.get('end', '-')} | {_fmt(r.get('score', '-'))} |" + ) + elif task == "splice": + lines.append( + f"- Splice sites found: **{summary.get('sites_found') or 0}** " + f"({summary.get('donor_sites') or 0} donor + {summary.get('acceptor_sites') or 0} acceptor)" + ) + sites = (summary.get("sites") or [])[:20] + if sites: + lines += ["", "| Name | Start | Type | Score |", "|---|---|---|---|"] + for s in sites: + lines.append( + f"| {s.get('name', '-')} | {s.get('start', '-')} | " + f"{s.get('site_type', '-')} | {_fmt(s.get('score', '-'))} |" + ) + elif task == "enhancer": + lines.append(f"- Windows processed: **{summary.get('windows_processed') or 0}**") + dev, hk = summary.get("dev_score_max"), summary.get("hk_score_max") + if dev is not None: + lines.append(f"- Max developmental-enhancer score: **{_fmt(dev)}**") + if hk is not None: + lines.append(f"- Max housekeeping-enhancer score: **{_fmt(hk)}**") + elif task == "chromatin": + lines.append(f"- Windows processed: **{summary.get('windows_processed') or 0}**") + lines.append(f"- Total annotations across all tracks: **{summary.get('total_annotations') or 0}**") + elif task == "expression": + log_tpm, tpm = summary.get("log_tpm"), summary.get("tpm") + if log_tpm is not None: + tail = f" ≈ {tpm:.2f} TPM" if isinstance(tpm, (int, float)) else "" + lines.append(f"- Predicted expression: **{_fmt(log_tpm, '.4f')} log(TPM+1)**{tail}") + else: + lines.append("- See `result.json` for the full prediction payload.") + elif task == "annotation": + lines.append(f"- Transcripts found: **{summary.get('transcripts_found') or 0}**") + tx = (summary.get("transcripts") or [])[:20] + if tx: + lines += ["", "| Name | Start | End | Strand | Score |", "|---|---|---|---|---|"] + for t in tx: + lines.append( + f"| {t.get('name', '-')} | {t.get('start', '-')} | " + f"{t.get('end', '-')} | {t.get('strand', '-')} | {_fmt(t.get('score', '-'))} |" + ) + return lines + + +def _repro_command( + task: str, + input_path: Path, + output_dir: Path, + model: Optional[str] = None, + description: Optional[str] = None, +) -> str: + """Build the exact re-runnable invocation for reproducibility/command.sh. + + Emits --model and --description only when they were supplied, so a replay + reproduces the original call: expression requires --description (no default), + and a non-default --model must survive. Uses python3 and shell-quotes every + value so paths/descriptions with spaces round-trip. + """ + parts = [ + "python3 scripts/gi_predict.py", + f"--task {task}", + f"--input {shlex.quote(str(input_path))}", + f"--output {shlex.quote(str(output_dir))}", + ] + if model: + parts.append(f"--model {shlex.quote(model)}") + if description is not None: + parts.append(f"--description {shlex.quote(description)}") + return " ".join(parts) + + +def _write_report( + task: str, + summary: Dict[str, Any], + body: Dict[str, Any], + output_dir: Path, + input_path: Path, + sequence_name: str, + sequence_length: int, + elapsed_ms: float, + model: Optional[str] = None, + description: Optional[str] = None, +) -> None: + output_dir.mkdir(parents=True, exist_ok=True) + (output_dir / "result.json").write_text( + json.dumps({"summary": summary, "full_response": body}, indent=2) + ) + + meta = body.get("meta") or {} + report_model = summary.get("model") or "—" # effective model for the report + lines = [ + f"# Genomic Intelligence — {task} report", + "", + f"- **Sequence**: `{sequence_name}` ({sequence_length:,} bp)", + f"- **Input file**: `{input_path}`", + f"- **Model**: `{report_model}`", + f"- **Inference time**: {_fmt(meta.get('inference_time_ms', elapsed_ms), '.0f')} ms", + f"- **Request ID**: `{meta.get('request_id', '—')}`", + f"- **Generated**: {datetime.now(timezone.utc).isoformat(timespec='seconds')}", + "", + "## Headline result", + "", + *_headline_lines(task, summary), + "", + "## Reproducibility", + "", + "- `reproducibility/command.sh` — exact invocation", + "- `result.json` — full `{data, meta}` response from the API", + "", + "## API", + "", + f"`POST /v1/tasks/{task}/predict` on `https://api.genomicintelligence.ai` " + "— see .", + "", + "---", + "", + f"_{DISCLAIMER}_", + "", + ] + (output_dir / "report.md").write_text("\n".join(lines)) + + repro = output_dir / "reproducibility" + repro.mkdir(exist_ok=True) + cmd = _repro_command(task, input_path, output_dir, model, description) + "\n" + (repro / "command.sh").write_text("#!/usr/bin/env bash\nset -euo pipefail\n" + cmd) + (repro / "command.sh").chmod(0o755) + (repro / "environment.json").write_text( + json.dumps( + { + "skill": "genomic-intelligence-nim", + "skill_version": "0.1.0", + "task": task, + "api_base_url": os.environ.get("GI_BASE_URL", "https://api.genomicintelligence.ai"), + "model": summary.get("model"), + "request_id": meta.get("request_id"), + "timestamp": datetime.now(timezone.utc).isoformat(timespec="seconds"), + }, + indent=2, + ) + ) + + +def main() -> int: + args = _parse_args() + task = args.task + spec = TASKS[task] + output_dir = args.output or Path(f"/tmp/gi-{task}") + + input_path = _resolve_input(args, spec) + sequence_name, sequence = read_fasta(input_path) + if not sequence: + print(f"Error: parsed an empty sequence from {input_path}", file=sys.stderr) + return 1 + + length_err = spec.validate(len(sequence)) + if length_err: + print(f"[gi-{task}] invalid input — {length_err}", file=sys.stderr) + if task == "expression": + print( + " The expression model takes an exact 9,198 bp window centred on a TSS. " + "See references/tasks.md#expression.", + file=sys.stderr, + ) + return 1 + + if task == "expression" and not args.description: + print( + "[gi-expression] --description is required (e.g. \"K562 cells\"). " + "It selects the expression context. See references/tasks.md#expression.", + file=sys.stderr, + ) + return 1 + + try: + client = Client(api_key=args.api_key, base_url=args.base_url) + except RuntimeError as e: + print(str(e), file=sys.stderr) + return 2 + options: Dict[str, Any] = {} + if args.description is not None: + options["description"] = args.description + + print( + f"[gi-{task}] sequence_name={sequence_name} length={len(sequence):,} bp " + f"model={args.model or 'default'} mode={'async' if spec.async_mode else 'sync'}", + file=sys.stderr, + ) + started = time.monotonic() + try: + if spec.async_mode: + job_id = client.submit_async( + task, sequence=sequence, sequence_name=sequence_name, + model=args.model, options=options or None, + ) + print(f"[gi-{task}] submitted job_id={job_id}", file=sys.stderr) + + def _progress(p: Dict[str, Any]) -> None: + pct, msg = p.get("percent"), p.get("message", "") + if pct is not None: + print(f" {pct:>3}% {msg}", file=sys.stderr) + + body = client.wait_for_job(job_id, on_progress=_progress) + else: + body = client.predict( + task, sequence=sequence, sequence_name=sequence_name, + model=args.model, options=options or None, + ) + except GIError as e: + print(f"[gi-{task}] API error: {e}", file=sys.stderr) + return 2 + + elapsed_ms = (time.monotonic() - started) * 1000.0 + summary = _summarize(task, body) + _write_report( + task, summary, body, output_dir, input_path, sequence_name, len(sequence), + elapsed_ms, model=args.model, description=args.description, + ) + print(f"[gi-{task}] OK — wrote {output_dir}/report.md ({elapsed_ms:.0f} ms wall)", file=sys.stderr) + + # stdout = a compact machine-readable summary so the agent gets the answer + # inline without reading a file. The bulky per-item arrays (regions / sites / + # transcripts) stay in result.json — only headline scalars go here. + meta = body.get("meta") or {} + headline = {k: v for k, v in summary.items() if k not in _BULKY_SUMMARY_KEYS} + stdout_payload = { + "ok": True, + "task": task, + "sequence_name": sequence_name, + "sequence_length_bp": len(sequence), + "model": summary.get("model"), + "request_id": meta.get("request_id"), + "inference_time_ms": meta.get("inference_time_ms"), + "result": headline, + "artifacts": { + "output_dir": str(output_dir), + "report": str(output_dir / "report.md"), + "result_json": str(output_dir / "result.json"), + }, + } + print(json.dumps(stdout_payload, indent=2)) + return 0 + + +if __name__ == "__main__": + sys.exit(main())