From 22db7bd2bcd049ae1e4456b6fc56543b757f55f5 Mon Sep 17 00:00:00 2001 From: Dario Beraldi Date: Tue, 27 Aug 2024 04:42:07 +0100 Subject: [PATCH] Update CLI to work with new feature model (#426) * Rebase to main * pre test done * Misc. fixes * Move some code from common to shared package * Remove unused disable directive * Start using types and adapt code to new feature model Add vscode tasks to start Apollo for cypress and cli testing * Fix lint import * Fix attribute conversion In previous commit the `newAttributes` set collected attributes but didn't transfer them to the final set. * More use of strong typing * Expected line count edited to reflect new feature model and sequence download * Fix linter * Fix some dependency issus --------- Co-authored-by: Kyosti Sutinen Co-authored-by: Garrett Stevens --- .vscode/tasks.json | 30 + packages/apollo-cli/README.md | 906 -------- packages/apollo-cli/package.json | 3 + .../src/commands/assembly/sequence.ts | 9 +- .../src/commands/feature/add-child.ts | 34 +- .../apollo-cli/src/commands/feature/check.ts | 28 +- .../apollo-cli/src/commands/feature/copy.ts | 28 +- .../apollo-cli/src/commands/feature/delete.ts | 32 +- .../src/commands/feature/edit-attribute.ts | 26 +- .../src/commands/feature/edit-coords.ts | 54 +- .../src/commands/feature/edit-type.ts | 15 +- .../apollo-cli/src/commands/feature/search.ts | 5 +- .../src/commands/refseq/add-alias.ts | 6 +- packages/apollo-cli/src/utils.ts | 18 +- packages/apollo-cli/test/README.md | 48 + packages/apollo-cli/test/test.py | 88 +- .../test_data/gene_representations.gff3 | 1839 +++++++++++++++++ .../apollo-collaboration-server/package.json | 5 +- packages/apollo-common/package.json | 2 +- packages/apollo-mst/package.json | 3 +- packages/apollo-shared/package.json | 4 +- .../src/Changes/AddFeatureChange.ts | 2 +- .../src/Changes/DeleteAssemblyChange.ts | 2 +- .../src/Changes/DeleteFeatureChange.ts | 2 +- .../src/Changes/FeatureAttributeChange.ts | 2 +- .../src/Changes/LocationEndChange.ts | 2 +- .../src/Changes/LocationStartChange.ts | 2 +- .../apollo-shared/src/Changes/TypeChange.ts | 2 +- .../src/GFF3/gff3ToAnnotationFeature.ts | 4 +- .../src/Operations/GetFeaturesOperation.ts | 4 +- .../cypress/e2e/downloadGff.cy.ts | 2 +- packages/jbrowse-plugin-apollo/package.json | 4 +- yarn.lock | 63 +- 33 files changed, 2179 insertions(+), 1095 deletions(-) create mode 100644 packages/apollo-cli/test/README.md create mode 100644 packages/apollo-cli/test_data/gene_representations.gff3 diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 26dd1fb37..1371fed12 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -65,5 +65,35 @@ "dependsOn": ["start shared", "start server", "start plugin"], "problemMatcher": [], }, + { + "label": "start server cypress", + "type": "npm", + "script": "cypress:start", + "path": "packages/apollo-collaboration-server", + "problemMatcher": [], + "detail": "yarn build:shared && yarn start:nest --watch", + "dependsOn": ["yarn"], + "isBackground": true, + }, + { + "label": "start server cli test", + "type": "npm", + "script": "test:cli:start", + "path": "packages/apollo-collaboration-server", + "problemMatcher": [], + "detail": "yarn build:shared && yarn start:nest --watch", + "dependsOn": ["yarn"], + "isBackground": true, + }, + { + "label": "Start-cypress", + "dependsOn": ["start shared", "start server cypress", "start plugin"], + "problemMatcher": [], + }, + { + "label": "Start-cli-test", + "dependsOn": ["start shared", "start server cli test", "start plugin"], + "problemMatcher": [], + }, ], } diff --git a/packages/apollo-cli/README.md b/packages/apollo-cli/README.md index 307d75acd..1be041ec1 100644 --- a/packages/apollo-cli/README.md +++ b/packages/apollo-cli/README.md @@ -29,720 +29,7 @@ USAGE -- [`apollo assembly add-fasta`](#apollo-assembly-add-fasta) -- [`apollo assembly add-gff`](#apollo-assembly-add-gff) -- [`apollo assembly check`](#apollo-assembly-check) -- [`apollo assembly delete`](#apollo-assembly-delete) -- [`apollo assembly get`](#apollo-assembly-get) -- [`apollo assembly sequence`](#apollo-assembly-sequence) -- [`apollo change get`](#apollo-change-get) -- [`apollo config [KEY] [VALUE]`](#apollo-config-key-value) -- [`apollo feature add-child`](#apollo-feature-add-child) -- [`apollo feature check`](#apollo-feature-check) -- [`apollo feature copy`](#apollo-feature-copy) -- [`apollo feature delete`](#apollo-feature-delete) -- [`apollo feature edit`](#apollo-feature-edit) -- [`apollo feature edit-attribute`](#apollo-feature-edit-attribute) -- [`apollo feature edit-coords`](#apollo-feature-edit-coords) -- [`apollo feature edit-type`](#apollo-feature-edit-type) -- [`apollo feature get`](#apollo-feature-get) -- [`apollo feature get-id`](#apollo-feature-get-id) -- [`apollo feature import`](#apollo-feature-import) -- [`apollo feature search`](#apollo-feature-search) - [`apollo help [COMMANDS]`](#apollo-help-commands) -- [`apollo login`](#apollo-login) -- [`apollo logout`](#apollo-logout) -- [`apollo refseq add-alias`](#apollo-refseq-add-alias) -- [`apollo refseq get`](#apollo-refseq-get) -- [`apollo status`](#apollo-status) -- [`apollo user get`](#apollo-user-get) - -## `apollo assembly add-fasta` - -Add new assembly from local or external fasta file - -``` -USAGE - $ apollo assembly add-fasta -i [--profile ] [--config-file ] [-a ] [-x ] [-f] - -FLAGS - -a, --assembly= Name for this assembly. Use the file name if omitted - -f, --force Delete existing assembly, if it exists - -i, --input-file= (required) Input fasta file - -x, --index= URL of the index. Required if input is an external source and ignored if input is a local - file - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add new assembly from local or external fasta file - -EXAMPLES - From local file: - - $ apollo assembly add-fasta -i genome.fa -a myAssembly - - From external source we also need the URL of the index: - - $ apollo assembly add-fasta -i https://.../genome.fa -x https://.../genome.fa.fai -a myAssembly -``` - -_See code: -[src/commands/assembly/add-fasta.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/add-fasta.ts)_ - -## `apollo assembly add-gff` - -Add new assembly from gff or gft file - -``` -USAGE - $ apollo assembly add-gff -i [--profile ] [--config-file ] [-a ] [-o] [-f] - -FLAGS - -a, --assembly= Name for this assembly. Use the file name if omitted - -f, --force Delete existing assembly, if it exists - -i, --input-file= (required) Input gff or gtf file - -o, --omit-features Do not import features, only upload the sequences - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add new assembly from gff or gft file - - The gff file is expected to contain sequences as per gff specifications. - Features are also imported by default. - -EXAMPLES - Import sequences and features: - - $ apollo assembly add-gff -i genome.gff -a myAssembly - - Import sequences only: - - $ apollo assembly add-gff -i genome.gff -a myAssembly -o -``` - -_See code: -[src/commands/assembly/add-gff.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/add-gff.ts)_ - -## `apollo assembly check` - -Add, view, or delete checks to assembly - -``` -USAGE - $ apollo assembly check [--profile ] [--config-file ] [-a ] [-c ] [-d] - -FLAGS - -a, --assembly= Manage checks in this assembly - -c, --check=... Add these check names or IDs. If unset, print the checks set for assembly - -d, --delete Delete (instead of adding) checks - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add, view, or delete checks to assembly - - Manage checks, i.e. the rules ensuring features in an assembly are plausible. - This command only sets the checks to apply, to retrieve features flagged by - these checks use `apollo feature check`. - -EXAMPLES - View available check types: - - $ apollo assembly check - - View checks set for assembly hg19: - - $ apollo assembly check -a hg19 - - Add checks to assembly: - - $ apollo assembly check -a hg19 -c CDSCheck - - Delete checks from assembly: - - $ apollo assembly check -a hg19 -c CDSCheck --delete -``` - -_See code: -[src/commands/assembly/check.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/check.ts)_ - -## `apollo assembly delete` - -Delete assemblies - -``` -USAGE - $ apollo assembly delete -a [--profile ] [--config-file ] [-v] - -FLAGS - -a, --assembly=... (required) Assembly names or IDs to delete - -v, --verbose Print to stdout the array of assemblies deleted - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Delete assemblies - - Assemblies to delete may be names or IDs - -EXAMPLES - Delete multiple assemblies using name or ID: - - $ apollo assembly delete -a mouse 6605826fbd0eee691f83e73f -``` - -_See code: -[src/commands/assembly/delete.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/delete.ts)_ - -## `apollo assembly get` - -Get available assemblies - -``` -USAGE - $ apollo assembly get [--profile ] [--config-file ] [-a ] - -FLAGS - -a, --assembly=... Get assemblies in this list of names or IDs - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get available assemblies - - Print to stdout the list of assemblies in json format -``` - -_See code: -[src/commands/assembly/get.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/get.ts)_ - -## `apollo assembly sequence` - -Get reference sequence in fasta format - -``` -USAGE - $ apollo assembly sequence [--profile ] [--config-file ] [-a ] [-r ] [-s ] [-e - ] - -FLAGS - -a, --assembly= Find input reference sequence in this assembly - -e, --end= End coordinate - -r, --refseq= Reference sequence. If unset, get all sequences - -s, --start= [default: 1] Start coordinate (1-based) - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get reference sequence in fasta format - - Return the reference sequence for a given assembly and coordinates - -EXAMPLES - Get all sequences in myAssembly: - - $ apollo assembly sequence -a myAssembly - - Get sequence in coordinates chr1:1..1000: - - $ apollo assembly sequence -a myAssembly -r chr1 -s 1 -e 1000 -``` - -_See code: -[src/commands/assembly/sequence.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/assembly/sequence.ts)_ - -## `apollo change get` - -Get list of changes - -``` -USAGE - $ apollo change get [--profile ] [--config-file ] [-a ] - -FLAGS - -a, --assembly=... Get changes only for these assembly names or IDs (but see description) - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get list of changes - - Return the change log in json format. Note that when an assembly is deleted the - link between common name and ID is lost (it can still be recovered by inspecting - the change log but at present this task is left to the user). In such cases you - need to use the assembly ID. -``` - -_See code: -[src/commands/change/get.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/change/get.ts)_ - -## `apollo config [KEY] [VALUE]` - -Get or set apollo configuration options - -``` -USAGE - $ apollo config [KEY] [VALUE] [--profile ] [---file ] [--get-config-file] - -ARGUMENTS - KEY Name of configuration parameter - VALUE Parameter value - -FLAGS - --config-file= Use this config file (mostly for testing) - --get-config-file Return the path to the config file and exit (this file may not exist yet) - --profile= Profile to create or edit - -DESCRIPTION - Get or set apollo configuration options - - Use this command to create or edit a user profile with credentials to access - Apollo. Configuration options are: - - - address: - Address and port e.g http://localhost:3999 - - - accessType: - How to access Apollo. accessType is typically one of: google, microsoft, guest, - root. Allowed types depend on your Apollo setup - - - accessToken: - Access token. Usually inserted by `apollo login` - - - rootCredentials.username: - Username of root account. Only set this for "root" access type - - - rootCredentials.password: - Password for root account. Only set this for "root" access type - -EXAMPLES - Interactive setup: - - $ apollo config - - Setup with key/value pairs: - - $ apollo config --profile admin address http://localhost:3999 - - Get current address for default profile: - - $ apollo config address -``` - -_See code: -[src/commands/config.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/config.ts)_ - -## `apollo feature add-child` - -Add a child feature (e.g. add an exon to an mRNA) - -``` -USAGE - $ apollo feature add-child -s -e -t [--profile ] [--config-file ] [-i ] - -FLAGS - -e, --end= (required) End coordinate of the child feature (1-based) - -i, --feature-id= [default: -] Add a child to this feature ID; use - to read it from stdin - -s, --start= (required) Start coordinate of the child feature (1-based) - -t, --type= (required) Type of child feature - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add a child feature (e.g. add an exon to an mRNA) - - See the other commands under `apollo feature` to retrive the parent ID of - interest and to populate the child feature with attributes. - -EXAMPLES - Add an exon at genomic coordinates 10..20 to this feature ID: - - $ apollo feature add-child -i 6605826fbd0eee691f83e73f -t exon -s 10 -e 20 -``` - -_See code: -[src/commands/feature/add-child.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/add-child.ts)_ - -## `apollo feature check` - -Get check results - -``` -USAGE - $ apollo feature check [--profile ] [--config-file ] [-i ] [-a ] - -FLAGS - -a, --assembly= Get checks for this assembly - -i, --feature-id=... Get checks for these feature identifiers - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get check results - - Use this command to view which features fail checks along with the reason for - failing. Use `apollo assembly check` for managing which checks should be applied - to an assembly - -EXAMPLES - Get all check results in the database: - - $ apollo feature check - - Get check results for assembly hg19: - - $ apollo feature check -a hg19 -``` - -_See code: -[src/commands/feature/check.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/check.ts)_ - -## `apollo feature copy` - -Copy a feature to another location - -``` -USAGE - $ apollo feature copy -r -s [--profile ] [--config-file ] [-i ] [-a ] - -FLAGS - -a, --assembly= Name or ID of target assembly. Not required if refseq is unique in the database - -i, --feature-id= [default: -] Feature ID to copy to; use - to read it from stdin - -r, --refseq= (required) Name or ID of target reference sequence - -s, --start= (required) Start position in target reference sequence - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Copy a feature to another location - - The feature may be copied to the same or to a different assembly. he destination - reference sequence may be selected by name only if unique in the database or by - name and assembly or by identifier. - -EXAMPLES - Copy this feature ID to chr1:100 in assembly hg38: - - $ apollo feature copy -i 6605826fbd0eee691f83e73f -r chr1 -s 100 -a hg38 -``` - -_See code: -[src/commands/feature/copy.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/copy.ts)_ - -## `apollo feature delete` - -Delete one or more features by ID - -``` -USAGE - $ apollo feature delete [--profile ] [--config-file ] [-i ] [-f] [-n] - -FLAGS - -f, --force Ignore non-existing features - -i, --feature-id=... [default: -] Feature IDs to delete - -n, --dry-run Only show what would be delete - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Delete one or more features by ID - - Note that deleting a child feature after deleting its parent will result in an - error unless you set -f/--force. -``` - -_See code: -[src/commands/feature/delete.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/delete.ts)_ - -## `apollo feature edit` - -Edit features using an appropiate json input - -``` -USAGE - $ apollo feature edit [--profile ] [--config-file ] [-j ] - -FLAGS - -j, --json-input= [default: -] Json string or json file or "-" to read json from stdin - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Edit features using an appropiate json input - - Edit a feature by submitting a json input with all the required attributes for - Apollo to process it. This is a very low level command which most users probably - do not need. - - Input may be a json string or a json file and it may be an array of changes. - This is an example input for editing feature type: - - { - "typeName": "TypeChange", - "changedIds": [ - "6613f7d22c957525d631b1cc" - ], - "assembly": "6613f7d1360321540a11e5ed", - "featureId": "6613f7d22c957525d631b1cc", - "oldType": "BAC", - "newType": "G_quartet" - } - -EXAMPLES - Editing by passing a json to stdin: - - echo '{"typeName": ... "newType": "G_quartet"}' | apollo feature edit -j - -``` - -_See code: -[src/commands/feature/edit.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/edit.ts)_ - -## `apollo feature edit-attribute` - -Add, edit, or view a feature attribute - -``` -USAGE - $ apollo feature edit-attribute -a [--profile ] [--config-file ] [-i ] [-v ] [-d] - -FLAGS - -a, --attribute= (required) Attribute key to add or edit - -d, --delete Delete this attribute - -i, --feature-id= [default: -] Feature ID to edit or "-" to read it from stdin - -v, --value=... New attribute value. Separated mutliple values by space to them as a list. If unset return - current value - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add, edit, or view a feature attribute - - Be aware that there is no checking whether attributes names and values are - valid. For example, you can create non-unique ID attributes or you can set gene - ontology terms to non-existing terms - -EXAMPLES - Add attribute "domains" with a list of values: - - $ apollo feature edit-attribute -i 66...3f -a domains -v ABC PLD - - Print values in "domains" as json array: - - $ apollo feature edit-attribute -i 66...3f -a domains - - Delete attribute "domains" - - $ apollo feature edit-attribute -i 66...3f -a domains -d -``` - -_See code: -[src/commands/feature/edit-attribute.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/edit-attribute.ts)_ - -## `apollo feature edit-coords` - -Edit feature start and/or end coordinates - -``` -USAGE - $ apollo feature edit-coords [--profile ] [--config-file ] [-i ] [-s ] [-e ] - -FLAGS - -e, --end= New end coordinate (1-based) - -i, --feature-id= [default: -] Feature ID to edit or "-" to read it from stdin - -s, --start= New start coordinate (1-based) - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Edit feature start and/or end coordinates - - If editing a child feature that new coordinates must be within the parent's - coordinates. To get the identifier of the feature to edit consider using `apollo - feature get` or `apollo feature search` - -EXAMPLES - Edit start and end: - - $ apollo feature edit-coords -i abc...xyz -s 10 -e 1000 - - Edit end and leave start as it is: - - $ apollo feature edit-coords -i abc...xyz -e 2000 -``` - -_See code: -[src/commands/feature/edit-coords.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/edit-coords.ts)_ - -## `apollo feature edit-type` - -Edit or view feature type - -``` -USAGE - $ apollo feature edit-type [--profile ] [--config-file ] [-i ] [-t ] - -FLAGS - -i, --feature-id= [default: -] Feature ID to edit or "-" to read it from stdin - -t, --type= Assign feature to this type. If unset return the current type - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Edit or view feature type - - Feature type is column 3 in gff format. It must be a valid sequence ontology - term although but the valifdity of the new term is not checked. -``` - -_See code: -[src/commands/feature/edit-type.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/edit-type.ts)_ - -## `apollo feature get` - -Get features in assembly, reference sequence or genomic window - -``` -USAGE - $ apollo feature get [--profile ] [--config-file ] [-a ] [-r ] [-s ] [-e - ] - -FLAGS - -a, --assembly= Find input reference sequence in this assembly - -e, --end= End coordinate - -r, --refseq= Reference sequence. If unset, query all sequences - -s, --start= [default: 1] Start coordinate (1-based) - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get features in assembly, reference sequence or genomic window - -EXAMPLES - Get all features in myAssembly: - - $ apollo feature get -a myAssembly - - Get features intersecting chr1:1..1000. You can omit the assembly name if there - are no other reference sequences named chr1: - - $ apollo feature get -a myAssembly -r chr1 -s 1 -e 1000 -``` - -_See code: -[src/commands/feature/get.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/get.ts)_ - -## `apollo feature get-id` - -Get features given their identifiers - -``` -USAGE - $ apollo feature get-id [--profile ] [--config-file ] [-i ] - -FLAGS - -i, --feature-id=... [default: -] Retrieves feature with these IDs. Use - "-" to read IDs from stdin (one per - line) - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get features given their identifiers - - Invalid identifiers or identifiers not found in the database will be silently - ignored - -EXAMPLES - Get features for these identifiers: - - $ apollo feature get-id -i abc...zyz def...foo -``` - -_See code: -[src/commands/feature/get-id.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/get-id.ts)_ - -## `apollo feature import` - -Import features from local gff file - -``` -USAGE - $ apollo feature import -i -a [--profile ] [--config-file ] [-d] - -FLAGS - -a, --assembly= (required) Import into this assembly name or assembly ID - -d, --delete-existing Delete existing features before importing - -i, --input-file= (required) Input gff or gtf file - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Import features from local gff file - - By default, features are added to the existing ones. - -EXAMPLES - Delete features in myAssembly and then import features.gff3: - - $ apollo feature import -d -i features.gff3 -a myAssembly -``` - -_See code: -[src/commands/feature/import.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/import.ts)_ - -## `apollo feature search` - -Free text search for feature in one or more assemblies - -``` -USAGE - $ apollo feature search -t [--profile ] [--config-file ] [-a ] - -FLAGS - -a, --assembly=... Assembly names or IDs to search; use "-" to read it from stdin. If omitted - search all assemblies - -t, --text= (required) Search for this text query - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Free text search for feature in one or more assemblies - - Return features matching a query string. This command searches only in: - - - Attribute *values* (not attribute names) - - Source field (which in fact is stored as an attribute) - - Feature type - - The search mode is: - - - Case insensitive - - Match only full words, but not necessarily the full value - - Common words are ignored. E.g. "the", "with" - - For example, given this feature: - - chr1 example SNP 10 30 0.987 . . "someKey=Fingerprint BAC with reads" - - Queries "bac" or "mRNA" return the feature. Instead these queries will NOT - match: - - - "someKey" - - "with" - - "Finger" - - "chr1" - - "0.987" - -EXAMPLES - Search "bac" in these assemblies: - - $ apollo feature search -a mm9 mm10 -t bac -``` - -_See code: -[src/commands/feature/search.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/feature/search.ts)_ ## `apollo help [COMMANDS]` @@ -765,197 +52,4 @@ DESCRIPTION _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.0.8/src/commands/help.ts)_ -## `apollo login` - -Login to Apollo - -``` -USAGE - $ apollo login [--profile ] [--config-file ] [-a ] [-u ] [-p ] [-f] - [--port ] - -FLAGS - -a, --address= Address of Apollo server - -f, --force Force re-authentication even if user is already logged in - -p, --password= Password for - -u, --username= Username for root login - --config-file= Use this config file (mostly for testing) - --port= [default: 3000] Get token by listening to this port number (usually this is >= 1024 and < - 65536) - --profile= Use credentials from this profile - -DESCRIPTION - Login to Apollo - - Use the provided credentials to obtain and save the token to access Apollo. Once - the token for the given profile has been saved in the configuration file, users - do not normally need to execute this command again unless the token has expired. - To setup a new profile use "apollo config" - -EXAMPLES - The most basic and probably most typical usage is to login using the default - profile in configuration file: - - $ apollo login - - Login with a different profile: - - $ apollo login --profile my-profile -``` - -_See code: -[src/commands/login.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/login.ts)_ - -## `apollo logout` - -Logout of Apollo - -``` -USAGE - $ apollo logout [--profile ] [--config-file ] - -FLAGS - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Logout of Apollo - - Logout by removing the access token from the selected profile - -EXAMPLES - Logout default profile: - - $ apollo logout - - Logout selected profile - - $ apollo logout --profile my-profile -``` - -_See code: -[src/commands/logout.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/logout.ts)_ - -## `apollo refseq add-alias` - -Add reference name aliases from a file - -``` -USAGE - $ apollo refseq add-alias -i -a [--profile ] [--config-file ] - -FLAGS - -a, --assembly= (required) Name for this assembly. - -i, --input-file= (required) Input refname alias file - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Add reference name aliases from a file - - Reference name aliasing is a process to make chromosomes that are named slightly - differently but which refer to the same thing render properly. This command - reads a file with reference name aliases and adds them to the database. - -EXAMPLES - Add reference name aliases: - - $ apollo refseq add-alias -i alias.txt -a myAssembly -``` - -_See code: -[src/commands/refseq/add-alias.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/refseq/add-alias.ts)_ - -## `apollo refseq get` - -Get reference sequences - -``` -USAGE - $ apollo refseq get [--profile ] [--config-file ] [-a ] - -FLAGS - -a, --assembly=... Get reference sequences for these assembly names or IDs; use - to read it from stdin - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get reference sequences - - Output the reference sequences in one or more assemblies in json format. This - command returns the sequence characteristics (e.g., name, ID, etc), not the DNA - sequences. Use `assembly sequence` for that. - -EXAMPLES - All sequences in the database: - - $ apollo refseq get - - Only sequences for these assemblies: - - $ apollo refseq get -a mm9 mm10 -``` - -_See code: -[src/commands/refseq/get.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/refseq/get.ts)_ - -## `apollo status` - -View authentication status - -``` -USAGE - $ apollo status [--profile ] [--config-file ] - -FLAGS - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - View authentication status - - This command returns ": Logged in" if the selected profile has an - access token and ": Logged out" otherwise. Note that this command does - not check the validity of the access token. -``` - -_See code: -[src/commands/status.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/status.ts)_ - -## `apollo user get` - -Get list of users - -``` -USAGE - $ apollo user get [--profile ] [--config-file ] [-u ] [-r ] - -FLAGS - -r, --role= Get users with this role - -u, --username= Find this username - --config-file= Use this config file (mostly for testing) - --profile= Use credentials from this profile - -DESCRIPTION - Get list of users - - If set, filters username and role must be both satisfied to return an entry - -EXAMPLES - By username: - - $ apollo user get -u Guest - - By role: - - $ apollo user get -r admin - - Use jq for more control: - - $ apollo user get | jq '.[] | select(.createdAt > "2024-03-18")' -``` - -_See code: -[src/commands/user/get.ts](https://github.com/GMOD/Apollo3/blob/v0.1.18/packages/apollo-cli/src/commands/user/get.ts)_ - diff --git a/packages/apollo-cli/package.json b/packages/apollo-cli/package.json index 6d54d2586..1a53265d6 100644 --- a/packages/apollo-cli/package.json +++ b/packages/apollo-cli/package.json @@ -50,6 +50,7 @@ "yaml": "^2.3.4" }, "devDependencies": { + "@apollo-annotation/mst": "workspace:^", "@apollo-annotation/shared": "workspace:^", "@istanbuljs/esm-loader-hook": "^0.2.0", "@istanbuljs/nyc-config-typescript": "^1.0.2", @@ -63,6 +64,8 @@ "mocha": "^10.2.0", "nyc": "^15.1.0", "oclif": "^4.4.2", + "react-dom": "^18.2.0", + "rxjs": "^7.4.0", "shx": "^0.3.3", "ts-node": "^10.3.0", "tsx": "^4.6.2", diff --git a/packages/apollo-cli/src/commands/assembly/sequence.ts b/packages/apollo-cli/src/commands/assembly/sequence.ts index 9c8546d6d..ad9f5d948 100644 --- a/packages/apollo-cli/src/commands/assembly/sequence.ts +++ b/packages/apollo-cli/src/commands/assembly/sequence.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ + import { Flags } from '@oclif/core' import { Agent, RequestInit, Response, fetch } from 'undici' @@ -12,6 +12,7 @@ import { queryApollo, wrapLines, } from '../../utils.js' +import { ApolloRefSeqSnapshot } from '@apollo-annotation/mst' async function getSequence( address: string, @@ -116,7 +117,7 @@ export default class ApolloCmd extends BaseCommand { access.accessToken, 'refSeqs', ) - const refSeqs = (await refs.json()) as object[] + const refSeqs = (await refs.json()) as ApolloRefSeqSnapshot[] for (const rid of refseqIds) { const res = await getSequence( access.address, @@ -130,8 +131,8 @@ export default class ApolloCmd extends BaseCommand { const seq: string = new TextDecoder().decode(seqObj?.value) let header = '' for (const x of refSeqs) { - if (x['_id' as keyof typeof x] === rid) { - const rname = x['name' as keyof typeof x] + if (x._id === rid) { + const rname = x.name header = `>${rname}:${flags.start}..${flags.start + seq.length - 1}` break } diff --git a/packages/apollo-cli/src/commands/feature/add-child.ts b/packages/apollo-cli/src/commands/feature/add-child.ts index b89a7c090..9abdd0046 100644 --- a/packages/apollo-cli/src/commands/feature/add-child.ts +++ b/packages/apollo-cli/src/commands/feature/add-child.ts @@ -1,12 +1,11 @@ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ - /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Flags } from '@oclif/core' import { ObjectId } from 'bson' import { Response, fetch } from 'undici' +import { type SerializedAddFeatureChange } from '@apollo-annotation/shared' + import { BaseCommand } from '../../baseCommand.js' import { createFetchErrorMessage, @@ -16,6 +15,7 @@ import { queryApollo, wrapLines, } from '../../utils.js' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' export default class Get extends BaseCommand { static summary = 'Add a child feature (e.g. add an exon to an mRNA)' @@ -108,21 +108,21 @@ export default class Get extends BaseCommand { private async addChild( address: string, accessToken: string, - parentFeature: object, - start: number, - end: number, + parentFeature: AnnotationFeatureSnapshot, + min: number, + max: number, type: string, ): Promise { - const pStart = parentFeature['start' as keyof typeof parentFeature] - const pEnd = parentFeature['end' as keyof typeof parentFeature] - if (start < pStart || end > pEnd) { + const pMin = parentFeature.min + const pMax = parentFeature.max + if (min < pMin || max > pMax) { this.error( - `Error: Child feature coordinates (${start + 1}-${end}) cannot extend beyond parent coordinates (${pStart + 1}-${pEnd})`, + `Error: Child feature coordinates (${min + 1}-${max}) cannot extend beyond parent coordinates (${pMin + 1}-${pMax})`, ) } const res = await queryApollo(address, accessToken, 'refSeqs') const refSeqs = (await res.json()) as object[] - const refSeq = parentFeature['refSeq' as keyof typeof parentFeature] + const { refSeq } = parentFeature let assembly = '' for (const x of refSeqs) { if (x['_id' as keyof typeof x] === refSeq) { @@ -130,18 +130,20 @@ export default class Get extends BaseCommand { break } } - const change = { + const change: SerializedAddFeatureChange = { typeName: 'AddFeatureChange', - changedIds: [parentFeature['_id' as keyof typeof parentFeature]], + // eslint-disable-next-line unicorn/consistent-destructuring + changedIds: [parentFeature._id], assembly, addedFeature: { _id: new ObjectId().toHexString(), refSeq, - start, - end, + min, + max, type, }, - parentFeatureId: parentFeature['_id' as keyof typeof parentFeature], + // eslint-disable-next-line unicorn/consistent-destructuring + parentFeatureId: parentFeature._id, } const url = new URL(localhostToAddress(`${address}/changes`)) const auth = { diff --git a/packages/apollo-cli/src/commands/feature/check.ts b/packages/apollo-cli/src/commands/feature/check.ts index 4a855d389..4257b9932 100644 --- a/packages/apollo-cli/src/commands/feature/check.ts +++ b/packages/apollo-cli/src/commands/feature/check.ts @@ -10,6 +10,10 @@ import { queryApollo, wrapLines, } from '../../utils.js' +import { + ApolloAssemblySnapshot, + CheckResultSnapshot, +} from '@apollo-annotation/mst' export default class Check extends BaseCommand { static summary = 'Get check results' @@ -67,21 +71,24 @@ export default class Check extends BaseCommand { } } - const checks: object[] = await getChecks(access.address, access.accessToken) + const checks: CheckResultSnapshot[] = await getChecks( + access.address, + access.accessToken, + ) const results: object[] = [] for (const chk of checks) { let keep = false if (flags['feature-id'] === undefined) { keep = true - } else { - for (const x of chk['ids' as keyof typeof chk] as string[]) { - if (keepFeatures.has(x)) { + } else if (chk.ids !== undefined) { + for (const x of chk.ids) { + if (x !== undefined && keepFeatures.has(x.toString())) { keep = true break } } } - if (keep && refseqId.has(chk['refSeq' as keyof typeof chk])) { + if (keep && refseqId.has(chk.refSeq)) { results.push(chk) } } @@ -97,9 +104,9 @@ async function keepAssemblies( let keepAssembly: string[] = [] if (assembly === undefined) { const res = await queryApollo(address, accessToken, 'assemblies') - const asm = (await res.json()) as object[] + const asm = (await res.json()) as ApolloAssemblySnapshot[] for (const x of asm) { - keepAssembly.push(x['_id' as keyof typeof x]) + keepAssembly.push(x._id) } } else { const ids = idReader([assembly]) @@ -108,7 +115,10 @@ async function keepAssemblies( return keepAssembly } -async function getChecks(address: string, token: string): Promise { +async function getChecks( + address: string, + token: string, +): Promise { const url = new URL(localhostToAddress(`${address}/checks`)) const auth = { headers: { @@ -124,5 +134,5 @@ async function getChecks(address: string, token: string): Promise { ) throw new Error(errorMessage) } - return (await response.json()) as object[] + return (await response.json()) as CheckResultSnapshot[] } diff --git a/packages/apollo-cli/src/commands/feature/copy.ts b/packages/apollo-cli/src/commands/feature/copy.ts index 85f9b5de2..f7c3b2379 100644 --- a/packages/apollo-cli/src/commands/feature/copy.ts +++ b/packages/apollo-cli/src/commands/feature/copy.ts @@ -11,6 +11,8 @@ import { localhostToAddress, wrapLines, } from '../../utils.js' +import { SerializedAddFeatureChange } from '@apollo-annotation/shared' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' export default class Copy extends BaseCommand { static summary = 'Copy a feature to another location' @@ -73,7 +75,8 @@ export default class Copy extends BaseCommand { ) throw new Error(errorMessage) } - const feature = (await res.json()) as object + const feature: AnnotationFeatureSnapshot = + (await res.json()) as AnnotationFeatureSnapshot let refseqIds: string[] = [] refseqIds = await getRefseqId( access.address, @@ -113,29 +116,26 @@ export default class Copy extends BaseCommand { private async copyFeature( address: string, accessToken: string, - feature: object, + feature: AnnotationFeatureSnapshot, refseq: string, - start: number, + min: number, assembly: string, newId: string, ): Promise { - const featureLen = - feature['end' as keyof typeof feature] - - feature['start' as keyof typeof feature] - const change = { + const featureLen = feature.max - feature.min + + const change: SerializedAddFeatureChange = { typeName: 'AddFeatureChange', changedIds: [newId], assembly, addedFeature: { _id: newId, refSeq: refseq, - start: start - 1, - end: start + featureLen - 1, - type: feature['type' as keyof typeof feature], - attributes: feature['attributes' as keyof typeof feature], - discontinuousLocations: - feature['discontinuousLocations' as keyof typeof feature], - strand: feature['strand' as keyof typeof feature], + min: min - 1, + max: min + featureLen - 1, + type: feature.type, + attributes: feature.attributes, + strand: feature.strand, }, copyFeature: true, allIds: [newId], diff --git a/packages/apollo-cli/src/commands/feature/delete.ts b/packages/apollo-cli/src/commands/feature/delete.ts index 6f2127187..612f7ed8e 100644 --- a/packages/apollo-cli/src/commands/feature/delete.ts +++ b/packages/apollo-cli/src/commands/feature/delete.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ - -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Flags } from '@oclif/core' import { Response, fetch } from 'undici' @@ -12,26 +9,25 @@ import { localhostToAddress, wrapLines, } from '../../utils.js' +import { SerializedDeleteFeatureChange } from '@apollo-annotation/shared' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' async function deleteFeature( address: string, accessToken: string, - feature: object, + feature: AnnotationFeatureSnapshot, ): Promise { - const changeJson = { + const changeJson: SerializedDeleteFeatureChange = { typeName: 'DeleteFeatureChange', - changedIds: [feature], - assembly: feature['assembly' as keyof typeof feature], + changedIds: [feature._id], + assembly: '111222333444555666777888', // Use a placeholder objectId (i.e. some 24 chars) deletedFeature: { - _id: feature['_id' as keyof typeof feature], - refSeq: feature['refSeq' as keyof typeof feature], - type: feature['type' as keyof typeof feature], - start: feature['start' as keyof typeof feature], - end: feature['end' as keyof typeof feature], - discontinuousLocations: - feature['discontinuousLocations' as keyof typeof feature], - score: feature['score' as keyof typeof feature], - attributes: feature['attributes' as keyof typeof feature], + _id: feature._id, + refSeq: feature.refSeq, + type: feature.type, + min: feature.min, + max: feature.max, + attributes: feature.attributes, }, } const url = new URL(localhostToAddress(`${address}/changes`)) @@ -105,9 +101,9 @@ export default class Delete extends BaseCommand { ) throw new Error(errorMessage) } - const feature = JSON.parse(await res.text()) + const feature = JSON.parse(await res.text()) as AnnotationFeatureSnapshot if (flags['dry-run']) { - this.log(feature) + this.log(JSON.stringify(feature, null, 2)) } else { const delFet: Response = await deleteFeature( access.address, diff --git a/packages/apollo-cli/src/commands/feature/edit-attribute.ts b/packages/apollo-cli/src/commands/feature/edit-attribute.ts index b041288f5..fbdd0dd8a 100644 --- a/packages/apollo-cli/src/commands/feature/edit-attribute.ts +++ b/packages/apollo-cli/src/commands/feature/edit-attribute.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Flags } from '@oclif/core' import { Response, fetch } from 'undici' @@ -13,6 +10,8 @@ import { localhostToAddress, wrapLines, } from '../../utils.js' +import { SerializedFeatureAttributeChange } from '@apollo-annotation/shared' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' export default class EditAttibute extends BaseCommand { static summary = 'Add, edit, or view a feature attribute' @@ -88,7 +87,12 @@ export default class EditAttibute extends BaseCommand { ) throw new Error(errorMessage) } - const featureJson = JSON.parse(await response.text()) + const featureJson = JSON.parse( + await response.text(), + ) as AnnotationFeatureSnapshot + if (featureJson.attributes === undefined) { + featureJson.attributes = {} + } if (flags.value === undefined && !flags.delete) { this.log(JSON.stringify(featureJson.attributes[flags.attribute])) @@ -105,15 +109,23 @@ export default class EditAttibute extends BaseCommand { const assembly = await getAssemblyFromRefseq( access.address, access.accessToken, - featureJson['refSeq' as keyof typeof featureJson], + featureJson.refSeq, ) - const changeJson = { + const attrs: Record = {} + for (const [key, val] of Object.entries(featureJson.attributes)) { + if (!val) { + continue + } + attrs[key] = [...val] + } + + const changeJson: SerializedFeatureAttributeChange = { typeName: 'FeatureAttributeChange', changedIds: [featureId], assembly, featureId, - attributes: featureJson.attributes, + attributes: attrs, } const url = new URL(localhostToAddress(`${access.address}/changes`)) diff --git a/packages/apollo-cli/src/commands/feature/edit-coords.ts b/packages/apollo-cli/src/commands/feature/edit-coords.ts index 8d5d75eb0..9f8f5102a 100644 --- a/packages/apollo-cli/src/commands/feature/edit-coords.ts +++ b/packages/apollo-cli/src/commands/feature/edit-coords.ts @@ -1,9 +1,12 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Flags } from '@oclif/core' import { Response, fetch } from 'undici' +import { + SerializedLocationStartChange, + type SerializedLocationEndChange, +} from '@apollo-annotation/shared' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' + import { BaseCommand } from '../../baseCommand.js' import { createFetchErrorMessage, @@ -94,23 +97,25 @@ export default class Get extends BaseCommand { ) throw new Error(errorMessage) } - const featureJson = JSON.parse(await res.text()) + const featureJson = JSON.parse( + await res.text(), + ) as AnnotationFeatureSnapshot const assembly = await getAssemblyFromRefseq( access.address, access.accessToken, - featureJson['refSeq' as keyof typeof featureJson], + featureJson.refSeq, ) - const currentEnd = featureJson['end' as keyof typeof featureJson] + const currentEnd = featureJson.max let edit = ['Start', 'End'] if (flags.start !== undefined && flags.start > currentEnd) { - // Edit End first so you avoid an intermediate start > end + // Edit End (Max) first so you avoid an intermediate start > end edit = ['End', 'Start'] } for (const coord of edit) { - const currentStart = featureJson['start' as keyof typeof featureJson] + const currentStart = featureJson.min if ( coord === 'Start' && (flags.start === undefined || flags.start === currentStart) @@ -123,20 +128,35 @@ export default class Get extends BaseCommand { continue } - const changeJson = { - typeName: `Location${coord}Change`, - changedIds: [featureId], - assembly, - featureId, - [`old${coord}`]: - featureJson[coord.toLowerCase() as keyof typeof featureJson], - [`new${coord}`]: flags[coord.toLowerCase() as keyof typeof flags], + let body: SerializedLocationStartChange | SerializedLocationEndChange + if (coord === 'Start' && flags.start !== undefined) { + const oldCoord = featureJson.min + body = { + typeName: 'LocationStartChange', + changedIds: [featureId], + assembly, + featureId, + ['oldStart']: oldCoord, + ['newStart']: flags.start, + } + } else if (coord === 'End' && flags.end !== undefined) { + const oldCoord = featureJson.max + body = { + typeName: 'LocationEndChange', + changedIds: [featureId], + assembly, + featureId, + ['oldEnd']: oldCoord, + ['newEnd']: flags.end, + } + } else { + throw new Error(`Unexpected coordinate name: "${coord}"`) } const url = new URL(localhostToAddress(`${access.address}/changes`)) const auth = { method: 'POST', - body: JSON.stringify(changeJson), + body: JSON.stringify(body), headers: { authorization: `Bearer ${access.accessToken}`, 'Content-Type': 'application/json', diff --git a/packages/apollo-cli/src/commands/feature/edit-type.ts b/packages/apollo-cli/src/commands/feature/edit-type.ts index 6ef95b7e1..733b2a183 100644 --- a/packages/apollo-cli/src/commands/feature/edit-type.ts +++ b/packages/apollo-cli/src/commands/feature/edit-type.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Flags } from '@oclif/core' import { Response, fetch } from 'undici' @@ -13,6 +10,8 @@ import { localhostToAddress, wrapLines, } from '../../utils.js' +import { SerializedTypeChange } from '@apollo-annotation/shared' +import { AnnotationFeatureSnapshot } from '@apollo-annotation/mst' export default class Get extends BaseCommand { static summary = 'Edit or view feature type' @@ -58,9 +57,11 @@ export default class Get extends BaseCommand { ) throw new Error(errorMessage) } - const featureJson = JSON.parse(await response.text()) + const featureJson = JSON.parse( + await response.text(), + ) as AnnotationFeatureSnapshot - const currentType = featureJson['type' as keyof typeof featureJson] + const currentType = featureJson.type if (flags.type === undefined) { this.log(currentType) return @@ -75,10 +76,10 @@ export default class Get extends BaseCommand { const assembly = await getAssemblyFromRefseq( access.address, access.accessToken, - featureJson['refSeq' as keyof typeof featureJson], + featureJson.refSeq, ) - const changeJson = { + const changeJson: SerializedTypeChange = { typeName: 'TypeChange', changedIds: [featureId], assembly, diff --git a/packages/apollo-cli/src/commands/feature/search.ts b/packages/apollo-cli/src/commands/feature/search.ts index 00291b46b..c7ab586a9 100644 --- a/packages/apollo-cli/src/commands/feature/search.ts +++ b/packages/apollo-cli/src/commands/feature/search.ts @@ -11,6 +11,7 @@ import { queryApollo, wrapLines, } from '../../utils.js' +import { ApolloAssemblySnapshot } from '@apollo-annotation/mst' async function searchFeatures( address: string, @@ -105,8 +106,8 @@ export default class Search extends BaseCommand { access.accessToken, 'assemblies', ) - for (const x of (await asm.json()) as object[]) { - assemblyIds.push(x['_id' as keyof typeof x]) + for (const x of (await asm.json()) as ApolloAssemblySnapshot[]) { + assemblyIds.push(x._id) } } else { const assembly = idReader(flags.assembly) diff --git a/packages/apollo-cli/src/commands/refseq/add-alias.ts b/packages/apollo-cli/src/commands/refseq/add-alias.ts index 2f2f43a16..ddbea2ca7 100644 --- a/packages/apollo-cli/src/commands/refseq/add-alias.ts +++ b/packages/apollo-cli/src/commands/refseq/add-alias.ts @@ -10,6 +10,8 @@ import { } from '../../utils.js' import { ConfigError } from '../../ApolloConf.js' +import { type SerializedRefSeqAliasesChange } from '@apollo-annotation/shared' + export default class AddRefNameAlias extends BaseCommand< typeof AddRefNameAlias > { @@ -71,9 +73,9 @@ export default class AddRefNameAlias extends BaseCommand< this.error(`Assembly ${flags.assembly} not found`) } - const change = { + const change: SerializedRefSeqAliasesChange = { typeName: 'AddRefSeqAliasesChange', - assembly: assemblyId, + assembly: assemblyId as string, refSeqAliases: refNameAliases, } diff --git a/packages/apollo-cli/src/utils.ts b/packages/apollo-cli/src/utils.ts index 126a819d5..8dc514399 100644 --- a/packages/apollo-cli/src/utils.ts +++ b/packages/apollo-cli/src/utils.ts @@ -15,10 +15,16 @@ import { pipeline, } from 'node:stream' +import { type SerializedDeleteAssemblyChange } from '@apollo-annotation/shared' + import { SingleBar } from 'cli-progress' import { Agent, RequestInit, Response, fetch } from 'undici' import { ApolloConf, ConfigError } from './ApolloConf.js' +import { + ApolloAssemblySnapshot, + CheckResultSnapshot, +} from '@apollo-annotation/mst' const CONFIG_PATH = path.resolve(os.homedir(), '.clirc') export const CLI_SERVER_ADDRESS = 'http://127.0.0.1:5657' @@ -83,7 +89,7 @@ export async function deleteAssembly( accessToken: string, assemblyId: string, ): Promise { - const body = { + const body: SerializedDeleteAssemblyChange = { typeName: 'DeleteAssemblyChange', assembly: assemblyId, } @@ -123,10 +129,10 @@ export async function getAssembly( return {} } const res: Response = await queryApollo(address, accessToken, 'assemblies') - const assemblies: object[] = (await res.json()) as object[] + const assemblies = (await res.json()) as ApolloAssemblySnapshot[] let assemblyObj = {} for (const x of assemblies) { - if (x['_id' as keyof typeof x] === assemblyId[0]) { + if (x._id === assemblyId[0]) { assemblyObj = JSON.parse(JSON.stringify(x)) break } @@ -191,11 +197,11 @@ async function checkNameToIdDict( accessToken: string, ): Promise> { const asm = await queryApollo(address, accessToken, 'checks/types') - const ja = (await asm.json()) as object[] + const ja = (await asm.json()) as CheckResultSnapshot[] // Not sure if CheckResultSnapshot is the right interface const nameToId: Record = {} for (const x of ja) { - const name: string = x['name' as keyof typeof x] - nameToId[name] = x['_id' as keyof typeof x] + const { _id, name } = x // x['name' as keyof typeof x] + nameToId[name] = _id // x['_id' as keyof typeof x] } return nameToId } diff --git a/packages/apollo-cli/test/README.md b/packages/apollo-cli/test/README.md new file mode 100644 index 000000000..a61337320 --- /dev/null +++ b/packages/apollo-cli/test/README.md @@ -0,0 +1,48 @@ + + +- [Setup](#setup) +- [Run CLI tests](#run-cli-tests) + + + +These are instructions to execute the CLI tests. + +# Setup + +The Apollo server must be configured to accept root user access. For this edit +`packages/apollo-collaboration-server/.development.env` as: + +``` +sed -i'' 's/# ALLOW_ROOT_USER=false/ALLOW_ROOT_USER=true/; + s/# ROOT_USER_NAME=root/ROOT_USER_NAME=admin/; + s/# ROOT_USER_PASSWORD=password/ROOT_USER_PASSWORD=pass/' packages/apollo-collaboration-server/.development.env +``` + +then restart the collaboration server to make changes effective. + +# Run CLI tests + +Change to Apollo3/packages/apollo-cli and make this script executable: + +``` +chmod a+x ./test/test.py +``` + +- To run all tests: + +``` +./test/test.py +``` + +- To run only one test, e.g. `testAddAssemblyFromGff`: + +``` +./test/test.py TestCLI.testAddAssemblyFromGff +``` + +If you edit the `test.py`, you may want to re-format it with +[black](https://black.readthedocs.io/en/stable/index.html): + +``` +black test/test.py +``` diff --git a/packages/apollo-cli/test/test.py b/packages/apollo-cli/test/test.py index 82c53033f..3c53b0d88 100755 --- a/packages/apollo-cli/test/test.py +++ b/packages/apollo-cli/test/test.py @@ -1,16 +1,5 @@ #!/usr/bin/env python3 -"""USAGE: Change to Apollo3/packages/apollo-cli, make this script executable: - - chmod a+x ./test/test.py - -and run it: - - ./test/test.py - ./test/test.py TestCLI.testAddAssemblyFromGff # Run only this test -""" - -import argparse import json import os import sys @@ -311,11 +300,14 @@ def testEditFeatureFromJson(self): out = json.loads(p.stdout)[0] self.assertEqual(out["type"], "BAC") + p = shell(f"{apollo} assembly get -a vv1") + asm_id = json.loads(p.stdout)[0]["_id"] + req = [ { "typeName": "TypeChange", "changedIds": [out["_id"]], - "assembly": out["refSeq"]["assembly"], + "assembly": asm_id, "featureId": out["_id"], "oldType": "BAC", "newType": "G_quartet", @@ -394,16 +386,16 @@ def testEditFeatureCoords(self): f"""{apollo} feature get {P} -r {refseq} | jq '.[] | select(._id == "{contig_id}")'""" ) contig = json.loads(p.stdout) - self.assertEqual(contig["start"], 20 - 1) - self.assertEqual(contig["end"], 100) + self.assertEqual(contig["min"], 20 - 1) + self.assertEqual(contig["max"], 100) p = shell(f"{apollo} feature edit-coords {P} -i {contig_id} -s 1 -e 1") p = shell( f"""{apollo} feature get {P} -r {refseq} | jq '.[] | select(._id == "{contig_id}")'""" ) contig = json.loads(p.stdout) - self.assertEqual(contig["start"], 0) - self.assertEqual(contig["end"], 1) + self.assertEqual(contig["min"], 0) + self.assertEqual(contig["max"], 1) p = shell(f"{apollo} feature edit-coords {P} -i {contig_id} -s 0", strict=False) self.assertEqual(2, p.returncode) @@ -420,7 +412,12 @@ def testEditFeatureCoords(self): ## Edit a feature by extending beyond the boundary of its parent and ## check it throws a meaningful error message - mrna = [x for x in features if x["gffId"] == "EDEN"][0]["children"] + eden_gene = None + for x in features: + if x["type"] == "gene" and x["attributes"]["gff_name"] == ["EDEN"]: + eden_gene = x + self.assertTrue(eden_gene is not None) + mrna = eden_gene["children"] mrna_id = list(mrna.keys())[0] p = shell(f"{apollo} feature edit-coords {P} -i {mrna_id} -s 1", strict=False) self.assertTrue(p.returncode != 0) @@ -579,8 +576,8 @@ def testAddChildFeatures(self): shell(f"{apollo} feature add-child {P} -i {fid} -s 10 -e 20 -t contig_read") p = shell(f"{apollo} feature search {P} -a vv1 -t contig_read") self.assertTrue("contig_read" in p.stdout) - self.assertTrue('"start": 9' in p.stdout) - self.assertTrue('"end": 20' in p.stdout) + self.assertTrue('"min": 9' in p.stdout) + self.assertTrue('"max": 20' in p.stdout) p = shell( f"{apollo} feature add-child {P} -i {fid} -s 10 -e 2000 -t contig_read", @@ -639,8 +636,8 @@ def testCopyFeature(self): shell(f"{apollo} feature copy {P} -i {fid} -r ctgA -a dest -s 1") p = shell(f"{apollo} feature search {P} -a dest -t contig") out = json.loads(p.stdout)[0] - self.assertEqual(out["start"], 0) - self.assertEqual(out["end"], 50) + self.assertEqual(out["min"], 0) + self.assertEqual(out["max"], 50) # RefSeq id does not need assembly p = shell(f"{apollo} refseq get {P} -a dest2") @@ -649,8 +646,8 @@ def testCopyFeature(self): p = shell(f"{apollo} feature search {P} -a dest2 -t contig") out = json.loads(p.stdout)[0] - self.assertEqual(out["start"], 1) - self.assertEqual(out["end"], 51) + self.assertEqual(out["min"], 1) + self.assertEqual(out["max"], 51) # Copy to same assembly shell(f"{apollo} feature copy {P} -i {fid} -r ctgA -a source -s 10") @@ -821,8 +818,16 @@ def testFeatureChecks(self): p = shell(f"{apollo} feature get {P} -a v1") ff = json.loads(p.stdout) - g1 = [x for x in ff if x["gffId"] == "MyGene"][0] - g2 = [x for x in ff if x["gffId"] == "AnotherGene"][0] + g1 = [ + x + for x in ff + if x["type"] == "gene" and x["attributes"]["gff_id"] == ["MyGene"] + ][0] + g2 = [ + x + for x in ff + if x["type"] == "gene" and x["attributes"]["gff_id"] == ["AnotherGene"] + ][0] shell(f"{apollo} feature edit-coords {P} -i {g1['_id']} -e 201") shell(f"{apollo} feature edit-coords {P} -i {g2['_id']} -e 251") @@ -913,25 +918,40 @@ def testInvalidAccess(self): def testRefNameAliasConfiguration(self): shell(f"{apollo} assembly add-gff {P} -i test_data/tiny.fasta.gff3 -a asm1 -f") - + p = shell(f"{apollo} assembly get {P} -a asm1") self.assertTrue("asm1" in p.stdout) self.assertTrue("asm2" not in p.stdout) asm_id = json.loads(p.stdout)[0]["_id"] - p = shell(f"{apollo} refseq add-alias {P} -i test_data/alias.txt -a asm2", strict=False) + p = shell( + f"{apollo} refseq add-alias {P} -i test_data/alias.txt -a asm2", + strict=False, + ) self.assertTrue("Assembly asm2 not found" in p.stderr) - - p = shell(f"{apollo} refseq add-alias {P} -i test_data/alias.txt -a asm1", strict=False) - self.assertTrue("Reference name aliases added successfully to assembly asm1" in p.stdout) - + + p = shell( + f"{apollo} refseq add-alias {P} -i test_data/alias.txt -a asm1", + strict=False, + ) + self.assertTrue( + "Reference name aliases added successfully to assembly asm1" in p.stdout + ) + p = shell(f"{apollo} refseq get {P}") refseq = json.loads(p.stdout.strip()) vv1ref = [x for x in refseq if x["assembly"] == asm_id] refname_aliases = {x["name"]: x["aliases"] for x in vv1ref} - self.assertTrue(all(alias in refname_aliases.get("ctgA", []) for alias in ["ctga", "CTGA"])) - self.assertTrue(all(alias in refname_aliases.get("ctgB", []) for alias in ["ctgb", "CTGB"])) - self.assertTrue(all(alias in refname_aliases.get("ctgC", []) for alias in ["ctgc", "CTGC"])) + self.assertTrue( + all(alias in refname_aliases.get("ctgA", []) for alias in ["ctga", "CTGA"]) + ) + self.assertTrue( + all(alias in refname_aliases.get("ctgB", []) for alias in ["ctgb", "CTGB"]) + ) + self.assertTrue( + all(alias in refname_aliases.get("ctgC", []) for alias in ["ctgc", "CTGC"]) + ) + if __name__ == "__main__": unittest.main() diff --git a/packages/apollo-cli/test_data/gene_representations.gff3 b/packages/apollo-cli/test_data/gene_representations.gff3 new file mode 100644 index 000000000..e3ebe11c0 --- /dev/null +++ b/packages/apollo-cli/test_data/gene_representations.gff3 @@ -0,0 +1,1839 @@ +##gff-version 3 +# example 1 +chr1 . gene 1000 9000 . + . ID=gene10001;Name=EDEN +chr1 . TF_binding_site 1000 1012 . + . ID=tfbs10001;Parent=gene10001 +chr1 . mRNA 1050 9000 . + . ID=mRNA10001;Parent=gene10001;Name=EDEN.1 +chr1 . mRNA 1050 9000 . + . ID=mRNA10002;Parent=gene10001;Name=EDEN.2 +chr1 . mRNA 1300 9000 . + . ID=mRNA10003;Parent=gene10001;Name=EDEN.3 +chr1 . exon 1300 1500 . + . ID=exon10001;Parent=mRNA10003 +chr1 . exon 1050 1500 . + . ID=exon10002;Parent=mRNA10001,mRNA10002 +chr1 . exon 3000 3902 . + . ID=exon10003;Parent=mRNA10001,mRNA10003 +chr1 . exon 5000 5500 . + . ID=exon10004;Parent=mRNA10001,mRNA10002,mRNA10003 +chr1 . exon 7000 9000 . + . ID=exon10005;Parent=mRNA10001,mRNA10002,mRNA10003 +chr1 . CDS 1201 1500 . + 0 ID=cds10001;Parent=mRNA10001;Name=edenprotein.1 +chr1 . CDS 3000 3902 . + 0 ID=cds10001;Parent=mRNA10001;Name=edenprotein.1 +chr1 . CDS 5000 5500 . + 0 ID=cds10001;Parent=mRNA10001;Name=edenprotein.1 +chr1 . CDS 7000 7600 . + 0 ID=cds10001;Parent=mRNA10001;Name=edenprotein.1 +chr1 . CDS 1201 1500 . + 0 ID=cds10002;Parent=mRNA10002;Name=edenprotein.2 +chr1 . CDS 5000 5500 . + 0 ID=cds10002;Parent=mRNA10002;Name=edenprotein.2 +chr1 . CDS 7000 7600 . + 0 ID=cds10002;Parent=mRNA10002;Name=edenprotein.2 +chr1 . CDS 3301 3902 . + 0 ID=cds10003;Parent=mRNA10003;Name=edenprotein.3 +chr1 . CDS 5000 5500 . + 1 ID=cds10003;Parent=mRNA10003;Name=edenprotein.3 +chr1 . CDS 7000 7600 . + 1 ID=cds10003;Parent=mRNA10003;Name=edenprotein.3 +chr1 . CDS 3391 3902 . + 0 ID=cds10004;Parent=mRNA10003;Name=edenprotein.4 +chr1 . CDS 5000 5500 . + 1 ID=cds10004;Parent=mRNA10003;Name=edenprotein.4 +chr1 . CDS 7000 7600 . + 1 ID=cds10004;Parent=mRNA10003;Name=edenprotein.4 +# example 2 +chr1 . gene 11000 19000 . + . ID=gene20001;Name=EDEN +chr1 . mRNA 11050 19000 . + . ID=mRNA20001;Parent=gene20001;Name=EDEN.1 +chr1 . mRNA 11050 19000 . + . ID=mRNA20002;Parent=gene20001;Name=EDEN.2 +chr1 . mRNA 11300 19000 . + . ID=mRNA20003;Parent=gene20001;Name=EDEN.3 +chr1 . exon 11050 11500 . + . ID=exon20001;Parent=mRNA20001 +chr1 . exon 11050 11500 . + . ID=exon20002;Parent=mRNA20002 +chr1 . exon 11300 11500 . + . ID=exon20003;Parent=mRNA20003 +chr1 . exon 13000 13902 . + . ID=exon20004;Parent=mRNA20001 +chr1 . exon 13000 13902 . + . ID=exon20005;Parent=mRNA20003 +chr1 . exon 15000 15500 . + . ID=exon20006;Parent=mRNA20001 +chr1 . exon 15000 15500 . + . ID=exon20007;Parent=mRNA20002 +chr1 . exon 15000 15500 . + . ID=exon20008;Parent=mRNA20003 +chr1 . exon 17000 19000 . + . ID=exon20009;Parent=mRNA20001 +chr1 . exon 17000 19000 . + . ID=exon20010;Parent=mRNA20002 +chr1 . exon 17000 19000 . + . ID=exon20011;Parent=mRNA20003 +chr1 . CDS 11201 11500 . + 0 ID=cds20001;Parent=mRNA20001;Name=edenprotein.1 +chr1 . CDS 13000 13902 . + 0 ID=cds20001;Parent=mRNA20001;Name=edenprotein.1 +chr1 . CDS 15000 15500 . + 0 ID=cds20001;Parent=mRNA20001;Name=edenprotein.1 +chr1 . CDS 17000 17600 . + 0 ID=cds20001;Parent=mRNA20001;Name=edenprotein.1 +chr1 . CDS 11201 11500 . + 0 ID=cds20002;Parent=mRNA20002;Name=edenprotein.2 +chr1 . CDS 15000 15500 . + 0 ID=cds20002;Parent=mRNA20002;Name=edenprotein.2 +chr1 . CDS 17000 17600 . + 0 ID=cds20002;Parent=mRNA20002;Name=edenprotein.2 +chr1 . CDS 13301 13902 . + 0 ID=cds20003;Parent=mRNA20003;Name=edenprotein.3 +chr1 . CDS 15000 15500 . + 1 ID=cds20003;Parent=mRNA20003;Name=edenprotein.3 +chr1 . CDS 17000 17600 . + 1 ID=cds20003;Parent=mRNA20003;Name=edenprotein.3 +chr1 . CDS 13391 13902 . + 0 ID=cds20004;Parent=mRNA20003;Name=edenprotein.4 +chr1 . CDS 15000 15500 . + 1 ID=cds20004;Parent=mRNA20003;Name=edenprotein.4 +chr1 . CDS 17000 17600 . + 1 ID=cds20004;Parent=mRNA20003;Name=edenprotein.4 +# example 3 +chr1 . gene 21000 29000 . + . ID=gene30001;Name=EDEN +chr1 . mRNA 21050 29000 . + . ID=mRNA30001;Parent=gene30001;Name=EDEN.1 +chr1 . mRNA 21050 29000 . + . ID=mRNA30002;Parent=gene30001;Name=EDEN.2 +chr1 . mRNA 21300 29000 . + . ID=mRNA30003;Parent=gene30001;Name=EDEN.3 +chr1 . exon 21050 21500 . + . ID=exon30001;Parent=mRNA30001 +chr1 . exon 21050 21500 . + . ID=exon30002;Parent=mRNA30002 +chr1 . exon 21300 21500 . + . ID=exon30003;Parent=mRNA30003 +chr1 . exon 23000 23902 . + . ID=exon30004;Parent=mRNA30001 +chr1 . exon 23000 23902 . + . ID=exon30005;Parent=mRNA30003 +chr1 . exon 25000 25500 . + . ID=exon30006;Parent=mRNA30001 +chr1 . exon 25000 25500 . + . ID=exon30007;Parent=mRNA30002 +chr1 . exon 25000 25500 . + . ID=exon30008;Parent=mRNA30003 +chr1 . exon 27000 29000 . + . ID=exon30009;Parent=mRNA30001 +chr1 . exon 27000 29000 . + . ID=exon30010;Parent=mRNA30002 +chr1 . exon 27000 29000 . + . ID=exon30011;Parent=mRNA30003 +chr1 . CDS 21201 21500 . + 0 ID=cds30001;Parent=mRNA30001;Name=edenprotein.1 +chr1 . CDS 23000 23902 . + 0 ID=cds30002;Parent=mRNA30001;Name=edenprotein.1 +chr1 . CDS 25000 25500 . + 0 ID=cds30003;Parent=mRNA30001;Name=edenprotein.1 +chr1 . CDS 27000 27600 . + 0 ID=cds30004;Parent=mRNA30001;Name=edenprotein.1 +chr1 . CDS 21201 21500 . + 0 ID=cds30005;Parent=mRNA30002;Name=edenprotein.2 +chr1 . CDS 25000 25500 . + 0 ID=cds30006;Parent=mRNA30002;Name=edenprotein.2 +chr1 . CDS 27000 27600 . + 0 ID=cds30007;Parent=mRNA30002;Name=edenprotein.2 +chr1 . CDS 23301 23902 . + 0 ID=cds30008;Parent=mRNA30003;Name=edenprotein.3 +chr1 . CDS 25000 25500 . + 1 ID=cds30009;Parent=mRNA30003;Name=edenprotein.3 +chr1 . CDS 27000 27600 . + 1 ID=cds30010;Parent=mRNA30003;Name=edenprotein.3 +chr1 . CDS 23391 23902 . + 0 ID=cds30011;Parent=mRNA30003;Name=edenprotein.4 +chr1 . CDS 25000 25500 . + 1 ID=cds30012;Parent=mRNA30003;Name=edenprotein.4 +chr1 . CDS 27000 27600 . + 1 ID=cds30013;Parent=mRNA30003;Name=edenprotein.4 +# example 4 +chr1 . gene 31000 39000 . + . ID=gene40001;Name=EDEN +chr1 . mRNA 31050 39000 . + . ID=mRNA40001;Parent=gene40001;Name=EDEN.1 +chr1 . mRNA 31050 39000 . + . ID=mRNA40002;Parent=gene40001;Name=EDEN.2 +chr1 . mRNA 31300 39000 . + . ID=mRNA40003;Parent=gene40001;Name=EDEN.3 +chr1 . exon 31050 31500 . + . ID=exon40001;Parent=mRNA40001,mRNA40002 +chr1 . exon 31300 31500 . + . ID=exon40002;Parent=mRNA40003 +chr1 . exon 33000 33902 . + . ID=exon40003;Parent=mRNA40001,mRNA40003 +chr1 . exon 35000 35500 . + . ID=exon40004;Parent=mRNA40001,mRNA40002,mRNA40003 +chr1 . exon 37000 39000 . + . ID=exon40005;Parent=mRNA40001,mRNA40002,mRNA40003 +chr1 . five_prime_UTR 31050 31200 . + . ID=five_prime_UTR40001;Parent=mRNA40001,mRNA40002 +chr1 . five_prime_UTR 31300 31500 . + . ID=five_prime_UTR40002;Parent=mRNA40003 +chr1 . five_prime_UTR 33000 33300 . + . ID=five_prime_UTR40003;Parent=mRNA40003 +chr1 . five_prime_UTR 33000 33390 . + . ID=five_prime_UTR40004;Parent=mRNA40003 +chr1 . five_prime_UTR 33000 33390 . + . ID=five_prime_UTR40004;Parent=mRNA40003 +chr1 . three_prime_UTR 37601 39000 . + . ID=three_prime_UTR40001;Parent=mRNA40001,mRNA40002,mRNA40003 +chr1 . CDS 31201 31500 . + 0 ID=cds40001;Parent=mRNA40001;Name=edenprotein.1 +chr1 . CDS 33000 33902 . + 0 ID=cds40001;Parent=mRNA40001;Name=edenprotein.1 +chr1 . CDS 35000 35500 . + 0 ID=cds40001;Parent=mRNA40001;Name=edenprotein.1 +chr1 . CDS 37000 37600 . + 0 ID=cds40001;Parent=mRNA40001;Name=edenprotein.1 +chr1 . CDS 31201 31500 . + 0 ID=cds40002;Parent=mRNA40002;Name=edenprotein.2 +chr1 . CDS 35000 35500 . + 0 ID=cds40002;Parent=mRNA40002;Name=edenprotein.2 +chr1 . CDS 37000 37600 . + 0 ID=cds40002;Parent=mRNA40002;Name=edenprotein.2 +chr1 . CDS 33301 33902 . + 0 ID=cds40003;Parent=mRNA40003;Name=edenprotein.3 +chr1 . CDS 35000 35500 . + 1 ID=cds40003;Parent=mRNA40003;Name=edenprotein.3 +chr1 . CDS 37000 37600 . + 1 ID=cds40003;Parent=mRNA40003;Name=edenprotein.3 +chr1 . CDS 33391 33902 . + 0 ID=cds40004;Parent=mRNA40003;Name=edenprotein.4 +chr1 . CDS 35000 35500 . + 1 ID=cds40004;Parent=mRNA40003;Name=edenprotein.4 +chr1 . CDS 37000 37600 . + 1 ID=cds40004;Parent=mRNA40003;Name=edenprotein.4 +# example 5 +chr1 . gene 41000 49000 . + . ID=gene50001;Name=EDEN +chr1 . mRNA 41050 49000 . + . ID=mRNA50001;Parent=gene50001;Name=EDEN.1 +chr1 . mRNA 41050 49000 . + . ID=mRNA50002;Parent=gene50001;Name=EDEN.2 +chr1 . mRNA 41300 49000 . + . ID=mRNA50003;Parent=gene50001;Name=EDEN.3 +chr1 . exon 41050 41500 . + . ID=exon50001;Parent=mRNA50001,mRNA50002 +chr1 . exon 41300 41500 . + . ID=exon50002;Parent=mRNA50003 +chr1 . exon 43000 43902 . + . ID=exon50003;Parent=mRNA50001,mRNA50003 +chr1 . exon 45000 45500 . + . ID=exon50004;Parent=mRNA50001,mRNA50002,mRNA50003 +chr1 . exon 47000 49000 . + . ID=exon50005;Parent=mRNA50001,mRNA50002,mRNA50003 +chr1 . five_prime_UTR 41050 41200 . + . ID=five_prime_UTR50001;Parent=mRNA50001,mRNA50002 +chr1 . five_prime_UTR 41300 41500 . + . ID=five_prime_UTR50002;Parent=mRNA50003 +chr1 . five_prime_UTR 43000 43300 . + . ID=five_prime_UTR50003;Parent=mRNA50003 +chr1 . five_prime_UTR 43000 43390 . + . ID=five_prime_UTR50004;Parent=mRNA50003 +chr1 . five_prime_UTR 43000 43390 . + . ID=five_prime_UTR50004;Parent=mRNA50003 +chr1 . three_prime_UTR 47601 49000 . + . ID=three_prime_UTR50001;Parent=mRNA50001,mRNA50002,mRNA50003 +chr1 . CDS 41201 41500 . + 0 ID=cds50001;Parent=mRNA50001;Name=edenprotein.1 +chr1 . CDS 43000 43902 . + 0 ID=cds50001;Parent=mRNA50001;Name=edenprotein.1 +chr1 . CDS 45000 45500 . + 0 ID=cds50001;Parent=mRNA50001;Name=edenprotein.1 +chr1 . CDS 47000 47600 . + 0 ID=cds50001;Parent=mRNA50001;Name=edenprotein.1 +chr1 . CDS 41201 41500 . + 0 ID=cds50002;Parent=mRNA50002;Name=edenprotein.2 +chr1 . CDS 45000 45500 . + 0 ID=cds50002;Parent=mRNA50002;Name=edenprotein.2 +chr1 . CDS 47000 47600 . + 0 ID=cds50002;Parent=mRNA50002;Name=edenprotein.2 +chr1 . CDS 43301 43902 . + 0 ID=cds50003;Parent=mRNA50003;Name=edenprotein.3 +chr1 . CDS 45000 45500 . + 1 ID=cds50003;Parent=mRNA50003;Name=edenprotein.3 +chr1 . CDS 47000 47600 . + 1 ID=cds50003;Parent=mRNA50003;Name=edenprotein.3 +chr1 . CDS 43391 43902 . + 0 ID=cds50004;Parent=mRNA50003;Name=edenprotein.4 +chr1 . CDS 45000 45500 . + 1 ID=cds50004;Parent=mRNA50003;Name=edenprotein.4 +chr1 . CDS 47000 47600 . + 1 ID=cds50004;Parent=mRNA50003;Name=edenprotein.4 +# example 6 +chr1 . gene 51000 59000 . + . ID=gene60001;Name=EDEN +chr1 . mRNA 51050 59000 . + . ID=mRNA60001;Parent=gene60001;Name=EDEN.1 +chr1 . mRNA 51050 59000 . + . ID=mRNA60002;Parent=gene60001;Name=EDEN.2 +chr1 . mRNA 51300 59000 . + . ID=mRNA60003;Parent=gene60001;Name=EDEN.3 +chr1 . exon 51050 51500 . + . ID=exon60001;Parent=mRNA60001,mRNA60002 +chr1 . exon 51300 51500 . + . ID=exon60002;Parent=mRNA60003 +chr1 . exon 53000 53902 . + . ID=exon60003;Parent=mRNA60001,mRNA60003 +chr1 . exon 55000 55500 . + . ID=exon60004;Parent=mRNA60001,mRNA60002,mRNA60003 +chr1 . exon 57000 59000 . + . ID=exon60005;Parent=mRNA60001,mRNA60002,mRNA60003 +chr1 . five_prime_UTR 51050 51200 . + . ID=five_prime_UTR60001;Parent=mRNA60001,mRNA60002 +chr1 . five_prime_UTR 51300 51500 . + . ID=five_prime_UTR60002;Parent=mRNA60003 +chr1 . five_prime_UTR 53000 53300 . + . ID=five_prime_UTR60003;Parent=mRNA60003 +chr1 . five_prime_UTR 53000 53390 . + . ID=five_prime_UTR60004;Parent=mRNA60003 +chr1 . five_prime_UTR 53000 53390 . + . ID=five_prime_UTR60004;Parent=mRNA60003 +chr1 . three_prime_UTR 57601 59000 . + . ID=three_prime_UTR60001;Parent=mRNA60001,mRNA60002,mRNA60003 +chr1 . CDS 51201 51500 . + 0 ID=cds60001;Parent=mRNA60001;Name=edenprotein.1 +chr1 . CDS 53000 53902 . + 0 ID=cds60001;Parent=mRNA60001;Name=edenprotein.1 +chr1 . CDS 55000 55500 . + 0 ID=cds60001;Parent=mRNA60001;Name=edenprotein.1 +chr1 . CDS 57000 57600 . + 0 ID=cds60001;Parent=mRNA60001;Name=edenprotein.1 +chr1 . CDS 51201 51500 . + 0 ID=cds60002;Parent=mRNA60002;Name=edenprotein.2 +chr1 . CDS 55000 55500 . + 0 ID=cds60002;Parent=mRNA60002;Name=edenprotein.2 +chr1 . CDS 57000 57600 . + 0 ID=cds60002;Parent=mRNA60002;Name=edenprotein.2 +chr1 . CDS 53301 53902 . + 0 ID=cds60003;Parent=mRNA60003;Name=edenprotein.3 +chr1 . CDS 55000 55500 . + 1 ID=cds60003;Parent=mRNA60003;Name=edenprotein.3 +chr1 . CDS 57000 57600 . + 1 ID=cds60003;Parent=mRNA60003;Name=edenprotein.3 +chr1 . CDS 53391 53902 . + 0 ID=cds60004;Parent=mRNA60003;Name=edenprotein.4 +chr1 . CDS 55000 55500 . + 1 ID=cds60004;Parent=mRNA60003;Name=edenprotein.4 +chr1 . CDS 57000 57600 . + 1 ID=cds60004;Parent=mRNA60003;Name=edenprotein.4 +##FASTA +>chr1 +cattgttgcggagttgaacaACGGCATTAGGAACACTTCCGTCTCtcacttttatacgat +tatgattggttctttagccttggtttagattggtagtagtagcggcgctaatgctacctg +aattgagaactcgagcgggggctaggcaaattctgattcagcctgacttctcttggaacc +ctgcccataaatcaaagggttagtgcggccaaaacgttggacaacggtattagaagacca +acctgaccaccaaaccgtcaattaaccggtatcttctcggaaacggcggttctctcctag +atagcgatctgtggtctcaccatgcaatttaaacaggtgagtaaagattgctacaaatac +gagactagctgtcaccagatgctgttcatctgttggctccttggtcgctccgttgtaccc +aggctactttgaaagagcgcagaatacttagacggtatcgatcatggtagcatagcattc +tgataacatgtatggagttcgaacatccgtctggggccggacggtccgtttgaggttggt +tgatctgggtgatagtcagcaagatagacgttagataacaaattaaaggattttacctta +gattgcgactagtacaacggtacatcggtgattcgcgctctactagatcacgctatgggt +accataaacaaacggtggaccttctcaagctggttgacgcctcagcaacataggcttcct +cctccacgcatctcagcataaaaggcttataaactgcttctttgtgccagagcaactcaa +ttaagcccttggtaccgtgggcacgcattctgtcacggtgaccaactgttcatcctgaat +cgccgaatgggactatttggtacaggaatcaagcggatggcactactgcagcttatttac +gacggtattcttaaagtttttaagacaatgtatttcatgggtagttcggtttgttttatt +gctacacaggctcttgtagacgacctacttagcactacggccgagcgcaataacccccgg +aaagcacttgctactgggaggcgggtttatccatcggcaataggggttatcagtactacc +aagaagattgtgaagatattaacagcattgaaaaaagttcggactgggcatgaaacgtgt +gtcagagttagagtccttgagggactgaatgggtttgtcccaggcccaagcttgaggtgg +atgtcacctcgggtactgcctctattacagaggtatcttaatggcgcatccagccttgtg +gctgggtctacgtacgcgtgggcaccatacgtatgttggcaggaaaggtcaatcatgctt +gtttcctcgtcgcagaaacgttcacactattggctcgcgggatcgaacgggcctgattat +ttttccagctcctgcgttcctatcacgccaactgtcgctaataaaatgttatatagagat +aacccattgctatgcaaggatggagaaaccgcttcacaacaccctagaattacttcagca +ctaacatctaagataccgggaaaaccgtaggtgccacttggttttgagggcaatgcctct +tgcactggcgattcgtggagtaaccttgctaccgatttccaccttttctaggtatgatta +catgcgatcgccattgtcagtcgtcgtacgaaatccaggaaggaattcgaatacatgacc +gaaagctatggcatcataagcgtggctctttactaaggacacgtgtagtcggctgatttc +gcgcagaacttcgctcaccggacagtgactgctgtccgaacttgggggcagcgtagattc +tagctagagaccgcagcgaaaatgccactcgctaggtggctatggacgtccagctatagg +cccccacattcgtatgtatactccggtaattgagtctacctttcgaaagatcaaagttca +caaaccttctctcacgttaacatagatgctcgcacatagctagtccggtgataaagcggc +cgtgcatgcgagtatttagcgcacggaacagatattaggctgcgaaataccctcatatgc +tacagcgcaggtaacagacggttgatctccccgtagaattccctcaaggccggatcgttc +tcatgagtagcctttgtctgacatttcctctcaatagattgcagactcctgtgtcgtggg +aaaacttcgcggaatcgctgtcgttacataaatctaaacagtgcagtccaagctatttac +taccacgtatcataatgaacatctctttgtgaaatacgccggtacgccgagagatcgccc +acattgcgtgtcaccaagacccagtgtctattgggcgcgctggttatagtatgcggaggc +acccgatgtgctgctaatcactacaaactcgacaccaagaggcgaccgcgtgcgggaggg +ctagaacgcgagagccacgtcaacgtggtggtaccgctcctgatgatacgagcactgtgc +tggcaccgctgccctatgtccagctaacaggtgtcacataatatcgcatctatagttgag +tatcttatcgctagcgttacttgtgagttctcgggtagaatcgtcgtagcattctagtcc +ttagcgtaagcaacgatatcgccgatattataggggcaataggtctcacccaccacgggt +gtatatttaacgccctaagtagttaacggagactattaaacaattatgcacgtgaaagat +tagggtactgcacacgtgtcacgttgacgatgtaaacaccataaaggttgttctgtgatg +cgatgcccatacctgcggtgcaacgtcctaaacttatgcggatcaccttctaattcagcc +gacgttgagaacgccagctatactctgtgagtacaaggtgaaagccccagatcaaaatat +tggagtcttgtccgtagctcttgggtggagagtgtgaccacgtttatcccttaatactga +gactcttctcgttccacgccccggacattcgcgatacagcctagtttgataggtggctac +aagggctctatccgaatagcacaaaactcagtcctagtgcgtataggtcgtgctctgcgg +ttatacgctccacagaagaaagtacccactgcagtttgtcggtgggacttagcaaaacct +gtaaccaaaaccgcacatggactctgttttggtggcgtggagtgtgcccgccgcctttat +gctgggtcaaaatactatatgatttgttgtggtcgggcgcgacattggctcttatggttt +ataactattattcggtgcacagaaccgacttatgccccgattttgcacctcccgagagaa +atggtactagtcattgtctcggggttttacaactcaaggataatctgccagcggtacccc +gaaaaatcccatcccgaacggctggtacctatgctggagaccgaaatggagccagtgcta +tgcaaaccctcgctctttctatttggcccgaccagctgcgagagtcattcgacatacatt +gcgatggctggttcatctctctgcttcggattccgatcctgctgcctatggccacaacac +gaaagagatcttggatacgtcctcaccatagtccaacggacaaatatggaggtgtacgcg +cacggatacgagtacgacgggccgcccaatgctggtccttcgtgttatactgtttacttg +cctccggtaagagtgtacagcttgtacccacgcggtggaggaccttacgcgtcgtccgca +ggtgtggagatttcgctacctgttgcattggggcctcgccttacgtttttttcgacggag +gcccgacccgccaggccagaccctcatcattgggatttttactgccttggacggcagatt +ctgatgctggtaacgcgcttggcacacaccctggtcgtaattacgtactatcacctctat +tttaccaggggcgggccccgcctcaacgatcggtagtctcgttagaacagttgcttatac +tccgttagcactcacaactcggagaatgagcttacacagtccgtaatagtctccacagct +tcccctggaaggttcgtacaggggccctggggtctaatgtgctaccgcctaacttcgtta +gtgtaaggtctcgtgtgcacctccaataacgctgcatttttgtatagaactcctttatag +gcctgactcttcggaacagcccactaattgacgtgcacgatgctgcatatacccttctca +atgacgcataccggtgactaaatcctgtggctggttgacactttgcataacccaccacga +aaacgcggtttgcacgtggttggaagcgagtaccggttaagggaagttacgtaaacccaa +catagtgagcgatgcttaaaacactgcatgcgaacaacgaccggaacgagagcctaatag +aaccaaatggataggtggttacgaaatccgcgcacaagtgtcgtgccactctcgtaaaga +atgattgcttgcttatctatgagaaacctaataggcacgcacgtgtcgccagggaaaaac +caccatccgacaagacgctgaaaatcgagatagatgcagcccgcgcgtactttaagcacg +atagccatcttgagcgcgacgattcagcttacggagattacttctcaaagcggacacctc +gacgctgaagctctctatcgatgcacttgcatgtccatctacggcttgagcgaaccatgc +ttaacgcttggatgacgttgttagtcggattcgatcgtaccatactgtcctatccatcat +aacttcccgaattaaaactcattttctaccctcatttgtttcattggcgcatatgagcgc +cccatgggcgctgatcgacacaggcttgtagcgcacggctcgtcttgcagtagataacca +tagtctttacgtcgcatatattaatatatcctcagacttccactgcggtattttggatcg +tggcgtctgggacagtcacactctttaacgggagcgcgttcaatgtctgagtccatccgt +gcagttcggtgcgattttattcttccctgcatcttccggattccttcttcttgtcggaga +attcgccgctcgatcaaactcatcattggtacttattgaccgtttcatgctattacaccg +gtacactgatgataacgctgcggttttatcccccccaatacgcgcacacacgcttctttc +ggtgcgtcctgtcgtacccctattgcgcatcatggcactccagccgagcaatgctttgga +caggtgtaaccaagctggatctagcgtgggttcgacacagctcggttcgtataaccacac +gcatgaactgcgagtgcctcgccccagcgccgctgtctacttgctgtttagaggaagaag +caacagcttgcacccaatccgcatatctgcatataggtggccgttcctccgtggcgcgcc +gctacgttgtagcgcacggatcaaaagcgctgtgttactatacactggttcggagacggt +tcatgacgagcgcgctatatgtcggcatctgcgccccatgagcggccgctgtccggcggc +acgaataatatagtgcaagaaaaaccgaagactacggttatatatgatggaacggccctc +acagcattctaacaggtttgacaaacttaataaatgatgggccgcgcctgctgtgaatcc +cggacggtttggccggaaatacctaggcagtctttggaaaagcttttcctagatcaccat +atcgttgtcagtggccaaggtttcgttaactctcggcgtacccagtatcggcgcaatagg +cctttgatcaacccttggaagattagtcgatcgtaacttcctacatcccggtgaaaggct +ttaattctaagtcttcgccacaaacgcttcaggagcgtcgagttctatcactttcgaggt +actgccacttactatacaccggtacacttgttaagcaagtgtttgcggatgtggttaaat +tttgatggcagatttctgggtgttttagctatagctgtatcctcgaggtcgtcgtttaac +cgctcctgttgctagatcatatgtatcgttgttcgagacgctagtagtcgctcctaccga +atcttacaggttcgatctctgctcggcttttgccgcgggccggtgcttgtgctataatta +taatgataagggcagtggccgcacaactgcagattactgacacttgagtgagaactaagc +cttgaagcatagtgttgaatgttgtagaaaagtatactgtgacaaaaacagggcctggtg +tcaagtgtcctcagtgatctggatatcatcacgccttgttagcaggatttacccgcatag +taatggccggactttatattgccctgctgcgctagctagtactgcgggggctctcttccc +cctattgatattccgggcagaatgcgcgggtagtcagcattcatgtcaggcttctatcaa +cgtctcattcacccttggagtgtgacctacgtgttagaggcaatgtagcccgagagcccg +ttcaaagacaaactcccgaattaaacagacaccggttatgggagtgtgagtagtgacttc +cgaccagtgtttggtttcagcctgtcggttaacctcgcagggctaggagaatgagctgct +agtaggtgattaccgaagtctccccagaaagggaacagtcttatagagtagagaatgtca +aatagcgttattgagttctgtctactgcactaccaagagcatgcccaccagagatgcgtc +gcagtcgtagcgtagacgtcgtaatgacccaggtggcgttcggcctattcgcgtcggacg +cgcgcgctactacaacgaagggttctgaaagtgcatgttcacactgaaattctaagtgtt +agtaaacaaacgcgtgtattccagggtcgtgtgtgacattatggctgtctgcgcccctca +atgatcatcaagacgttcaattgtatgttaacgtagatatcaggtttagttatccgtata +ctttttacgccgcgcgcttggaacagattctcctaacagccctcgcggtttcaaaaagaa +ccaaagtctataccatccttgttcccaattctgcctggttgcggagaaaagaccgcctcc +atacgtacccgactcggtattggtaagtggggaagcagtcgaacgcatatttcttggtta +tatcacaggccacgttctatatcggaagtggccggattacgatttgacgttctatccccg +agagcgcattcttgtttgttactactaccacgcgggcgcttcttattcccagaccagagg +gaatgtgcggaagctttttccacagattggcggaactccagcgtgcttagtgcaggcgga +gaacgtccgttcagtggtgcgtgctttatttttcaatctgacccgacctgcgctcaaggg +ttgcaagttgttgtgcgcccgagtaataggcgactcgtcgcaatgggtctggtacattgc +attttcatcggtacggcgcttcataaagtgcggcaaatttctcaccccagtactcatgtt +tatagggtatcaggacccgaagcttctctgttccaaagaaatgtactgtttggctcccct +gtccatattggaggtagatcacttgtggattatgcaatgaatgaatgaaagtttggtgct +ccccaccggggcgctctcaaagagagtgagctaaatttgaacatttaaattgctattcca +acccggagtcctgaccggaacagtaatgaaacttcaaccatgccggacagactagaagaa +gggaaagttgcttgtatatgggagtaaaaatgatgttggtgccgtaatggtgccggaagt +gactatagagcatgtcgtgacgcaccggtaggcagtgctataatcgtatgtccttcaggc +gccgccggacctacgaagctgaaattagacaccggcacactagccccgtcagcgacggtg +cgcggccgctgccctgcagcgaatggggctaacacgcataaaacgcccgcataaccactc +gagctacgggaattcactcaggctgttgcttcgacgtgtagtctcattacataatcataa +tacctccaagaccaacggctgctcatgactctcttaccttgttagggacatttcggcact +agggaagagctgaggactttgaaaacgtcgataaaaccatcgcgggaactagctgcgtta +gaactccatattttacgggtcgcaagcttgaggtcctgtcccggcagctgcaagtgctac +ggcaggaggggatctacctaacgtgcagtaacgagcccctgcccgtaatgaggcgtactc +gtctctaatcgtcagtaagttactatgtccgaggacgcctctacgagttgaactctggct +aggcccacctgtccgcgccctgctcgggtaccccatctgcttatccaacttcacctcgcc +ttacggaatctctggttgccagtcatccgatggtcattaagcagcgtggtacatcgtagc +caatacttcagggcgccagccatattcccagccaagcggctgcataattacagcgcctgg +cacgactaatcgatcccacaagcctggtagatgacccttagccctaaagcgccctctgac +ctatctgcacgtgatacttgattatttgtaatgagcggacagggtagatgactaatatac +agggtcgtctaggtttgcacaatgcagacatcatccgcgcaaggcccggacggctgtact +cacacagctagctccatctccctcagcagcactaagattcccacgtgaccagggcgacgg +gcctcagccaaacgtatccttgatatctacttaagtcaaggttgactccgaaccctatgg +gtcggtgccgttaacagggagtctatatctcggcgttccattgcttgtttcaaactcctg +ctataaggtgaaagcgctggagggcatagtttatgcccaaagttgcgcgtagatccgtcg +ggatatgtgctataataaggactgctcgaggtaggcggtaacggctcccgccttcagtag +gcgcggaactcgaatcggagttacaggacttgaccgagtcatatccaagtttatgttacc +cgatcggatccggatgctcgtatctgcgacgaggtcggaagacggacgaaatacgattca +accgcgcgaaccattagcatctaacctttagcctcaatgggtgttaacgtggtgggctca +ctcggcgtactctttgtgcaactattccgtatgaacaacagtcaagttgcgacatgatgc +tcttacgtgattcccacagtttcccacctcaggatgctttctttagctaaacccaatagt +tatggcggcaccttcagactcccacgaggacggctatgacgttgctaaaccattcgccgc +caaaggctagcgctaacgagttctgtgagtttgttccgggccagatctccaggatggtcg +caacaacgcagtaccggttttatactggtgaccctctacctgttattaagttacagcgtt +gtcctacgtacatggtcgtgagtactcgcgtagtcaaacgccaggactagcagcgagaat +tattgtcgcgatacttactacaatacttacccgatattgacgtgcagggttgaaagagat +ggacagttgaatatctattttgacggaatcctcaaaactccctccacctcaggtaacggc +cctgtccgggaccgcattcttgcatatattggttcccagagcgtatctaagttagtctct +tgaccgttcaccgactctagggcgactcgttatcgccctccgaaacgatgctttcgttac +ctcaatgatgacaggctgtaacgtaagtgatcccaatctcactcgtgccttgtccaccgt +tccgtgaagacgaagcaatacgcggaatacgtggcttcgtaatattttgacgatatgggg +ctgggacgctcaagacttccatgacaaacaaagtgaagagcaactgcatccctcatcatg +atcactattaccagagtagcgatggataacgctaatttggtcagggcagctatcgcatcc +cgcaggtgtaggcggagactttttcttttgttgcgagttgacaggtaatctcacggtata +agcacggttatttacgcaagcgacgtccctgggagaatccgcccacgtaggaccccataa +tccataaatactgcggtcgaaaccttcatatcgtgacagaaccgctttctagggatgcgg +tccccgcattcagagttctactttggccagcgtgagacttaacaactccacttacgcggt +acattgaagtcgttcagtccagtgtgacctgtgtaccgaataacgtgtagaccagcgcgt +ctacgacttagcgcggctccactccaaagcaccttttgggactttccaacgagcctgttg +gccgttaagcggtatttcacaaatagatcaccctagtgtcggtaaccgactaccctattg +ggatcatcgtgagctcgaaacactagaggcggaccaacggatgacatttgattcggctct +acagagcttgtcgccagagaaaaactgtggcaatctacgctcgcggggaattgactttag +cggcccctagacaggtgtgggacactagtctagattcacgtcctacacgacataacagca +ccttcctggccagcccagaaatagtacctggacgacatccagccttccgacgccataatg +tgagccgtagcgcccacgacgatcaacgaggagaaatttacaaaggctgtgtgaatgcta +cgtcgtctaccattgctcatcgaaacgaacgcaacgcacagcatacaacgtttaccatgc +cggagcgggatcctcaagtacagaaaacagaggtctaaacatgatccgaacaaatcggta +ggtttacacagctacctcgtccattggcgtactgcatcgatcgtgcttactacggtcatg +ccggcccgcgatgcacgtacgaaggaataccctgtctgcccccgcgcgagttacgctgtc +tcgcacataccgagcactgtcgttcgaagctaaactatgagcccagccgagctccttatg +gccgcaacgctggtgcggccagctgataaattccacagtacacgatcctcgtgtaagatc +tcgggcatagtaagtcatttcacatggttaggagagatagaatacatggttctggtagct +caaccaggatttgtggaacccttggcccttggtgagtgctacaataaaattctccgtatg +ggacaaccaaagggtgctggatgtgacttcccggcccaggttagatgtccatatcattca +tacattgcccgaccgacccaatgcctaaatcagaggcgccttagctagttcttgtagtgt +gccacgtccggccacgcagacacgaccctcggcgagtgatcaccattaccggattggcat +cgaagtctttttctgggaagttagccagtttggtgtgcggtgcttagaatcttattccca +gtcaaacgcccctgggacgaattgctaaccctagttgccacgccggaaccatcttcggga +gagtagacaaatccgagttagatatgttagcgtcttcgtgagtctgaaatgtatcacttc +accgcagaatacgcgaatgtctgtttgccctggactgacggaattggcttaaaagccgac +tagagcattttggtacggttcctatccgcgatgtaattacctatctaggttatcgctaga +cgaatagcgagtacagtgtagcaggccctttgttagcaagttgctctaaacagttgtcaa +aacgtaggcacaatagtgcgattcttctaaatccgggaagctcatggcgctgggcagaaa +tatcacatacgggaataatcaacctccattttggttcgttttactcgatgagtgcccctt +gcttgagacgagcgttctgagttgatggcatgtcgaaaggtttacgcggtgagtagagca +ctttacccctacagatcggaatcctcgaggaggacagttggaacttcacattaacctttg +ttcgattgcatgaaggttgtgttctgggagtaggctcccaaggtagcggttcatgctggg +ggcagccctaagtttgtattatgtgagtttgcgtctgaaactacatttagcatgaggaac +gtaagctttctggagggatcttctaaagccaggtatcgcccgctacgatgccggagccgg +tggttcacagctacctgtgctcaaaggcttaaggctaatcatagcaacagtgcgaaagga +cgtctttcagatttcgaaaggtgctgacacaacaagggtcagggcggtcctacccttctg +attccctacctggttttttagcaagggtcaaggctaggcttatactcccgaacgctttaa +acactatcccacccctgacggggggaagttgcgcgttaagtataagaataagatttaaca +gtacactttaggttcctcttccgcgagccgtcatacagcaccgagcgccgttgaaacgcg +attaacgcgtattgtcgtgcgaaaaaaaaacgctcgccagcatattggagtgtcgacttg +aaatattgaacaacaccgcatatcaaggacgaatagtagggcttcactacctccacctga +cggccctaggacttatactcgaaaaagaccttccatcacgatgtcccttaccggcgagag +ggctatatacgcatgaatagcagatcttgccgtcgctgagtgtcacccagggttgctcca +gaaaggagatagggcggagagccatcgacagcagctctcgtctaggtggtagcagctaag +gagtcgtgtcgtcgcgccgagttggaacattatcgatgtacatcaatgcagtaatgatgc +tgatagactcgggagtttcctcaaacccagagttacgagaagacgcaggtctatcagtta +gaaggagtcagtattggcctttgaaagatcttatgctcatgcccaatcgtagttaaacgc +gaatcgggaaggccaatctggcggttttgacccccggactcttaagacgtccaatgtggc +tagacataagtaacgaattactctataccgaggggcgggaaccggccaatttattacgag +agcacgagagccttgtagcggccagcacactatcctcgagtccctctatcctgagacgta +gatatacatatacgcctagagagaatagccgtctaggcttccgtcgccctctccgtcgtt +cgcgtgaaccgtaagtcttccgcattcccttcctcaagcgcgttggtgtgagagtggtat +tgaggcccagtcttataacgcatatacttgtgcactctattacttaccatgggaaccaat +ggcactctcgaatcatgctcacagctgagcaacggtgctgctcaccaattacatatgagt +cgtggtttagcgttggagcggaagatgaatttccatctgttcgcgcgcatcactaaccaa +tatacggttatcccagcgctatctagttctgaccgggttggtagcgaacccttttgcaag +ccggcttagtggatgtgaagtgggagtgataacttaagccgccacgttcgggggggactc +gtttatattggtgctggaatacgaacggcgtgattcgtagtcgccctaatcgggcgcgac +aacacatgtagtactgtcgaggcggtttaaacccacagtaggtactctatcagcagaatt +atgctagaagtttcacaacaactttccgcatgaggctcagcggcagcgtcgcactcccaa +tggccagtgccggtagcgatgtttggtggaattagttccttcggaatacgaaccggattt +aaagagcctcggagaacctaaacgaatccgtacgcatcttgcccaaggtgctgagccttg +tcgcctttctcagttccacctacattaatgcaatgcgttcgaagctctgaccgcaaacag +gaatcaagttcagacagagtgcaagagtttcgcaataattgggaacgacccacttgatat +aggtgcttttagagatgtgtgtacgaccgtccttcgagcatacctacgggttacaattgc +tccggtaagtcaaggcacatagaaaacatagccaactgagagtgtatacaagattacctc +atgtagactgaaatacacacatcgctttaagctctcaaccgatgtagaacagattttggg +cggcgttgacagcgtgcccgctcaccggtttgctcccttctcaccaaataaccatgagac +gactttggtgactggactgccagatgacgggctacaaccgttttggttccgaattcgctc +taactcaactaacatcatactatatgcgccaggatattctcgcggttggacccccctgcc +aattcgggttaaaaccactccccccatgtagggagctgccgcaattacaatatcgacgat +cccagatggacgctcacaaaatatcagtcctttcacgatccgctcatatagacggatgaa +gggactgaggctgttagatagtgacgtcgagcatggcgtagacgagcgcaaccgggtcga +ggcccgcattaccgtgacacccagttgaaaggatttacactgcttcattcgatatttacc +actttgtatgaggagctcaacctaagtcaacacggaccatcatacaggtcgccagtaatg +agaaggctgctgtgccatggagaagcgctgctacagcacacaacgaacatcttgcaatgt +gaaggagggtgctcttttgggatgagcctacggggatgtgtatccctgccctgtaggcag +ttgggacttagcgcgactatctagataactaaggcgccagccgcggctgtttgccgaagt +cgtgctgatgctgtacaacgaagggcgagcgtgttaacatgctacacgttgacctagact +agtccaagtctgaaagtcccaatttaggtcgggtagtacagtcctcggttccagtcccat +gttgtgccgacaaggacaagcgatcatcaaatcgactgaaattgaatcagctacctcaga +ccacattcagctctcggtaacatgggaggcttgtggttgcaccgtaaaagggggatagcc +catccatcctgtaaacctacaatcgcgcgtagcttaatacgctcacattagacattcgat +cgagagacctggtttcaagagccttcccttttgctttagtgggccaaatcgcaaccctgc +tcccctcccttacgccttatacacttcagtgcaaattcatgcgttcagcgaacaactgga +cttctgttgtacgtagtccacgggggcttattcattatagaaagccccctactgtcaccg +ttatatggttcacacatgagctgatcacctagagagtcgtcatgcacattcgcctaacaa +ggacatatgagtaaccgggaggggatatcttcgatttgcagcaccaatcgacgttgtact +ggtctattgtcggttaggtccgattatccgaccggcaatgaggcaagcccatctattcag +gaaacttaggcagttccctgtgctggcccgacgtcgatgagttaagtctatacaggccgg +ccgcgagtagttaacgagaccaacatagaactatcatactagccggcaatgatcaatagg +gtcttagtgccactgtccttcgagccctcgcctaatttagcgcgaccggtttcctattgg +cctgtggggttgcgggcgcgtccgctttaagaatggtccttaacacctacccggagatcc +attgcatagcacactctccccattagcctagacacgtcgtcgcccgtcgactttggctgg +aatttaatcgccggggatatcgaactttcacgccctttaacgacgaggaaacctaccgtc +gcctggctggtaaatgggtgccttacggggactcacgatgctgtgaaccgcccgccagtc +tctggggctcccaaaatccaggttggaattacggacctccgccggtactacgcattacgg +ggtggaaagtcctaagataggtgaatgaaagggcttcgctaaaccagtaagtcattaaca +ggacatcggcgtcacgtctcgcgggtttacacggcgcacaaatcctattcccatgataaa +caccttatgccaatccacatccctcgctgcctaataaaattgtcacacctgcgctactga +ctaacgtttacgcaatgagagatgaattccgacacccacgcttgttgcaagcacagccgt +atgggttctcgggtaaggtaacacgaggcacactccggcgcggccacttcggcccctccc +tgacgatgaccctcattggtcaagcatcagtcgaatgattcgtaacaaggagcaaccgac +tcagtagagagggtgaatctcacgcgctagcctgaggaccgcctaagtgcttgctgtgcg +tcgcggcagtcgcgaggtgcgggctaaagtaaataattactggtcttacctaattaaagt +tggtggttagggacaacgttaccactaccagggtgcgcccctgaattcgggtatcggact +atccagggcgccttttgcggccttaaatacctttttaatcacgctggagctagaaggcca +tcgggatagacggggttctaggtactcgaaaaaacaggcctaataactttattgcgcttg +gactaacctatgtacaacacgttgtagcatactatggaatgttactgacctacacggata +gcatttgttcgggagcgtcattgacctcccagaccctatgccgatctgcaccattcagtg +accatccacaagtctctaggtttagccaaaggtgacaggtcaagcacttgcgcatgtcca +ctagtcgattatgcaacgtctctgaacagttagcacttatctcccgccgtgtgactcacg +cagtgaacttacctatagcatacgcctactattgaatgttcgttgttctaacacagcgct +aatacctcactggcagaggtgcgcacgctcctagtatgggagggagtcaggtcagagtgt +atgagactgatttttattcccgataggggttcagtgaaatcgacctctcaaaagagaggc +gcagaattcgctgataagctctgctacgatcgctaaggcacgataagcagggcggtgaag +gttggagcaagataatatcacccggacgcgggtcctgtcgcaacgagcggccgtgagacc +tggtgcgcaccgtgtctcgatcggccgaatatcggaacccactgcgtgactcaaatgata +tttttgctatctgtgggggatttatgtcccggtagaactctgcttctagcagaggataaa +ctttacaaggacggcgaatatggtgtcagagcgccctaatgatcccgtgctattccgcgg +gccaccggccgttaatggacttcgggttagaaggatgggttattcatcttccacagaaac +gcccagccgcaatcgtgggtttactcgaccgcggttatctgcctacttagctgcattcct +aaaacaggattaaaaaggccgcgagggttgcgaacctatggttgagaacagagtcataga +gtcagatgcgcagggacggcacggatccacatggcagttaactaatattaataccccctt +agcctcgtatatgggcgtgtgcagtcttgtccactcgcggacgcgtatccgagcgattct +gtcttccaacgctattcgttaccactttggcacctctttgctaagcaggatgagaacatc +tcactcactacgagccttgactttcagcacgcggtacgagggcactgggcttctcgtcct +ttgctagatgtaggtgccttcccgccctcatgacgatgtcacgtctatcggtttattaag +gtcggggaccattacgagattaccccgcgaccttcgtccaaatgggatcacggcaacgtt +ccacgaggggcgcgttgcctgagccactcgggtatccccttccgatatccgcagaagtct +agctaggagcaccgccaagcattacccgattaagcaaagcctactcatcgcatacacggt +tcttggggtttgcgtcagatagcaacttccggcggcagtagagatgatattttatccgat +tgagcttgcccagcgcaccctcgggccccgtggctcttctcttaaatgtgccctgcacga +tgttagcggttcctactcctccccgagccctatgggtggacagactcgccctctgaggct +gcgtgttcaactggttccaagtccggcgcctgtggatctacgacgcgaccagcaacatta +taccaatgtctaggcttagctcgaaaactagtaagccttagaactagggtcgtagcttct +tctaaatgaagggcagcgtcatagccatccacgttagcgcttactcaatcgcctgtcggc +tgtcatgttaccgctgccgtaagttcgtgaacataaaatacaacacattttaggtttaac +aaggattgtttaccgccacgtactggtgccggtagtgaaacgaaaaacctcagcatcggg +aggaggagaacggaatccctaccaatcttatctctacttaaagaacaaagcgcgcggtac +atggcgcagacgagaatgaatccccgaacgggccgagttagactcctcaacctgtcgaaa +agttgcgatccgctagatcgtagagtacggacttaaaaaagaaaagaaggtctctacccg +agcggtgagcccaaccagttccaggttgctgccggattcttccacacggcggtgccatat +ggacgaccccgtactttgggcattctaggctacctactgcgaacgcctcgcgttcatgcg +caaagttttctctagataggcgcgctttggtaagcatagtaataggttcttcagcgtcta +aagcccgcccattaggcctggcgactctgctttagtggtaaagagatagcatcgatgtac +atcgatggagagagtattttcacgaaagtgcgcgccgtacactatttatcggcatgcgcg +ctaaactggagggtctaataaccagatcacgcaacgaggtcccatgtacggttcgcattg +cgaaagtatgggatactagaggttttatcgggcctcgcttgaggtctgtctgggactggc +gcacatcgctcgtcgcccagtcgatagcggggtgattaaataagaaatatgttagtgccc +ggatttggaaccaaccagtcccggtagcggtacaaaaagcctttcctgctagttctatgc +ttaaagcgtactcctgttacaatccgtaggcaacctgaagaggcaacctggttttccttt +atttcgactttgtttgccatttccaatgtgatactgtgcggcgaccttaatgctttttgg +taaaaccataccgagatccagcgcacgcgacattcagaccggtcccggtttggcggtcaa +cctcgtactctgcactgttcagctagaggggtctcctatcccgaggtaccggtcgtctaa +cgggtggttacaggggctggtcctactctaccaacagttaaggagggcaacaagttcgat +ggggcatcgtataacttgaatgccattggacaaataataattgctccacgtcccaaacct +caactgaccttgtacgcataggtgccacctgcacgcaaccgagctcgttcaagtgtcctt +cttagctggcgccgagtgaacctgcatctgagagtctacccaacgatctagtatcataat +gtctgtagccagcgactatgacacttagagagccgcctaagaaagtgtttgcggctcctg +ccccggtgcgcttgttcggtgggaggtcgttatatagaaccatggggatataatgaatgg +taacatatctgccacgttgacaagccgctattatgaattcagggttggatactattatgg +cccttcacggtcacttgtaggacggccccaaacaggattagtaaagtcggtggtctaagt +gtaagcgataggcaaactgcggttattcgcgtagaccgcttgatgatgtaaaataacagt +tttcatgtctttgcaattaccgcgtgtagtctgaggacttaaggccccttctcggatagt +gaaatagttcaggtccggctgttgacaggtgtcctgaccggaacgctttacagctcctga +ggagcgtagcgccctacgtccttcctgatccagccgcacccatagctagtaaacaagttg +actgcgagacacaaagtcaagggcctgggcaagcgcgggccggactgcttgtcgaatatt +gaagcgtactcgatccagatctgcgccattgagttaaaaggactatacgcctgtctccag +ccgattgcagaaaggacagatcctaatagaagaactggggctccattctctcaccgacac +cctcctattcctatcccactggccccattgctggtaacccaaacctctcacgacgattca +gcgctgcgattaaagagtggagtaaggttaaaatcggttggggcgagtagtgtttgatgc +aagatccattgattatcgccagtgggatggcggcaaaggtaccatacctcgagcttattt +gggtgcctcactcctcggggaaccatatagacttgcacttggcaaaatatggtcgggttc +aaccgaccttttatgcctggaccctctgctgagggcctcttgatcaaaatgcttgcgttg +cttataagttgccgcttgatgtccaggattattattccagcgtggaacgggaaatgatag +cttatctgttactcagggcgcctgaattagggttgccattacataaaggaacgacaaggt +gagcactgggagggcgcattcttataaccgggcatatgcgcggaacaccagcgttggatg +gcctacctccgcggaggtcggggtcgaaggcccccgtttcctggaacaataacactgtcc +cacttggtttgtaaagaacctccactcgtcatgacacggcctagcggtgttatcggcgac +gataatcatgggtctttacaagtgaatcaggcttaccaggcggaccaggaggaaacactc +cacgagtgagacctggatccggggggatggcatacatcccatacgctcactcagcatgca +cgttcctagcacatgctggaatcttgcaagctggacagagtgtattgtggcccttgagct +atacttctaacgccagatccatgtttgcaaacatagctccagtggcctattcgacggttt +agcctctgcaccatgttatggctcttataggtgttgggtcgacagtgggtgactagacgt +aaagagagtatgccgtggttgaaccgagacctaaaaagctcaagatcacgacggatatct +ttaacggataccagcaatcggctaagaccagtgtctactactcgtgatcggcaccggccg +cccgttatctggtgtagtagtcagccccgcatcacccgtgcctatgcgagccttgactct +atcagtctaagagcacacgtttagacctgagccaagcgtaggtcactatcgagtcaacct +taaccctagttgattaatgctcttgacgtgtatgattacaccgaccgcgaataaactctc +acgcgcgtgacggtttcctcgctagaagaagccatatactgtacacactgctgtgaccga +caagacttacctttggtttacgtacaggtggacagttgtttctcccctcgggtcgatagc +gtttggtcgtgattccaataagtgccagatgtcggaacaacatgtttccataaagacgcg +tgacatgatatggtttgctatgaagccactacgaaaatgccagtgcttctctttatattt +tgcagatgtggaagaagtgcatccattatagtccttttacgtacctggattctccgccag +cactgccactactttcttactatccgttggggggggacgctcaacagagcgcggactcag +gaatcagataacgaccggaacggggcatatgcccagcattcgttgttgtaaagcgattga +gtttgggctgctaaggggccggcagttcgttccgggatacccgcaaaatttatgcctttg +tccggtgattctaggtttagctcgatccacgaatacgacaatacaaggtttgcctcctct +ttcgtctatcacgcaagcttagagttgctaaaatttcgtagtccgtgcgttaaagctccc +tacatttctaagctgtacgacaccacactatcttgcaacaagagtcactctatttctcat +atccgaatgaatatcgtcctgtacacgggtggcaatctcggcaagatggccgagatgtgt +agcactgtcacgttcaaaagctcaaacttctgcccactgccagccctaacagaatctgga +gacatcataccagcgctgtcccatgtggcggagagttgcttcaatagaacgctatcaccg +tgggatcacatacgtcactactccgtgtgacactatttattattcctttacctccaatac +gcccgtccttgcatcgcattttgtagtaagacatcagacgacgttactgccacggaacca +taaaacgtgctgagcccacgtaaacgtcctatcggtgaggtccgctcatcgtacgactct +gaaatttggaaactaccagtttgttggcggtgaatatccaacctgtcggcatacacgctc +acgcgtatggttggtacatgcgaaaaactacccaagcaccgggcgcgcgagacactatga +gtttagtgatgatttacggagcacgttttttgaactcaacagaccgattgaatccttcaa +acagggttactcgttcgtgacaaccgattacagcattctgaacgtggtacgtgcacatag +cttggagagttgcgcgaatctctttcgtaccgtattctacctgatcgctagctttccggg +gtaacgacatcggcaatgatgagtagcagccagtatccatactggacaggtactccatat +aaaactcccgcttcaacacgcgagatttgaaccgcacagtgattgtgctgagtcctagtc +accatcccgatcttgtacacgggtaggggtgtaacgtgggcagatgatgcttacccttcc +gctggcttgtaaaggtgccccgcttcacttgatgagctgcgtcgacaagaccacccaacc +cgagccacgtggttccgacgactcaatgatttccagtatggtccaatcgagcaccttcca +ctcatgaaatttgagcactgttggggatcgagtatgtgttttgcagtgggtctgtagcat +ggaaagatgtaccctaacccggctctggcattatcaacggtggattgggtggttaaacag +cttcccttcggagacttaatggactaaaacgaatgaatcagacgccgagaacgagaactc +accatctggcccaggagccatatttttgattggtaaatcgctcgcatagtgcccgatacg +atgcgtacttgagcgtaaacggcgcagcctctaatcataggtgattgctaagtctacggt +catccccagtggctgacgaggaattaaagacctatttccgtacttgttgcgcgccttcaa +ttatccagcgtataccccgatggctactgctacatgtctaaagtgactagccagaaaaac +ctaaccctcgcccacgaggccttgatcatctcaatcatagagtaatgttcattgaattgc +acggctcttggtgtgcacattgagacaatttctaaaccgacaagtttaatggccgagctc +ctcctgcgtccagctggaccttcatgcaggcatgaaggtccatatatattgtcctcccat +agcccgccgaccgggtctgactcaactgtgttttcgctatcccaggctagcacttctatt +ctttgttacgtccagtcatagtgttactatagggtaattttagtcatagtagacggccgc +tttttcgtatggcccgagaccgtccaccggctacccaattaagtcacatccggatcttgg +gtctagatattcctatcgaaaatagtctcgccgcctcactgcgtagttcagggggcgtca +cacttgttcgcggcttttcctcatgggatctttacccgatggttgatgcaataaatgtct +acaccggactggcgtgtccgagacgactttatacacgtgtgacgagtagatcagatcgta +cgaatggtctgtctcacctatcccagtgggaggatggaaaacactcctgcctaccgggtc +gaattatttacgcgtgttacaatatgtaatttagaaaaagggattgctggtcgatgcgtc +tccaagggattttttatctaaaagcatccttttgggtgtactctgatcgcacgtcgcaga +cagcagtgggttttgacgcagtccgtaggcccacagactcgtttgttgtttattaatccc +aggggagcgttgaagccacacctattctgtagctgtttgaaaggtagctagcccggatat +tactcaaggtgactcccttcagaatcacacgtcgctggagtcgccacagggtggcatata +cgagtgatagagcaccttactttcgaggtagcggtacattagtgcaacgatgaacccact +atagtcttagtgatttcatgttttacttacgcgaaaacgtggggttttgtcaacacgtat +acgttgaatgcacatgcctcatcctaaactgatgcactgccacaagtctgaaagagcgac +agtctgcaacatagcggaaggttacgcccaagccagtggtgatcccccataagcttggag +ggactccccttagcgttggatgtctttgccccagcggcctcggtgtacgggttctccacc +ccactatggtttggaactatgaagaggtacggcaacctacccgaggcaccaaatcgtgaa +cctacgcctatatatacggatagcagggtatccattcttaccatgagctcgtaaaccact +ccgctgaattcgatgggctttggcgcacatcaccgtttctatcacagatctgtcaacgga +atctaacgctatttactcggcgcacacagatcggaaaacccaactgtggcgcgggacgga +ctccaggaatcgttacgcgttatcaccttcggctaagtcttgacgacattagagctatat +ggtattaatagtagctgtacatcaaatgataaaattatctgaattataagtgatagcgcc +cacataatgacacacacgttttagatagttagtagacgctcgagactttgcgagcaagaa +tggactgttaaccttaggggcgggttcccgcttacaaaagctgattcgctcctagagatc +tataagcgaagttcaacccctaattaccattgcataagaccgggagaacctgtgacacct +gttcccatgggattagcgaaggattgttgacttattgccgagtgacctagtattgattaa +aaatgcgacgtgaagtaaccaggccttcgatgggcgtctccgaatgggccagtaacaacc +atatacaaactacaagttaaacccgaaaccgtggctaccatgctcatctagtcgggttcc +cgatggaacattccacggtgagcggccttggatgtcggaccaccatttggcaggacaacc +gtcacgattcgcaacagcggttaaagcaagatggacgccaataatgatattcgaaagtgg +ggttaaaactggccgccgcttgatcggtcctacttagtagcgtctcagatgctagaacca +ttccgagtgcaatgtgtgctagcaacagtggaatcggtctataacggtttcatgatccct +tctccggccatccattgagaacgattctacattaatctgttaagcgaccgccaatcactg +attagctccagaaaacctaagattaccgtatataagaatcaacctgctaaagtaggaagg +cgcaggttgccgatgaacagatcaagttcatacaggagctcttaatccaccgtacccaag +acctagtcaagcgggatgtcgttaacaactttgtacagacatttgggagcattgcaccac +agactccaatgaataacgcatccgctaggaccggatatagactgaagaaagtatagtcag +ctgcctcctaaaggaggcagtagtaggagccaacctaacgtcgtggatacgcattactcg +gtagcgtggtaaacacacgaacccgatctcagaattttagcggcgagaagttccataaat +catatttctacttcgtgctccggcttcatctgatggtggtcattattctccatatgcatc +cagtagagcttgcgcttcacgcaaagttccaggatgctcacatatgtccatacggcgcta +ctacatttactcgaacacttggaagcccgccgtcgggtgtatgactagcctttgactgag +actcagcctcgcaattgtatgtaactagcgtatcccggcaaagtttataggtccatatta +acaacagatgggagtagagcagcagcttttattcggactggcacctcatcgctttcgctg +tctgcgggatcaccggtctctcttgaacgtgttagagcctgagggatctgagggcacaca +cggcacttgtatccggaaaacctatgtatagagcctcggttgccagtactagttcgtggt +ccatagcgcctgaggggattaaacgcctccggaaacacgcgagttgttcttgtgcacgta +aaaatcacttgatgttatcgtgttcggccccagtcgctgtctcacttcaaaccagcgccg +tatccattctatgcaattacgattatacttttgacccgatctacgaatcagttacccatg +aatgcgacctgcgataacatacagtgcgacctccagtcctgttcgattaaatcgacagag +ggtcccgaacgcatccaagcggcttgggtcccgctggcaccgctgggaagtaggtagaga +cgtattgaaggaagcgtgtacagattggtgattacggtgctcttataggaccagactcgg +gcgattctacggggtcgtccacactatggacccgagcatcgaatcagtatgtcaatctga +agggactaatcggggagacgctggactccgtcaggagtgaccagaagcagggatgcaaag +acatcccggacgtggatagactacaaatcggacactcagatacatacctctagaaaatac +tattccccgtttctattccgttccgcggccttttacgtttagcttggagcaaactatata +gccgaggagggtactacaacgcgacgcacttatatcccaatgaaagaataaaagctggta +agacaacgctagccactctacctgtgttgcactcgcgatattagggagacaggttacaat +cagctgacacatgactagctgacccggagcactcaattctgcccatcggggatctgatca +aattcgtcgtcgcattggacggcttccctgcgtagcgaaggaatggttaccgtacgcctc +ccaacacacggcggtcaaaatagtcttcagcaacagtaacacaaatctcttcctagtact +cttggtacacggccctagagttaattgtgtgcccccccatactctctacatgtgataaca +gcgacccactaggttgccaaacagagtcggaagtcctatcgagtccagggcgctgtaggg +cctacagactctccgatgtcctgtgttcttcgtaattgcaatattttcgggacccttctg +ctgttgtcagattcagtctgttccatcttctggaaatgttgaggaactcgaaaacgctaa +ctccctgatatttgtggccttacatcaaccgtcctcaggtgaagcccaatgctaaaggag +tgaaccagacgtgcaggaagaagctgttgaccctttaaagctctagttcttgtcaggtgt +tccgactcgctggcgagagtatgatccagtaagcggcggacctgcgaccacatgatgagg +tccctacaaaatcctatgctccctgcgaattacaactcacagagaacagcctaggctttc +ttagttattgatgcacattctactgacgaacgcagcattcgaactaaaccattggtaatg +taattgtgacacgtgggaatctatttaaagctgcaagaactccaccacgtgttcatccac +atcggtctctgtggaatggtccaggaccgtcccaatagggggaattgcgagacccaacta +atcgagtgattgaacatgggagcaattcccgaatagaaacttgcaacgcgcagtactacg +acgatggtagcaataacgacgcgctacttcagctcatgggtctaaattagggcgaacgat +tgcacctaatctgctggcttctctagattgtagatccacagggccaattaacagtgcaaa +gaatagcgtcatatgattagtttgaaaataatatacatgaaaatcgagcacccgcatcaa +taagctacgagagtctttggagagtgccaatacacctagcacatgctgtgcttatgttat +gaaaattcatacttgactaacgttagccaccagccgatggcgctgtcacaacgaccctgg +gttaccgtttagttctctaagaagggtcactctaccagcggggttaaatataccggccga +ctgtctcgagagtgggttgagataactcaatttggatcagcattaagtctagagcgattc +tcgcggagcgatctatgcgcactgacttactcttggaatgtcactcgcggcttacatgcc +tccttgttccgcggattgaatattttatgcggtagtcatgactttaatcgtttctacaga +aaagaccgtttgaaatggcagaggaaacaaccctgctggatcctccctaagtcacatccg +gacggacagattctacttaacctccaataaattgagaaaaatgcaaaaggatgccaatac +ctatagtacattttacgtttcccgtgtggttcgtgccaacccctggacggtggatgtccc +cggtgggtttttggaccgggcgaaattattggccaacccggaaacccaccgagagcctaa +gacgtgcatgatagttataagtttaatgggagccttaattgcaaccgatgggggcgggta +tttgtctcctacaccgacactatggttgttatttgcggcttcactcaactacaatctggt +ctgtagagagtaaccccgtattatcttcccttgcgccctgggtgcgttagcggaagtatg +gggattaaggggcgtgaacaatgcttctaagagcccggcgctaacggacggtgtcacaga +gtgtctaggcagagtccccactgtggaatacgcatgcgtagcgaaccgcgcgagtcagta +ggaacacattgggagcgattgttcctcctatcagccggcctagcaagcatgacgtcaaac +cttagtgagcagcccaagaaataacgctcggactgcaacagatctaagcgggaaatatat +cgatagcgaggaagccgagaggactaagcagagagacgaagaggtgagccggagtgattt +agccccagatggcaggtatagcttccgttcacaacgaattgaacagaaagtccggcgccc +ctggaatttcgaaacgtcaccaggttggccgtaaggttggtaactcaacaccctaagact +agcggtcttgcgtcatgcaagcggggcgtgtagcctgcacagacataatacggtagggag +gttaggcgtggggcgacacagtaagatctgatgaatccatgtacgttgcctccccgtcgt +acgcagttgatacttcgcatcatacttagcagaaagcatcatcgcgacctctcgtacaat +ggcaaaaaggagggcttcgtgcacggggtagagtcttccgcactctaatgaatcaacagt +cgaggttcatggccacaaatgtaacgacgcgatatgactcgttatgtctaggtcccactg +cggatctccttagaagcgaattgtataaatctcatagccccccccttagcaagtggtacg +tagcccacacgatttacgcagagtggggtaagacctcccccacgacttggggaacgcgcg +ctcaccggatagctactgccactgtagagccactagcgcatagtgtatccatagtgatgt +acgtagccaagcggggagtccttgtcttatgactagcgccatggggctatcaactgagaa +cggatgcacaaacggtccggccattcgcacagtccgccggtcactaatgaccggtctgca +tggggctgcaacgatcgcccaaggattggaaattgttaataagagtccagtggacaattt +agtaacgcgacgcgcatctctccccgcctaacaaggctcatttttagcttgacggcgcgt +ctcacgttgccgggctcagctcgagctcacgtgccgcgcggggttacctcaggtttgagg +aatgtgtcttgaacggttcgtaccggcttagcgtcgggtgctcctcagggttcccagcaa +cattcttaccgcaatccaatactgagggcgctaccaatctaacgtatcactgacccagta +aaactcggtattacgggggcgatatatgtgcttgcctcaacatagaactaccgccttgac +gttagaacgttaagttagagcacctgcccatctggattgcggcgataaaatcgattattg +tcacctggatgaggaatatggcggacaaacgatcgtgtggacctgcgccgcaaccgtggg +atgccgcagcagaatatctacagagcgtttgcaggagggccacgcggtatccacgtaagt +tcgcgcaatagcagcatcatctcgttcggggttgctgctctcagactgtcgatacgtccg +aataccagcaacccctcgaggctttgtaatatttacggagtcctaagggatttggtgccc +caagtatagttttgccgaagggggggcacagtgccgtgactacgattgggctattgggca +acccgaccccgtgcgcacacgtttgatctcagacagagggcaaaaagacgaagccacgag +ctcttcgaaatcaatctacatctatgctgggataagttctggtccacacctagatccgag +aatggaccgtggataacgagcaccgttacctttgaggcggcagcacttttaacaccgtaa +aagtaactctatagttgtcagcctttaaagattgcgttcccaatacggtacgcaccgtct +actaccgtcaacacaccgtagcttaggtccccccgcggcagcgcttccatcgtggagggc +tgtcccccatcctccgtagaactgcgtttaccggtctggggagactccctaaagaaacac +cacaggtgaggtggacgggaatcaagttaacgcattcacgtaattcactcctgttcactt +acataagagaagttctggttcgcgccttaagtgccatccatgaggcatacgatgcgatgg +ggaccacgcctgtagactagagaaacaccatcaagttgataaggagtgaaaattagtata +ggtctggcccgctcgtctgttgatagggcctttaaatgtaataggcctccgctctgaacg +agtccgtacttatctgttggatagtaagaacacggttctcagtccgcaaggtagtatatg +actacgcgtcgatggacctaaagatacgtttggcatcgtcctgagcagcttatgaaaatt +gctgcgcgtttcaggtggaagaatctgtgttattagtgcggggacggtagtttcgtaggg +aattatgggtagtacagatctatggacgggaggtgactgtcagcagactgtgcgcaggcg +ctggtggtataatcgctgggaccacgtactggcaagacgcatgcagcctggtgacatcca +caccgccctcgctcagataggacggacgtgcggcaataccctatctggctcctggacacg +gaaaaacagcagtttaaaaaaaagtgggttttgtgcattatcactttgtccgttcgacag +tttattgcacctcccagcatgctagtaaccccttgctctgatttgagatttattatcgta +acacggagtcgacgtgaagtttgatctgcggagaataggccgagaagcccctacgtaccc +tatgattcccgccatgtgcggtgtaaaattaaccactacttatggatttcatccaaatta +actgacgcattatatatacctcgagtgtgtaagccggccctcgcggtaccaaatttcggg +ctgcatacctagaagtgtatgtcatctaaacctaaggatcgggtagtgacgtgtaactaa +cacgtgggacaatgtctgtcctgagctacgtcttaagaagtatttagtcctacgtactca +ggcatcgatactccccgatgttgggtgcagtggggcgtccgggcggctaagatagtccag +ccactccttatgtgaatttatcaaaccgggaagaccagtgcataggccacgacctacgta +gcacctccgtacaaccttgctccagggcacgtctaaatgtcgtactgggttcggactcca +tgcctggcgactagcctggcggtccacatattttacaaatccgagacaacaaagcacttc +caaagtcgcgtggaccttaaggaaggcaacacaggggacatttagccactctaaagaccc +gcatactccagggcatacacgtaacgcgttctcttcactacggagtccgcgagcgaacga +ctaagggcgagggccgtagatctccttctcgtaaatataatcaaggttgccagcgcttat +cggtgccaccgatccgaagagcgtaaggacgttacagtgtaggatacatggtttgcgccc +gtccatacataatcgaccatcaaatcgaaagcgcgtatgcagtacctcgtactgcccaaa +ggacagagcgcattacgtcaccccgagcgtagcttaccatgttaagaccgtgctcatggt +ttccacccgtaagatgagcacagattgcttgctctaggtaacatagtaataagagaacat +tcatagacgttggaccacggttgaaagaccgcctcttaactactgaaaaacaatatttgt +ccttagtaaccaagatacattaatcaatcctccgctaatgaagttggtaggcaagccttc +agtagcgtaccgtggatttgtgtttactgcatttacaccgcggctgggtacgaagcggtg +tcgggcacgcacacgcgttcgatactgtaggtttcgttggggttgcttgttgccgctaac +gttcgggtcgcttacttctgcaggcttgattactgagttcattcgatcggttcccaactt +cggactattgcgccatcatcaatgtgggaaatcatttttaggaatacacctcgtacatgc +atatgaagtctgcgtgcaacagactttccatgatgcgagctgggcttcccgtcctgcggg +atgcaattggcccagtgcgcgaaggctgggctgattacggacatatctgctgtcctgaca +atcgatggtgtagagcgtaacaatcattccaatttttcgacacgggccagggctttaggc +cactacgcacctgggttaacactcggcgacccgcctaacactgggtggacattcccgagt +tataacgacacctcattttcaacaaccacaaaaaggcataggcaaccgaactaacctttt +gtttagttacttctggtatgttcatagtgtagggcaggtgatcggttaaacgcttgtacg +gaccccattctgtagcgcttttctgaacgataacactacgttgggagatacttgttgcgc +agtcgtgggttaaaagcgagccgacgataaactgcaataaggaaagcggacctgtcacct +cccgcgggtaaatctactcgctcgtttagaggccgtaaagcgacataacggtgtccagta +caagcccaactggtttagagaattcttctcctactacattcaccgtccgtatttcggcgc +gccctacggtattcgtggtgttctgagcatacatgggatggactatcacccctgcgcgta +aggactagcagttgtaagtcacgttaaggttgcgtaggcaactgttggagtgcgtccata +cttttcagcaccccgaatttgtacgcccaagttgtatcgtcgtgctgggacgagactcag +cctttaccctaagcgtttaggaaagcgatgttttaccgcagacgcatatgagagaacgtt +gcaagatcgatctttctcgcgcacgttctgtagctagacctgcagctaatctaactgccg +aactgttaggatgttttctctcctagacgcagggaccagttgtaagtaagggtttctcat +cgctaggctagggtgatggtaggtgataccaatggagcggcgcgttaaaagggttgtaat +ctcggtgatatgtgcaccatagattgttccgttattttccttggtcatttagatacgaga +taggggcgccccagtgccacgaggtccatcttatgctgttgcgtagctagagccctacaa +ctttctaagtaaaacctccatcgagtgcgcttggagaatttcatgtaccgtggcggtacc +ttacttgatgccgcgacccctatctaattaaagaccgcttcccgatgggcgaccttaatc +ttgctgcagtccaagttaacttcctctacgcccgatgacaaatttagccggagtaagttg +ttaacctagcctaatttgtaccgaattttgggttgtgagaagaccatttctacccgacga +tcatgggttcctctcaactatacctagtgtcggttaatgatttatggcaaacaatccccc +aatgtagcacccatatgggcgcaattatgtgaacttcaacactaactattggtttagtta +gtgatatttagcgcaaataagaggcatgggctgcgaaaagattgtgtttccgcaatgcta +gggaacctgacggcatacccgagatgatagttaggtgagcccgaatcatgcttgattaac +gtaacgtctatcactacccgtgggcttttgcgattgcgatgcgttactcaaggcatactc +aatggggctggtaataccgatatgggcctgtgtcttagcagcgacgtgtcgataatcgaa +gtacaatacgccagtctacgttagggctttgctaacacatcacccacagttgaagcatca +cgcacagccctcattaggttgtcgtcaacctggaactcctagcaggctgggcagtatggc +atccttcacgaacaatcttaagagacgcacttgacacaggttgcgacagtcaggatgggg +agcttctgaaaatctctacataaggtggcctcgtgatatcgtattaactcggagagcggt +tggactaatgagtgagtccaatcagtgatcggtttttaatgccgggaccacggcttgcgg +ctgcgcgatctatttccctcgcgttacacaaggggtaggcataagcaacaagcccaaaaa +aatcctcacgcaggcgtcaggtacagactttttccctcagcaacgcaaggtacacgtgta +gtcgaatgtggtcataaccagcagctgtcttgcgcaagggcggtgctacacgcatgtttc +actccacagtgacatgatgcccgctcttcggttgttctatgcagcgcgctggtcgcacct +taagcccagttcaatccatgcaattcaccgttgcagcactagatcatataccgcatactt +cgtcagagcacaaccagatcacttacaacgaccgcaagctaagcatccctatcgtgcgta +tgtgtcgaggcgcaagtactatggtcggatgaggaggtgtgccctcaggacacacagtat +cgctcctcattcgacgacgcaagtcgtctagttctatgataggcgaagtgagtactgcgg +atcactacgcccaagacttggagtgacgacgccggctactagcgatggcagttcagaatg +gtgccttccaagggacactcggtcctaatcaggcacacgcgtctcaaagccactactcat +tcatgagctcgctggcgtggcagtggtcttatgcggctagcgaccagaatttctactagc +cttaggcgtacaagcgttgggcaggtcgcgagtaacctctacactctatcatggaccaca +cccatccatgttttaaacacagaggtcttaagaatagcgatggtacggttgagaacgtgg +gagttttttgctctacagcaagcacgttgcagtgaggagagctttaatcctaaatcataa +gtgatactggtgccgagcatctttcggacgaatatgaagacccaacgctaatgtgcctgt +tcgtcggcacattctcttgggacacccgctacccacatgtatgtgaattgggcccgtctt +gattgtgtcgtagatgccaacggttcaatcagccccgacgacgagaagcatttctacgtc +tccagccttgcaacggtttctagagtcttgctgttcgtaaattgaagaatctactgtgca +gactttatcgacccacgatacgctaatccgagcgcgactcggtctcggaaaattatccga +gggagctcgttcaatgcggcggaggctctgagtgaagtttaaggctgagatagtcacacg +cattcgggtccctacaccttgtttcgaatgtccaacgcgaactctgggcaacatcgcgag +actttgaaagatgagggggctgtgacagggcctttgtaataggggtactttaagggcggc +acaatgtgatacctatgtattcctatggtctgggtcagttatttaaattgaccggacaag +aatctgactcgtagactgctgtatagatcacgattagagtttggcaatggttctgaaagt +gatcatgtctaacgtaccggatgacactagtaataactgcagcagcgtgacgatgtaggg +gacttactctgtttacgggtctcgtctgccataaacatcctgctccggcagcggtcaaag +acgtcctattatcgcactcgggcagaaactccagtcatggtgaggcacaccaacagtgtg +gggtcggttcgtggttaccaagccaccatttttcggcccaaactcatcttgaatagtcgt +cctcattcatttgatcgatcgtcattacaaggttcataaatgcccagcgccgcgtctccg +gccagatggaagagctacgtgcaggcggtaagcaattgacgctatagccctatatacgta +tgtgggactcaaggcgacatgctataccgactggtatcgaggcgaacgacaattgctatg +ggtcatcacctcatatttagattcagcccctggtggcgtcgctttgaccaactagttaag +gttgaggagttcgctctcaaacctgataacgagctaggccatgtaccaaccttggctgtg +caccgacgagctgaaggaccgagctgctaggaggtcgcagtatcgattgctctttcagcc +ttctaaaggtgcgacagaaacttgaacctctcggtactctaacactaggggtacgagtgg +ataactcgattacattagtcctggtacaaaagtcctccttccgggcgccttaagctgctt +taaagctatgtccgcttacgagaaaggggcgcacggtccgatctacttacagactgtcaa +aacggtgtagtcggaatgggctcgaacgacgctaatagatacacgcgcattggcatggta +cttcaccaatactatatctttaaagaagggcggcgagcctatttacccacttcgattagg +ggataacacaggtgattgagttttctggaaccgtcatctaatagccgaagcagtccacat +tacagtccattgcatttaaccactaggaatcgcgccaatcttgcgcttatgttgtttagg +aggggccacgctagatcttgcctatcctgagttatatgagggacgatcctacatgtatcc +tcaaagttcgcgctcatccttagattctaggagatggattactaagtgtgtgtccatagt +ttaacgcaacacataatgttcgtgtcgtgatgcgtatccttggtcccgacctactactct +agacctatacgatagcgttcaaagctccaccatcgatgcaacgtggtcgtaccagtactt +atgaaaccttttttcgcagttcgaaccgcctggaaagaagcatacgcaatatcgtgtgat +cagcacgcagggtatcagttaaagagcccaagacttagtctatcgagcagaagaccgatt +agggtatacaccatgtcagaatcgcctccagactagtggctgatatcgtacgttacacga +ggtcgctcttgtcgagtgctcgaacgatctatcccctagatcacgcgtcccagtcggagt +atcccgcctcggatcgaaatgacggctaaaaggtgtaatcacgcgcgtaattcctgcaag +ctctctgagttctgctcgctggttcgaatgagcctgcaggcagtacctacaattcctgct +cggaggacctgttgcgagggatgcccccatacactgctgagggtaagtagctgaagtata +aaggcggcaatcttctgacaaacacccttcttccccttggttaaccagacaagctggatt +tatcacccctcccggggacactgccctgttttatatcgcggacttgcatcagtcgcagta +gtccgcgtagatgtggggacccctcccaccttacatggcaacgcgtgatggagtagtatc +tcgcgtcagtgagcgagttcgcatatttgtagggcgtcataacaaatgtaaatgctagta +agtgaaagatgtcaacatgcgggctcggttttgcgctccaggtatatcctgcatctgatg +aacttttcaatgaccgtgtctggcgcagggctgtcgttttgcaggaggggatgcccagcg +catctcgagaatcatcggctaatcaacgcgaaaaagttaatcttctatcagtcagcgggc +tataactccttgaccaacagaggatcgcaggtatttgtactgtggagaaacaatcgtaag +atggccggccatgaggcaaggattgtaatataccggggtggttatcgaagaagtaaagta +aggcctaccttctggggagcaatggggttctcagacgctaactcttcgttcacctacaac +acgattggacttagagagggacctacggacccgaaattcacataggggggttccccgata +agccaaggcaggatagagtctgaatccatggacttccatcaaacccctgtggtggttccg +ttcaagtcagggagtatcacgactcacttactgagtcacgtcctcaatatgactgaagtc +gataagacgaaggcttaatttacggaacccccgtttagtaatcaagaaacgcattggcgc +gggtctaacgtaagctcttcacaccgccgtctacgaaccagttcccggcgttgcatggtg +atcgccgggttcccttggagggagtaccttgtgccctgcccgtatggtcgttcctaaata +gcgaccaagtattagttgactgttgcgacttaaaatccaacccataagcatatatcgtgc +acccagggactggagggcctcagccccttctttcgaaacttaaaccgtcttcttatgggt +gaaatgtaagtttctacgtctggaataaacggttcgggccaccatgaagcgtctcgtgtg +atagagattcgcaatgagtctgggaagtagaatcacaccaagttagaaaaattctccaac +tcagctaccgcgacccatccgttggggtaacgcaagggtattagccgctcagaggccaaa +gattagagaaacgcgacgcctgcggctgtcttgtgactactccgaccatgccgtcagctg +gagaccctacggtgggtagttgggtagagcgccgatagctaattctcgagtggaactgcg +gaatgtgtcatatgaggtagcgatattgggctatcacaagtacgtgagcctgtgaaaacg +gacgactcactagcaagtaagcacggccctggcgtggcggcggtacgcgtacaaacctcc +actgcttggggaataaggtgcgaacaccgtgatccattgaggcgtggaggcatagggccg +gagtgttcccgtaccaattacgagctaagaccgcctgtccagccctggtgattacgtagt +aagctcggtacaagcctgtaattagcttccgggtggcggacattcgttcatattgccagt +cacggcagaggccgcgctagctaggccagccccgatgaaacacgtgctagttttctatcg +tgcctaaggatcgatggctatcgcggcattgttaacttatcaagcagccgaatcggcgat +agtggacacaacatgaacacgctaagctctgagtgccagactctaccgcggcgaatccta +ggccctgctggggctcccccacagagcagtaatggtcttctgcggccgcgtgcattcaat +ccgcgctggtcaatgcgttccatcgtgccttaagcggggcagtgtgataagacaattttg +ggggtttcatggagatatcttcagaaacctcgcgaggtgcgtttagataccacacgcgcg +gcggtcttttcacacaattcagtccgcggccggtaacctaactttgcttatcaatacata +atcctcccaaatgtacggtttcgaaggagatacctctcccctgttagactctaggttttg +cagtgctacctagagatcacaccagcattaaaccaaggtatcagcatcgtaacatgggga +ggcacgcgcttggcggtaagtacccgccacgattactctgtttcatagcgccaacgcccg +tatagtgtgcttttaacgtcctcagaaatcaccgactgatcagtatggcgacatcggagg +gaggttggcgaaatgttgcttttatagatcgttaaaacctatcgttggcgcgtatcgcct +ccatagaacttcttactcacctagtctgatcccgggactggtcgaaatggagacgacgta +gcttgagatctggatcgatcgactgatatcacacttaaatatgatcagattttactacgg +tcgatctccatatatctatcccagcacttgatacctcctgtccagccgactgcttggacc +ctagcacgcgatattagagggcgcgttgtagctcaaagtaaccagtgggacgacccgagt +gaggttaccgctggcacgtaagggtgacatgactcccccagaaacactgaatttgtctag +cagtacatcataatctgagaacatttagcgaagacgagaacaagctgtctcaatggacgt +aggacgagaggaatgtgacggttataatacgcgacctctatgtgtctattaaatccctac +gggccgtagcgagcaagctcgggatctttagtagcggatcgggtcttctacatggcgcac +caggtttgatatttcgagctagagttgctctaaagaaacgctcttgcttgggaaagtgac +ctggggtacgacgaagacacgggcctggttgcataccgtctcaccttcattcatcgagcg +cgatagcgtagcattatccagcacgggaggcacctggcatgggcgtgaaatacaatccga +agagcagcatgaaaaaaaaatgagcggtcgtgacccgagggtgcgtccctccgaacgttg +ttcgttgccaaggtaagggacccacgccaagcatggttagggaagcgtgaccgacacaac +atagaggacaatctcaatatgccttctgggtatcacctgggtgtgtagcagtgctactgt +tacaagtcgcgccatctgcgacgtcgttcgtccctattccctcctaaaggccccgactct +gaaaaaacctacaatcctagacacgttgtggcccagcacaacgcgtctgctatacagcaa +gtcattcgtcgaatggggcaacacgtataagaaggccgtgattccaagggcacatggcgg +gtctctcaatgatctacgacgtgacgcaaacggggaaaggctggaccgttgtccggtagg +cgatccatcataaaaggcgtctggttctgtggttattgtgtacacgtttgaaatatctga +ctgtagaacgatggaggtctctacgtagctctgcacgattccctcgggctcacgttcatg +gcaaggcgacatcacatgaacagggttgggtaacagccatctctgaagcattcccccagc +tcgcacggctcctttacccgctactacgtcatgcactggctagagacccaccaactattg +tgcaagtaaagaccataaaattttggagctgtagcgaaagcgagttgctgcgatggttag +accaacattgggtcaaactattctaatccggctaggctcattaagcatcgcagattgccg +atactaatgctaacgagcgatgaatgggcctcttcgagacgcgtccgtacctgcgaatat +caaccatgaaccctaatctggaaagtttgatgccgctgtgatagccactcctgtgtcgcg +acggcaacgtaatgtacgtgcttggtttgagctctaaacataccttcgttagagttggtc +agaggaggatattgtcatagcgctacaaccagcgccaaaggatagctccgtggctggtcg +gacgcgctagaatctaggcagaacacgtgcggcttcttgcactctgacgctcacgcattg +gactttggcggtcatctggttctcataagtccgaatcacagtagataaagatccgcgtga +taagatatgcctacgtacttaagtagcaccctctgttcttggcgatcctatcattgcggg +ttctatacatatgttgatccaaccatcggccgccgggccgtcgtaggatctaatggccaa +cacatcaatcaaatcactcgcgaggacgcggaggtcccgtccataggtgtgtatgttggt +acgcagcacctaatctggtctggtcaagcaactggcttgttccagtatataatctcagat +agactgccctgaaagtagacaatgataaatatgtaagagcggggaaatcccatcgtcgac +tgtgttgcggacgattagcttgcaaagagaggtgtgagcggctgtcttaaattatggact +cctcgcttccgtcgaacgtctgactagagaatctcttggaggtacacacgaacgtaggtt +cctcacagtatgtggcatggacaccggacaggtcacttgtatttatccattgaacgtgat +atagtgtgtcgagtcgttatacaatacatactccaagcgtactccctttgggtaacgggt +ttgggtacatattaccatggtgtggaccgatttgtaaccctataagcgttccgggtactt +taccatcgcggatgcgatcgcggatctacctatgtcagcgacatactgcccgtccaaaag +tgattcagtatgtgttaatcagcgtattgcatcatcagtcattgagagtggaccgttctc +gaagagcaagattcctgaccctttccactgggccatccagtacacccaattatatgcaga +cgaaaagctccatacatatataatacctcttcacaccgtgtgcagagaccaacttgatcg +atattgtactcactcgtacggaataattagaagggcccgactgtcgagaccgttagcatt +tgcattatcgcggtgagcgtatagaaacaattataggctttgctgcgatcgcagtgtctg +ggacagagtctcctagacctagatcagcttaaaacaatgattgtaggtaatgtgcgttgc +cgtcgggccacacctttcagttcggttacaccgactcagaattatcttctatcgggaccc +tcaaactgataatggggtcaaatggtggtggtcccgtctttctgcagtgctttgtgagca +gaatagctctcgagcgctccagtacgcctgagtatggctgcgcccaccaattggcgccgt +taatgcgtggcgacacaagagaaccagtccacataagttatgcccttaagaagatcaccg +ggtttgcgccatcctgattcaggtaacggacgtccgtgtacacgaaccatactaatgagt +tctacatcgctccaacgcgtcttgaaccctatcgacaattacaaatgcaaagtattagtt +gggtcagtgcgtagcttatccaagggctgcagtaagtcgtccccatgacagacggacggc +ataagggccaaaaattccgccgcattagctgttaataatgccatccagaaccggacagtc +tcgatatataacttacggctgcgaactggcccttatgaattacatccacgtgctagttaa +caggacggatcgcccggactaattgccgatcggccgtcccattctccgtacgatgtactg +aacccaggcgtgtgaatgggtatgtcaacgtttacccatcgaccctgcctatagacctga +gtttcattccagttgagcgtagaatgggatgagcagctttgcttgaggtgcgatattcgg +gagacctggtcagcaggattgatggttttatagtgctggattccctgctgaaattctctc +ttctgccgcatgtgaagaaggccttgcttcccttccacatgattgtaagatttcctaagg +cctcccagctgcgtggaactgtgagtcaattaaacctctttcctttataaattacccagt +ctcaggtatttccttatcgtggtatgagaacggattaatacagttgtgtaagccagctcc +ttataataaatctctctccctctctctgcctctcatctatgtatgtatgtatctgtcatc +tatctcctataagttgtttcttttgagaactctgactaacatagacattaaataaacaat +ttgtatactgaataattatataactactgcttgggggtgtggttgtgttgtgtggtgagg +gggtgtagaaatgtctaggggttgatctagcctaacaccttccagatgaccctaggttct +ggcctttccccaaagagtcctggtctactcagtcatctcccacaatttggccatcttctt +gggtgctcaggacaataaatgacccagccagatcctctagagtcgacctgcaggcatgca +agcttggcgtaatcatggtcatagctgtttgctgtgtgaaattgttatgcgctcacattg +cacacaacatacgagccggaagcatacagtgtagagcctggggtggcgtatgagtgagct +aactcacattaatttgcgtttgcgctcactgccgcttttcagtcggggaaactgtcgtga +cagctgcatttaatgatcggtcatcgcgcggggagatgcggttttgcgtattgtgccgca +ggtggttatttctctcaacagtgagacgggcacagctgattgccctcaccggctgggctg +agagagttgcagcaagcgtacacgcggggtttgcccagcagggcgaaattcctgttgtga +tgtggattccgaatcgggcaaatgccctataaatcaaagcatagtccgagatagggtttg +agtgtgttcagttttgggacagaggtcactataaagaacgttgactgcacgtcaagggcg +agaaacgtcatcaggcgattgcactacgtgacatcaccaatcagttttttgggtcaggtg +cgtgagacttatcggaactaaaggagcccgttttagcttcggggaaacgcgaagtgtcgg +aagaaggaaaacgaagagcgggtatcgcggaatgtacgtgctgagcgaaaccaacgcgcg +ttacggtcaagcgtgtatgtgttttggaggtaagtttccctgataaagcggaacaggggc +tatgtgtttacgggggtcgcatggagtacaagggggcaggacaagatttgcgcgacatgg +ttttttttaaattgcgggagatggttggctgtcccgatgagattagaacctgcttttgtt +ttagtttcggttcggtcagttcggactttggattggttttgttgggtatttaagaagggt +gtttgtgggatgtttttttttgggtcgagcatcactggactatgtgtgtcctgcgtatcg +tggcggggcctcgaacttagaggtaggacgattccgatgcaacaaccttatgctttactc +caagcgatggtgaggcaaccttgtacagaagtgcaaccgccattgtggctgggtcggccc +aaggaacggatattctcctgggtactgacaacccaggtctactgggttctatcgacggta +cagtcaagcctcgagtttactgtctcccacttaagtccgctctgggcattaatgagtctg +tggggtatcaagggtcacccaacgaagtagctagtcccgttgtacatttcgcgcgttacc +tagggagcacggtgagctacgagggtgtagctgcacacagcacggtatataggaacgcaa +acatagtagtatgtccctatgcataacagggagaagtgactctccgacggtcatttatcc +cagactctcctcgctccctactaattgttctatatacaatcggagtaaattggtacctct +ctgacaacataggggggttgaagtttatgccacgcagtctgttacacttttgccggggaa +ttgtgtagaccatgactcaaggtggtggtgcgagttactctactatctactgcttctcat +tacacatctcttggcttacaggccccagttatcagttacgaggctgccttaagagaaggc +caacattcatgatcagatccccgcacacgggatgatagtctgagatctgccggacgctcg +tctgctacaagtgtgggttgagcatagggtaagcctaagggctcgtaatggtacttcgcg +atgtttattcgatatgagctacaaggtataacgttgccttcaccatttcggctcacgact +cttacctcgcctcaccgctagacaccctgaccaaccgttagggtactgacaaccgatcag +gcgactcctaaaggacctctcagcctcccagacatgaggtccgctcgcatgctgttcagc +gagtccatatcaggaacagcaacgagacaaggcgagagcaacactagacttggagacata +ccaccacatctgtttactcttgattcaggaagacctgtggtaactgggcgacgcgtgcgt +ttatccgtcttccaatctccacagaatctgctccgtcagagggatgtatgactaacgcac +tgattttttgttcagtaaccgggcgcggattacggggcgtattccaggggtacattcaac +gggaccccaaggaaaagttcggggtatttaaggaggcggtccaactctcggacttattgg +gcgacgtaatgataagcacacctctgctcatacagtgcacgaagaccggcattgttcaaa +cacagccgtccattccgcgactattgtcctgtgtacaggtgcctcgggtcccaaatccag +cttatacccaaaactctcccggacttttttcgtccttgcaggaggaaaggacctgactcc +acgtttattaggggatcgttgggcccggacaatcgtgtattcaacataataaatgggttc +tagtttaaagccggaggtgacggtggattatggactagaggtaaacatttccggcgtagg +tcagaaagaatatagaccctaaatttacgcaaaacgtgcacacgattgtaggtggagtcg +tattaggaactcagggcgggtggaacgagtgtgttttaggcttaccatgaaccgtcgcgc +ggaaaatgatgacagaatggacggtgcttttttgcggggccaacaaaactcgcttatgtt +cgccattggatgtaagtaccgctatactacgcagcgaccccttacgacattgttgatttc +caatgctttcatggaggtttgtgagcggtcgctaggaatcttcctccagcgagtagccag +ctggccactagttagcaaccagagttcatatgagctccagtaacacgaaggtacataagg +aacgcaagcaagttcgggactacatagaacttggggtgcgtctaagccggggatcttaat +agacaagaggccatcgtatgggtcaaatttcatgtttcgtcagatgccctatccgtggac +acctaaatcaagcatcatatcctaatgctatttgctctcgctttggtatgattcatatgc +agccctgtccgtaaaatgacgggccagaggatacctgtcactacctatttcagattacca +ctgttcgaaaccttgctctgaaatcgatcttcgtagagtgttcgttaatcgccgcgtgaa +ttatataatcccccaaggagtacccttcgtcggtgcagtctacgtaactttcccaggtta +gcccccatctaatcgacgtacgtgagggggctacgggagatcgcacaagccgaagcattt +ctgctctgtttcgttacaactggaatcctcatcacgcagcgctaccggatgccatcccta +gtcatccccgcgagtttaaccagtcgagatggctcgaaccgtgtttcgaaggctggctat +tgaaccagttataaagcaggggcgactgtccgtcggacttcgatataaactatcacaaat +ttggcataagtatatacagccaagaaggctcagataggcacacgcacccaaatagtgacc +gcctacgttcaggttgcccggcaacgaagcgcgcttgctccattaatccactatcagagg +taacgaccctctttcaccgtagctgcccccatgtcggggcaacagtttcccaccgataac +gtgttctgtctagtacgtgaaacggattggctaacccctgtcagcctaattagatgacat +cctcgtacctctagagaaggtgaggagaccgctggaacataagtaaacagtttaccaaac +aatgatcatacatataacagaaaggagagatgcccggtggggtcgaagatacagctgtgg +ttgatatctgcaacggccaggctgtcatgaagatcacgcgcacgaagctatttatgaaag +atacccatgccggggcggcagcggtacctagtcctaaataccgacacgtagcaacgcgtc +ccctgaggcccaccctagtcaagggaacttaaaatatacgctgactttgtctaccaatca +tcttcgattaacaccggcatactaagtctaccctggacccagcaatgagaaaaacttttc +cgaatgatcattgtgagtttacagagattaggaacaccaaaaaaatttacgtacgtccgg +ttacccctgtgtgacccttggccacaaaccgtaaggtgcagcatgggcgttgagtccagg +gtttgtgacaccagacatgaataccctgtggcgggttgttagcatgttattcggatccga +tttcagagggtccgttgataccgggcagtacaagacaccccacaccactgaggtggtacg +tccgccagtctgctccctacgttatgcaaaattccttccccggcgttcttgcctgtacta +ctcctaaagggccgtgaaatccgacgttgctgctccgtctcgggacacccacacaacagc +tacggaaaatcgtgaggatgcacaagggtcttgcattgttgatctatacagctcttcgca +cggtgtgctactgttttccacaatgggcaaggggcgtgtaggtcttatgtaggagtaccc +cgtgatctggctataccttgctatctattccaccaaaatagccggggtcttatagtttta +ttccggatctatcaagtgacaagtccatggggtaaacggtaagtttcgtacgctgggcgg +tgatccccgcttataaacgagcaaaccgccaaagcaaccattgccgggcttccagctagt +aaatgttgggtgtcaatcgtgcatgtgactacttacccacaaagggacgcttgaagcgcc +tgaactcgtcacgtcatgcctagctcccggttgaaacacgaagacgcgtgaacctatctt +tgcttactattcgcctcctttaagaggcttcttgatgtggctctgcgacatggacagtag +tagttgtacctgggtatgttagtgaaattacaagtacctcaaaaacgaattacgtgtata +cattgttgcggagttgaacaACGGCATTAGGAACACTTCCGTCTCtcacttttatacgat +tatgattggttctttagccttggtttagattggtagtagtagcggcgctaatgctacctg +aattgagaactcgagcgggggctaggcaaattctgattcagcctgacttctcttggaacc +ctgcccataaatcaaagggttagtgcggccaaaacgttggacaacggtattagaagacca +acctgaccaccaaaccgtcaattaaccggtatcttctcggaaacggcggttctctcctag +atagcgatctgtggtctcaccatgcaatttaaacaggtgagtaaagattgctacaaatac +gagactagctgtcaccagatgctgttcatctgttggctccttggtcgctccgttgtaccc +aggctactttgaaagagcgcagaatacttagacggtatcgatcatggtagcatagcattc +tgataacatgtatggagttcgaacatccgtctggggccggacggtccgtttgaggttggt +tgatctgggtgatagtcagcaagatagacgttagataacaaattaaaggattttacctta +gattgcgactagtacaacggtacatcggtgattcgcgctctactagatcacgctatgggt +accataaacaaacggtggaccttctcaagctggttgacgcctcagcaacataggcttcct +cctccacgcatctcagcataaaaggcttataaactgcttctttgtgccagagcaactcaa +ttaagcccttggtaccgtgggcacgcattctgtcacggtgaccaactgttcatcctgaat +cgccgaatgggactatttggtacaggaatcaagcggatggcactactgcagcttatttac +gacggtattcttaaagtttttaagacaatgtatttcatgggtagttcggtttgttttatt +gctacacaggctcttgtagacgacctacttagcactacggccgagcgcaataacccccgg +aaagcacttgctactgggaggcgggtttatccatcggcaataggggttatcagtactacc +aagaagattgtgaagatattaacagcattgaaaaaagttcggactgggcatgaaacgtgt +gtcagagttagagtccttgagggactgaatgggtttgtcccaggcccaagcttgaggtgg +atgtcacctcgggtactgcctctattacagaggtatcttaatggcgcatccagccttgtg +gctgggtctacgtacgcgtgggcaccatacgtatgttggcaggaaaggtcaatcatgctt +gtttcctcgtcgcagaaacgttcacactattggctcgcgggatcgaacgggcctgattat +ttttccagctcctgcgttcctatcacgccaactgtcgctaataaaatgttatatagagat +aacccattgctatgcaaggatggagaaaccgcttcacaacaccctagaattacttcagca +ctaacatctaagataccgggaaaaccgtaggtgccacttggttttgagggcaatgcctct +tgcactggcgattcgtggagtaaccttgctaccgatttccaccttttctaggtatgatta +catgcgatcgccattgtcagtcgtcgtacgaaatccaggaaggaattcgaatacatgacc +gaaagctatggcatcataagcgtggctctttactaaggacacgtgtagtcggctgatttc +gcgcagaacttcgctcaccggacagtgactgctgtccgaacttgggggcagcgtagattc +tagctagagaccgcagcgaaaatgccactcgctaggtggctatggacgtccagctatagg +cccccacattcgtatgtatactccggtaattgagtctacctttcgaaagatcaaagttca +caaaccttctctcacgttaacatagatgctcgcacatagctagtccggtgataaagcggc +cgtgcatgcgagtatttagcgcacggaacagatattaggctgcgaaataccctcatatgc +tacagcgcaggtaacagacggttgatctccccgtagaattccctcaaggccggatcgttc +tcatgagtagcctttgtctgacatttcctctcaatagattgcagactcctgtgtcgtggg +aaaacttcgcggaatcgctgtcgttacataaatctaaacagtgcagtccaagctatttac +taccacgtatcataatgaacatctctttgtgaaatacgccggtacgccgagagatcgccc +acattgcgtgtcaccaagacccagtgtctattgggcgcgctggttatagtatgcggaggc +acccgatgtgctgctaatcactacaaactcgacaccaagaggcgaccgcgtgcgggaggg +ctagaacgcgagagccacgtcaacgtggtggtaccgctcctgatgatacgagcactgtgc +tggcaccgctgccctatgtccagctaacaggtgtcacataatatcgcatctatagttgag +tatcttatcgctagcgttacttgtgagttctcgggtagaatcgtcgtagcattctagtcc +ttagcgtaagcaacgatatcgccgatattataggggcaataggtctcacccaccacgggt +gtatatttaacgccctaagtagttaacggagactattaaacaattatgcacgtgaaagat +tagggtactgcacacgtgtcacgttgacgatgtaaacaccataaaggttgttctgtgatg +cgatgcccatacctgcggtgcaacgtcctaaacttatgcggatcaccttctaattcagcc +gacgttgagaacgccagctatactctgtgagtacaaggtgaaagccccagatcaaaatat +tggagtcttgtccgtagctcttgggtggagagtgtgaccacgtttatcccttaatactga +gactcttctcgttccacgccccggacattcgcgatacagcctagtttgataggtggctac +aagggctctatccgaatagcacaaaactcagtcctagtgcgtataggtcgtgctctgcgg +ttatacgctccacagaagaaagtacccactgcagtttgtcggtgggacttagcaaaacct +gtaaccaaaaccgcacatggactctgttttggtggcgtggagtgtgcccgccgcctttat +gctgggtcaaaatactatatgatttgttgtggtcgggcgcgacattggctcttatggttt +ataactattattcggtgcacagaaccgacttatgccccgattttgcacctcccgagagaa +atggtactagtcattgtctcggggttttacaactcaaggataatctgccagcggtacccc +gaaaaatcccatcccgaacggctggtacctatgctggagaccgaaatggagccagtgcta +tgcaaaccctcgctctttctatttggcccgaccagctgcgagagtcattcgacatacatt +gcgatggctggttcatctctctgcttcggattccgatcctgctgcctatggccacaacac +gaaagagatcttggatacgtcctcaccatagtccaacggacaaatatggaggtgtacgcg +cacggatacgagtacgacgggccgcccaatgctggtccttcgtgttatactgtttacttg +cctccggtaagagtgtacagcttgtacccacgcggtggaggaccttacgcgtcgtccgca +ggtgtggagatttcgctacctgttgcattggggcctcgccttacgtttttttcgacggag +gcccgacccgccaggccagaccctcatcattgggatttttactgccttggacggcagatt +ctgatgctggtaacgcgcttggcacacaccctggtcgtaattacgtactatcacctctat +tttaccaggggcgggccccgcctcaacgatcggtagtctcgttagaacagttgcttatac +tccgttagcactcacaactcggagaatgagcttacacagtccgtaatagtctccacagct +tcccctggaaggttcgtacaggggccctggggtctaatgtgctaccgcctaacttcgtta +gtgtaaggtctcgtgtgcacctccaataacgctgcatttttgtatagaactcctttatag +gcctgactcttcggaacagcccactaattgacgtgcacgatgctgcatatacccttctca +atgacgcataccggtgactaaatcctgtggctggttgacactttgcataacccaccacga +aaacgcggtttgcacgtggttggaagcgagtaccggttaagggaagttacgtaaacccaa +catagtgagcgatgcttaaaacactgcatgcgaacaacgaccggaacgagagcctaatag +aaccaaatggataggtggttacgaaatccgcgcacaagtgtcgtgccactctcgtaaaga +atgattgcttgcttatctatgagaaacctaataggcacgcacgtgtcgccagggaaaaac +caccatccgacaagacgctgaaaatcgagatagatgcagcccgcgcgtactttaagcacg +atagccatcttgagcgcgacgattcagcttacggagattacttctcaaagcggacacctc +gacgctgaagctctctatcgatgcacttgcatgtccatctacggcttgagcgaaccatgc +ttaacgcttggatgacgttgttagtcggattcgatcgtaccatactgtcctatccatcat +aacttcccgaattaaaactcattttctaccctcatttgtttcattggcgcatatgagcgc +cccatgggcgctgatcgacacaggcttgtagcgcacggctcgtcttgcagtagataacca +tagtctttacgtcgcatatattaatatatcctcagacttccactgcggtattttggatcg +tggcgtctgggacagtcacactctttaacgggagcgcgttcaatgtctgagtccatccgt +gcagttcggtgcgattttattcttccctgcatcttccggattccttcttcttgtcggaga +attcgccgctcgatcaaactcatcattggtacttattgaccgtttcatgctattacaccg +gtacactgatgataacgctgcggttttatcccccccaatacgcgcacacacgcttctttc +ggtgcgtcctgtcgtacccctattgcgcatcatggcactccagccgagcaatgctttgga +caggtgtaaccaagctggatctagcgtgggttcgacacagctcggttcgtataaccacac +gcatgaactgcgagtgcctcgccccagcgccgctgtctacttgctgtttagaggaagaag +caacagcttgcacccaatccgcatatctgcatataggtggccgttcctccgtggcgcgcc +gctacgttgtagcgcacggatcaaaagcgctgtgttactatacactggttcggagacggt +tcatgacgagcgcgctatatgtcggcatctgcgccccatgagcggccgctgtccggcggc +acgaataatatagtgcaagaaaaaccgaagactacggttatatatgatggaacggccctc +acagcattctaacaggtttgacaaacttaataaatgatgggccgcgcctgctgtgaatcc +cggacggtttggccggaaatacctaggcagtctttggaaaagcttttcctagatcaccat +atcgttgtcagtggccaaggtttcgttaactctcggcgtacccagtatcggcgcaatagg +cctttgatcaacccttggaagattagtcgatcgtaacttcctacatcccggtgaaaggct +ttaattctaagtcttcgccacaaacgcttcaggagcgtcgagttctatcactttcgaggt +actgccacttactatacaccggtacacttgttaagcaagtgtttgcggatgtggttaaat +tttgatggcagatttctgggtgttttagctatagctgtatcctcgaggtcgtcgtttaac +cgctcctgttgctagatcatatgtatcgttgttcgagacgctagtagtcgctcctaccga +atcttacaggttcgatctctgctcggcttttgccgcgggccggtgcttgtgctataatta +taatgataagggcagtggccgcacaactgcagattactgacacttgagtgagaactaagc +cttgaagcatagtgttgaatgttgtagaaaagtatactgtgacaaaaacagggcctggtg +tcaagtgtcctcagtgatctggatatcatcacgccttgttagcaggatttacccgcatag +taatggccggactttatattgccctgctgcgctagctagtactgcgggggctctcttccc +cctattgatattccgggcagaatgcgcgggtagtcagcattcatgtcaggcttctatcaa +cgtctcattcacccttggagtgtgacctacgtgttagaggcaatgtagcccgagagcccg +ttcaaagacaaactcccgaattaaacagacaccggttatgggagtgtgagtagtgacttc +cgaccagtgtttggtttcagcctgtcggttaacctcgcagggctaggagaatgagctgct +agtaggtgattaccgaagtctccccagaaagggaacagtcttatagagtagagaatgtca +aatagcgttattgagttctgtctactgcactaccaagagcatgcccaccagagatgcgtc +gcagtcgtagcgtagacgtcgtaatgacccaggtggcgttcggcctattcgcgtcggacg +cgcgcgctactacaacgaagggttctgaaagtgcatgttcacactgaaattctaagtgtt +agtaaacaaacgcgtgtattccagggtcgtgtgtgacattatggctgtctgcgcccctca +atgatcatcaagacgttcaattgtatgttaacgtagatatcaggtttagttatccgtata +ctttttacgccgcgcgcttggaacagattctcctaacagccctcgcggtttcaaaaagaa +ccaaagtctataccatccttgttcccaattctgcctggttgcggagaaaagaccgcctcc +atacgtacccgactcggtattggtaagtggggaagcagtcgaacgcatatttcttggtta +tatcacaggccacgttctatatcggaagtggccggattacgatttgacgttctatccccg +agagcgcattcttgtttgttactactaccacgcgggcgcttcttattcccagaccagagg +gaatgtgcggaagctttttccacagattggcggaactccagcgtgcttagtgcaggcgga +gaacgtccgttcagtggtgcgtgctttatttttcaatctgacccgacctgcgctcaaggg +ttgcaagttgttgtgcgcccgagtaataggcgactcgtcgcaatgggtctggtacattgc +attttcatcggtacggcgcttcataaagtgcggcaaatttctcaccccagtactcatgtt +tatagggtatcaggacccgaagcttctctgttccaaagaaatgtactgtttggctcccct +gtccatattggaggtagatcacttgtggattatgcaatgaatgaatgaaagtttggtgct +ccccaccggggcgctctcaaagagagtgagctaaatttgaacatttaaattgctattcca +acccggagtcctgaccggaacagtaatgaaacttcaaccatgccggacagactagaagaa +gggaaagttgcttgtatatgggagtaaaaatgatgttggtgccgtaatggtgccggaagt +gactatagagcatgtcgtgacgcaccggtaggcagtgctataatcgtatgtccttcaggc +gccgccggacctacgaagctgaaattagacaccggcacactagccccgtcagcgacggtg +cgcggccgctgccctgcagcgaatggggctaacacgcataaaacgcccgcataaccactc +gagctacgggaattcactcaggctgttgcttcgacgtgtagtctcattacataatcataa +tacctccaagaccaacggctgctcatgactctcttaccttgttagggacatttcggcact +agggaagagctgaggactttgaaaacgtcgataaaaccatcgcgggaactagctgcgtta +gaactccatattttacgggtcgcaagcttgaggtcctgtcccggcagctgcaagtgctac +ggcaggaggggatctacctaacgtgcagtaacgagcccctgcccgtaatgaggcgtactc +gtctctaatcgtcagtaagttactatgtccgaggacgcctctacgagttgaactctggct +aggcccacctgtccgcgccctgctcgggtaccccatctgcttatccaacttcacctcgcc +ttacggaatctctggttgccagtcatccgatggtcattaagcagcgtggtacatcgtagc +caatacttcagggcgccagccatattcccagccaagcggctgcataattacagcgcctgg +cacgactaatcgatcccacaagcctggtagatgacccttagccctaaagcgccctctgac +ctatctgcacgtgatacttgattatttgtaatgagcggacagggtagatgactaatatac +agggtcgtctaggtttgcacaatgcagacatcatccgcgcaaggcccggacggctgtact +cacacagctagctccatctccctcagcagcactaagattcccacgtgaccagggcgacgg +gcctcagccaaacgtatccttgatatctacttaagtcaaggttgactccgaaccctatgg +gtcggtgccgttaacagggagtctatatctcggcgttccattgcttgtttcaaactcctg +ctataaggtgaaagcgctggagggcatagtttatgcccaaagttgcgcgtagatccgtcg +ggatatgtgctataataaggactgctcgaggtaggcggtaacggctcccgccttcagtag +gcgcggaactcgaatcggagttacaggacttgaccgagtcatatccaagtttatgttacc +cgatcggatccggatgctcgtatctgcgacgaggtcggaagacggacgaaatacgattca +accgcgcgaaccattagcatctaacctttagcctcaatgggtgttaacgtggtgggctca +ctcggcgtactctttgtgcaactattccgtatgaacaacagtcaagttgcgacatgatgc +tcttacgtgattcccacagtttcccacctcaggatgctttctttagctaaacccaatagt +tatggcggcaccttcagactcccacgaggacggctatgacgttgctaaaccattcgccgc +caaaggctagcgctaacgagttctgtgagtttgttccgggccagatctccaggatggtcg +caacaacgcagtaccggttttatactggtgaccctctacctgttattaagttacagcgtt +gtcctacgtacatggtcgtgagtactcgcgtagtcaaacgccaggactagcagcgagaat +tattgtcgcgatacttactacaatacttacccgatattgacgtgcagggttgaaagagat +ggacagttgaatatctattttgacggaatcctcaaaactccctccacctcaggtaacggc +cctgtccgggaccgcattcttgcatatattggttcccagagcgtatctaagttagtctct +tgaccgttcaccgactctagggcgactcgttatcgccctccgaaacgatgctttcgttac +ctcaatgatgacaggctgtaacgtaagtgatcccaatctcactcgtgccttgtccaccgt +tccgtgaagacgaagcaatacgcggaatacgtggcttcgtaatattttgacgatatgggg +ctgggacgctcaagacttccatgacaaacaaagtgaagagcaactgcatccctcatcatg +atcactattaccagagtagcgatggataacgctaatttggtcagggcagctatcgcatcc +cgcaggtgtaggcggagactttttcttttgttgcgagttgacaggtaatctcacggtata +agcacggttatttacgcaagcgacgtccctgggagaatccgcccacgtaggaccccataa +tccataaatactgcggtcgaaaccttcatatcgtgacagaaccgctttctagggatgcgg +tccccgcattcagagttctactttggccagcgtgagacttaacaactccacttacgcggt +acattgaagtcgttcagtccagtgtgacctgtgtaccgaataacgtgtagaccagcgcgt +ctacgacttagcgcggctccactccaaagcaccttttgggactttccaacgagcctgttg +gccgttaagcggtatttcacaaatagatcaccctagtgtcggtaaccgactaccctattg +ggatcatcgtgagctcgaaacactagaggcggaccaacggatgacatttgattcggctct +acagagcttgtcgccagagaaaaactgtggcaatctacgctcgcggggaattgactttag +cggcccctagacaggtgtgggacactagtctagattcacgtcctacacgacataacagca +ccttcctggccagcccagaaatagtacctggacgacatccagccttccgacgccataatg +tgagccgtagcgcccacgacgatcaacgaggagaaatttacaaaggctgtgtgaatgcta +cgtcgtctaccattgctcatcgaaacgaacgcaacgcacagcatacaacgtttaccatgc +cggagcgggatcctcaagtacagaaaacagaggtctaaacatgatccgaacaaatcggta +ggtttacacagctacctcgtccattggcgtactgcatcgatcgtgcttactacggtcatg +ccggcccgcgatgcacgtacgaaggaataccctgtctgcccccgcgcgagttacgctgtc +tcgcacataccgagcactgtcgttcgaagctaaactatgagcccagccgagctccttatg +gccgcaacgctggtgcggccagctgataaattccacagtacacgatcctcgtgtaagatc +tcgggcatagtaagtcatttcacatggttaggagagatagaatacatggttctggtagct +caaccaggatttgtggaacccttggcccttggtgagtgctacaataaaattctccgtatg +ggacaaccaaagggtgctggatgtgacttcccggcccaggttagatgtccatatcattca +tacattgcccgaccgacccaatgcctaaatcagaggcgccttagctagttcttgtagtgt +gccacgtccggccacgcagacacgaccctcggcgagtgatcaccattaccggattggcat +cgaagtctttttctgggaagttagccagtttggtgtgcggtgcttagaatcttattccca +gtcaaacgcccctgggacgaattgctaaccctagttgccacgccggaaccatcttcggga +gagtagacaaatccgagttagatatgttagcgtcttcgtgagtctgaaatgtatcacttc +accgcagaatacgcgaatgtctgtttgccctggactgacggaattggcttaaaagccgac +tagagcattttggtacggttcctatccgcgatgtaattacctatctaggttatcgctaga +cgaatagcgagtacagtgtagcaggccctttgttagcaagttgctctaaacagttgtcaa +aacgtaggcacaatagtgcgattcttctaaatccgggaagctcatggcgctgggcagaaa +tatcacatacgggaataatcaacctccattttggttcgttttactcgatgagtgcccctt +gcttgagacgagcgttctgagttgatggcatgtcgaaaggtttacgcggtgagtagagca +ctttacccctacagatcggaatcctcgaggaggacagttggaacttcacattaacctttg +ttcgattgcatgaaggttgtgttctgggagtaggctcccaaggtagcggttcatgctggg +ggcagccctaagtttgtattatgtgagtttgcgtctgaaactacatttagcatgaggaac +gtaagctttctggagggatcttctaaagccaggtatcgcccgctacgatgccggagccgg +tggttcacagctacctgtgctcaaaggcttaaggctaatcatagcaacagtgcgaaagga +cgtctttcagatttcgaaaggtgctgacacaacaagggtcagggcggtcctacccttctg +attccctacctggttttttagcaagggtcaaggctaggcttatactcccgaacgctttaa +acactatcccacccctgacggggggaagttgcgcgttaagtataagaataagatttaaca +gtacactttaggttcctcttccgcgagccgtcatacagcaccgagcgccgttgaaacgcg +attaacgcgtattgtcgtgcgaaaaaaaaacgctcgccagcatattggagtgtcgacttg +aaatattgaacaacaccgcatatcaaggacgaatagtagggcttcactacctccacctga +cggccctaggacttatactcgaaaaagaccttccatcacgatgtcccttaccggcgagag +ggctatatacgcatgaatagcagatcttgccgtcgctgagtgtcacccagggttgctcca +gaaaggagatagggcggagagccatcgacagcagctctcgtctaggtggtagcagctaag +gagtcgtgtcgtcgcgccgagttggaacattatcgatgtacatcaatgcagtaatgatgc +tgatagactcgggagtttcctcaaacccagagttacgagaagacgcaggtctatcagtta +gaaggagtcagtattggcctttgaaagatcttatgctcatgcccaatcgtagttaaacgc +gaatcgggaaggccaatctggcggttttgacccccggactcttaagacgtccaatgtggc +tagacataagtaacgaattactctataccgaggggcgggaaccggccaatttattacgag +agcacgagagccttgtagcggccagcacactatcctcgagtccctctatcctgagacgta +gatatacatatacgcctagagagaatagccgtctaggcttccgtcgccctctccgtcgtt +cgcgtgaaccgtaagtcttccgcattcccttcctcaagcgcgttggtgtgagagtggtat +tgaggcccagtcttataacgcatatacttgtgcactctattacttaccatgggaaccaat +ggcactctcgaatcatgctcacagctgagcaacggtgctgctcaccaattacatatgagt +cgtggtttagcgttggagcggaagatgaatttccatctgttcgcgcgcatcactaaccaa +tatacggttatcccagcgctatctagttctgaccgggttggtagcgaacccttttgcaag +ccggcttagtggatgtgaagtgggagtgataacttaagccgccacgttcgggggggactc +gtttatattggtgctggaatacgaacggcgtgattcgtagtcgccctaatcgggcgcgac +aacacatgtagtactgtcgaggcggtttaaacccacagtaggtactctatcagcagaatt +atgctagaagtttcacaacaactttccgcatgaggctcagcggcagcgtcgcactcccaa +tggccagtgccggtagcgatgtttggtggaattagttccttcggaatacgaaccggattt +aaagagcctcggagaacctaaacgaatccgtacgcatcttgcccaaggtgctgagccttg +tcgcctttctcagttccacctacattaatgcaatgcgttcgaagctctgaccgcaaacag +gaatcaagttcagacagagtgcaagagtttcgcaataattgggaacgacccacttgatat +aggtgcttttagagatgtgtgtacgaccgtccttcgagcatacctacgggttacaattgc +tccggtaagtcaaggcacatagaaaacatagccaactgagagtgtatacaagattacctc +atgtagactgaaatacacacatcgctttaagctctcaaccgatgtagaacagattttggg +cggcgttgacagcgtgcccgctcaccggtttgctcccttctcaccaaataaccatgagac +gactttggtgactggactgccagatgacgggctacaaccgttttggttccgaattcgctc +taactcaactaacatcatactatatgcgccaggatattctcgcggttggacccccctgcc +aattcgggttaaaaccactccccccatgtagggagctgccgcaattacaatatcgacgat +cccagatggacgctcacaaaatatcagtcctttcacgatccgctcatatagacggatgaa +gggactgaggctgttagatagtgacgtcgagcatggcgtagacgagcgcaaccgggtcga +ggcccgcattaccgtgacacccagttgaaaggatttacactgcttcattcgatatttacc +actttgtatgaggagctcaacctaagtcaacacggaccatcatacaggtcgccagtaatg +agaaggctgctgtgccatggagaagcgctgctacagcacacaacgaacatcttgcaatgt +gaaggagggtgctcttttgggatgagcctacggggatgtgtatccctgccctgtaggcag +ttgggacttagcgcgactatctagataactaaggcgccagccgcggctgtttgccgaagt +cgtgctgatgctgtacaacgaagggcgagcgtgttaacatgctacacgttgacctagact +agtccaagtctgaaagtcccaatttaggtcgggtagtacagtcctcggttccagtcccat +gttgtgccgacaaggacaagcgatcatcaaatcgactgaaattgaatcagctacctcaga +ccacattcagctctcggtaacatgggaggcttgtggttgcaccgtaaaagggggatagcc +catccatcctgtaaacctacaatcgcgcgtagcttaatacgctcacattagacattcgat +cgagagacctggtttcaagagccttcccttttgctttagtgggccaaatcgcaaccctgc +tcccctcccttacgccttatacacttcagtgcaaattcatgcgttcagcgaacaactgga +cttctgttgtacgtagtccacgggggcttattcattatagaaagccccctactgtcaccg +ttatatggttcacacatgagctgatcacctagagagtcgtcatgcacattcgcctaacaa +ggacatatgagtaaccgggaggggatatcttcgatttgcagcaccaatcgacgttgtact +ggtctattgtcggttaggtccgattatccgaccggcaatgaggcaagcccatctattcag +gaaacttaggcagttccctgtgctggcccgacgtcgatgagttaagtctatacaggccgg +ccgcgagtagttaacgagaccaacatagaactatcatactagccggcaatgatcaatagg +gtcttagtgccactgtccttcgagccctcgcctaatttagcgcgaccggtttcctattgg +cctgtggggttgcgggcgcgtccgctttaagaatggtccttaacacctacccggagatcc +attgcatagcacactctccccattagcctagacacgtcgtcgcccgtcgactttggctgg +aatttaatcgccggggatatcgaactttcacgccctttaacgacgaggaaacctaccgtc +gcctggctggtaaatgggtgccttacggggactcacgatgctgtgaaccgcccgccagtc +tctggggctcccaaaatccaggttggaattacggacctccgccggtactacgcattacgg +ggtggaaagtcctaagataggtgaatgaaagggcttcgctaaaccagtaagtcattaaca +ggacatcggcgtcacgtctcgcgggtttacacggcgcacaaatcctattcccatgataaa +caccttatgccaatccacatccctcgctgcctaataaaattgtcacacctgcgctactga +ctaacgtttacgcaatgagagatgaattccgacacccacgcttgttgcaagcacagccgt +atgggttctcgggtaaggtaacacgaggcacactccggcgcggccacttcggcccctccc +tgacgatgaccctcattggtcaagcatcagtcgaatgattcgtaacaaggagcaaccgac +tcagtagagagggtgaatctcacgcgctagcctgaggaccgcctaagtgcttgctgtgcg +tcgcggcagtcgcgaggtgcgggctaaagtaaataattactggtcttacctaattaaagt +tggtggttagggacaacgttaccactaccagggtgcgcccctgaattcgggtatcggact +atccagggcgccttttgcggccttaaatacctttttaatcacgctggagctagaaggcca +tcgggatagacggggttctaggtactcgaaaaaacaggcctaataactttattgcgcttg +gactaacctatgtacaacacgttgtagcatactatggaatgttactgacctacacggata +gcatttgttcgggagcgtcattgacctcccagaccctatgccgatctgcaccattcagtg +accatccacaagtctctaggtttagccaaaggtgacaggtcaagcacttgcgcatgtcca +ctagtcgattatgcaacgtctctgaacagttagcacttatctcccgccgtgtgactcacg +cagtgaacttacctatagcatacgcctactattgaatgttcgttgttctaacacagcgct +aatacctcactggcagaggtgcgcacgctcctagtatgggagggagtcaggtcagagtgt +atgagactgatttttattcccgataggggttcagtgaaatcgacctctcaaaagagaggc +gcagaattcgctgataagctctgctacgatcgctaaggcacgataagcagggcggtgaag +gttggagcaagataatatcacccggacgcgggtcctgtcgcaacgagcggccgtgagacc +tggtgcgcaccgtgtctcgatcggccgaatatcggaacccactgcgtgactcaaatgata +tttttgctatctgtgggggatttatgtcccggtagaactctgcttctagcagaggataaa +ctttacaaggacggcgaatatggtgtcagagcgccctaatgatcccgtgctattccgcgg +gccaccggccgttaatggacttcgggttagaaggatgggttattcatcttccacagaaac +gcccagccgcaatcgtgggtttactcgaccgcggttatctgcctacttagctgcattcct +aaaacaggattaaaaaggccgcgagggttgcgaacctatggttgagaacagagtcataga +gtcagatgcgcagggacggcacggatccacatggcagttaactaatattaataccccctt +agcctcgtatatgggcgtgtgcagtcttgtccactcgcggacgcgtatccgagcgattct +gtcttccaacgctattcgttaccactttggcacctctttgctaagcaggatgagaacatc +tcactcactacgagccttgactttcagcacgcggtacgagggcactgggcttctcgtcct +ttgctagatgtaggtgccttcccgccctcatgacgatgtcacgtctatcggtttattaag +gtcggggaccattacgagattaccccgcgaccttcgtccaaatgggatcacggcaacgtt +ccacgaggggcgcgttgcctgagccactcgggtatccccttccgatatccgcagaagtct +agctaggagcaccgccaagcattacccgattaagcaaagcctactcatcgcatacacggt +tcttggggtttgcgtcagatagcaacttccggcggcagtagagatgatattttatccgat +tgagcttgcccagcgcaccctcgggccccgtggctcttctcttaaatgtgccctgcacga +tgttagcggttcctactcctccccgagccctatgggtggacagactcgccctctgaggct +gcgtgttcaactggttccaagtccggcgcctgtggatctacgacgcgaccagcaacatta +taccaatgtctaggcttagctcgaaaactagtaagccttagaactagggtcgtagcttct +tctaaatgaagggcagcgtcatagccatccacgttagcgcttactcaatcgcctgtcggc +tgtcatgttaccgctgccgtaagttcgtgaacataaaatacaacacattttaggtttaac +aaggattgtttaccgccacgtactggtgccggtagtgaaacgaaaaacctcagcatcggg +aggaggagaacggaatccctaccaatcttatctctacttaaagaacaaagcgcgcggtac +atggcgcagacgagaatgaatccccgaacgggccgagttagactcctcaacctgtcgaaa +agttgcgatccgctagatcgtagagtacggacttaaaaaagaaaagaaggtctctacccg +agcggtgagcccaaccagttccaggttgctgccggattcttccacacggcggtgccatat +ggacgaccccgtactttgggcattctaggctacctactgcgaacgcctcgcgttcatgcg +caaagttttctctagataggcgcgctttggtaagcatagtaataggttcttcagcgtcta +aagcccgcccattaggcctggcgactctgctttagtggtaaagagatagcatcgatgtac +atcgatggagagagtattttcacgaaagtgcgcgccgtacactatttatcggcatgcgcg +ctaaactggagggtctaataaccagatcacgcaacgaggtcccatgtacggttcgcattg +cgaaagtatgggatactagaggttttatcgggcctcgcttgaggtctgtctgggactggc +gcacatcgctcgtcgcccagtcgatagcggggtgattaaataagaaatatgttagtgccc +ggatttggaaccaaccagtcccggtagcggtacaaaaagcctttcctgctagttctatgc +ttaaagcgtactcctgttacaatccgtaggcaacctgaagaggcaacctggttttccttt +atttcgactttgtttgccatttccaatgtgatactgtgcggcgaccttaatgctttttgg +taaaaccataccgagatccagcgcacgcgacattcagaccggtcccggtttggcggtcaa +cctcgtactctgcactgttcagctagaggggtctcctatcccgaggtaccggtcgtctaa +cgggtggttacaggggctggtcctactctaccaacagttaaggagggcaacaagttcgat +ggggcatcgtataacttgaatgccattggacaaataataattgctccacgtcccaaacct +caactgaccttgtacgcataggtgccacctgcacgcaaccgagctcgttcaagtgtcctt +cttagctggcgccgagtgaacctgcatctgagagtctacccaacgatctagtatcataat +gtctgtagccagcgactatgacacttagagagccgcctaagaaagtgtttgcggctcctg +ccccggtgcgcttgttcggtgggaggtcgttatatagaaccatggggatataatgaatgg +taacatatctgccacgttgacaagccgctattatgaattcagggttggatactattatgg +cccttcacggtcacttgtaggacggccccaaacaggattagtaaagtcggtggtctaagt +gtaagcgataggcaaactgcggttattcgcgtagaccgcttgatgatgtaaaataacagt +tttcatgtctttgcaattaccgcgtgtagtctgaggacttaaggccccttctcggatagt +gaaatagttcaggtccggctgttgacaggtgtcctgaccggaacgctttacagctcctga +ggagcgtagcgccctacgtccttcctgatccagccgcacccatagctagtaaacaagttg +actgcgagacacaaagtcaagggcctgggcaagcgcgggccggactgcttgtcgaatatt +gaagcgtactcgatccagatctgcgccattgagttaaaaggactatacgcctgtctccag +ccgattgcagaaaggacagatcctaatagaagaactggggctccattctctcaccgacac +cctcctattcctatcccactggccccattgctggtaacccaaacctctcacgacgattca +gcgctgcgattaaagagtggagtaaggttaaaatcggttggggcgagtagtgtttgatgc +aagatccattgattatcgccagtgggatggcggcaaaggtaccatacctcgagcttattt +gggtgcctcactcctcggggaaccatatagacttgcacttggcaaaatatggtcgggttc +aaccgaccttttatgcctggaccctctgctgagggcctcttgatcaaaatgcttgcgttg +cttataagttgccgcttgatgtccaggattattattccagcgtggaacgggaaatgatag +cttatctgttactcagggcgcctgaattagggttgccattacataaaggaacgacaaggt +gagcactgggagggcgcattcttataaccgggcatatgcgcggaacaccagcgttggatg +gcctacctccgcggaggtcggggtcgaaggcccccgtttcctggaacaataacactgtcc +cacttggtttgtaaagaacctccactcgtcatgacacggcctagcggtgttatcggcgac +gataatcatgggtctttacaagtgaatcaggcttaccaggcggaccaggaggaaacactc +cacgagtgagacctggatccggggggatggcatacatcccatacgctcactcagcatgca +cgttcctagcacatgctggaatcttgcaagctggacagagtgtattgtggcccttgagct +atacttctaacgccagatccatgtttgcaaacatagctccagtggcctattcgacggttt +agcctctgcaccatgttatggctcttataggtgttgggtcgacagtgggtgactagacgt +aaagagagtatgccgtggttgaaccgagacctaaaaagctcaagatcacgacggatatct +ttaacggataccagcaatcggctaagaccagtgtctactactcgtgatcggcaccggccg +cccgttatctggtgtagtagtcagccccgcatcacccgtgcctatgcgagccttgactct +atcagtctaagagcacacgtttagacctgagccaagcgtaggtcactatcgagtcaacct +taaccctagttgattaatgctcttgacgtgtatgattacaccgaccgcgaataaactctc +acgcgcgtgacggtttcctcgctagaagaagccatatactgtacacactgctgtgaccga +caagacttacctttggtttacgtacaggtggacagttgtttctcccctcgggtcgatagc +gtttggtcgtgattccaataagtgccagatgtcggaacaacatgtttccataaagacgcg +tgacatgatatggtttgctatgaagccactacgaaaatgccagtgcttctctttatattt +tgcagatgtggaagaagtgcatccattatagtccttttacgtacctggattctccgccag +cactgccactactttcttactatccgttggggggggacgctcaacagagcgcggactcag +gaatcagataacgaccggaacggggcatatgcccagcattcgttgttgtaaagcgattga +gtttgggctgctaaggggccggcagttcgttccgggatacccgcaaaatttatgcctttg +tccggtgattctaggtttagctcgatccacgaatacgacaatacaaggtttgcctcctct +ttcgtctatcacgcaagcttagagttgctaaaatttcgtagtccgtgcgttaaagctccc +tacatttctaagctgtacgacaccacactatcttgcaacaagagtcactctatttctcat +atccgaatgaatatcgtcctgtacacgggtggcaatctcggcaagatggccgagatgtgt +agcactgtcacgttcaaaagctcaaacttctgcccactgccagccctaacagaatctgga +gacatcataccagcgctgtcccatgtggcggagagttgcttcaatagaacgctatcaccg +tgggatcacatacgtcactactccgtgtgacactatttattattcctttacctccaatac +gcccgtccttgcatcgcattttgtagtaagacatcagacgacgttactgccacggaacca +taaaacgtgctgagcccacgtaaacgtcctatcggtgaggtccgctcatcgtacgactct +gaaatttggaaactaccagtttgttggcggtgaatatccaacctgtcggcatacacgctc +acgcgtatggttggtacatgcgaaaaactacccaagcaccgggcgcgcgagacactatga +gtttagtgatgatttacggagcacgttttttgaactcaacagaccgattgaatccttcaa +acagggttactcgttcgtgacaaccgattacagcattctgaacgtggtacgtgcacatag +cttggagagttgcgcgaatctctttcgtaccgtattctacctgatcgctagctttccggg +gtaacgacatcggcaatgatgagtagcagccagtatccatactggacaggtactccatat +aaaactcccgcttcaacacgcgagatttgaaccgcacagtgattgtgctgagtcctagtc +accatcccgatcttgtacacgggtaggggtgtaacgtgggcagatgatgcttacccttcc +gctggcttgtaaaggtgccccgcttcacttgatgagctgcgtcgacaagaccacccaacc +cgagccacgtggttccgacgactcaatgatttccagtatggtccaatcgagcaccttcca +ctcatgaaatttgagcactgttggggatcgagtatgtgttttgcagtgggtctgtagcat +ggaaagatgtaccctaacccggctctggcattatcaacggtggattgggtggttaaacag +cttcccttcggagacttaatggactaaaacgaatgaatcagacgccgagaacgagaactc +accatctggcccaggagccatatttttgattggtaaatcgctcgcatagtgcccgatacg +atgcgtacttgagcgtaaacggcgcagcctctaatcataggtgattgctaagtctacggt +catccccagtggctgacgaggaattaaagacctatttccgtacttgttgcgcgccttcaa +ttatccagcgtataccccgatggctactgctacatgtctaaagtgactagccagaaaaac +ctaaccctcgcccacgaggccttgatcatctcaatcatagagtaatgttcattgaattgc +acggctcttggtgtgcacattgagacaatttctaaaccgacaagtttaatggccgagctc +ctcctgcgtccagctggaccttcatgcaggcatgaaggtccatatatattgtcctcccat +agcccgccgaccgggtctgactcaactgtgttttcgctatcccaggctagcacttctatt +ctttgttacgtccagtcatagtgttactatagggtaattttagtcatagtagacggccgc +tttttcgtatggcccgagaccgtccaccggctacccaattaagtcacatccggatcttgg +gtctagatattcctatcgaaaatagtctcgccgcctcactgcgtagttcagggggcgtca +cacttgttcgcggcttttcctcatgggatctttacccgatggttgatgcaataaatgtct +acaccggactggcgtgtccgagacgactttatacacgtgtgacgagtagatcagatcgta +cgaatggtctgtctcacctatcccagtgggaggatggaaaacactcctgcctaccgggtc +gaattatttacgcgtgttacaatatgtaatttagaaaaagggattgctggtcgatgcgtc +tccaagggattttttatctaaaagcatccttttgggtgtactctgatcgcacgtcgcaga +cagcagtgggttttgacgcagtccgtaggcccacagactcgtttgttgtttattaatccc +aggggagcgttgaagccacacctattctgtagctgtttgaaaggtagctagcccggatat +tactcaaggtgactcccttcagaatcacacgtcgctggagtcgccacagggtggcatata +cgagtgatagagcaccttactttcgaggtagcggtacattagtgcaacgatgaacccact +atagtcttagtgatttcatgttttacttacgcgaaaacgtggggttttgtcaacacgtat +acgttgaatgcacatgcctcatcctaaactgatgcactgccacaagtctgaaagagcgac +agtctgcaacatagcggaaggttacgcccaagccagtggtgatcccccataagcttggag +ggactccccttagcgttggatgtctttgccccagcggcctcggtgtacgggttctccacc +ccactatggtttggaactatgaagaggtacggcaacctacccgaggcaccaaatcgtgaa +cctacgcctatatatacggatagcagggtatccattcttaccatgagctcgtaaaccact +ccgctgaattcgatgggctttggcgcacatcaccgtttctatcacagatctgtcaacgga +atctaacgctatttactcggcgcacacagatcggaaaacccaactgtggcgcgggacgga +ctccaggaatcgttacgcgttatcaccttcggctaagtcttgacgacattagagctatat +ggtattaatagtagctgtacatcaaatgataaaattatctgaattataagtgatagcgcc +cacataatgacacacacgttttagatagttagtagacgctcgagactttgcgagcaagaa +tggactgttaaccttaggggcgggttcccgcttacaaaagctgattcgctcctagagatc +tataagcgaagttcaacccctaattaccattgcataagaccgggagaacctgtgacacct +gttcccatgggattagcgaaggattgttgacttattgccgagtgacctagtattgattaa +aaatgcgacgtgaagtaaccaggccttcgatgggcgtctccgaatgggccagtaacaacc +atatacaaactacaagttaaacccgaaaccgtggctaccatgctcatctagtcgggttcc +cgatggaacattccacggtgagcggccttggatgtcggaccaccatttggcaggacaacc +gtcacgattcgcaacagcggttaaagcaagatggacgccaataatgatattcgaaagtgg +ggttaaaactggccgccgcttgatcggtcctacttagtagcgtctcagatgctagaacca +ttccgagtgcaatgtgtgctagcaacagtggaatcggtctataacggtttcatgatccct +tctccggccatccattgagaacgattctacattaatctgttaagcgaccgccaatcactg +attagctccagaaaacctaagattaccgtatataagaatcaacctgctaaagtaggaagg +cgcaggttgccgatgaacagatcaagttcatacaggagctcttaatccaccgtacccaag +acctagtcaagcgggatgtcgttaacaactttgtacagacatttgggagcattgcaccac +agactccaatgaataacgcatccgctaggaccggatatagactgaagaaagtatagtcag +ctgcctcctaaaggaggcagtagtaggagccaacctaacgtcgtggatacgcattactcg +gtagcgtggtaaacacacgaacccgatctcagaattttagcggcgagaagttccataaat +catatttctacttcgtgctccggcttcatctgatggtggtcattattctccatatgcatc +cagtagagcttgcgcttcacgcaaagttccaggatgctcacatatgtccatacggcgcta +ctacatttactcgaacacttggaagcccgccgtcgggtgtatgactagcctttgactgag +actcagcctcgcaattgtatgtaactagcgtatcccggcaaagtttataggtccatatta +acaacagatgggagtagagcagcagcttttattcggactggcacctcatcgctttcgctg +tctgcgggatcaccggtctctcttgaacgtgttagagcctgagggatctgagggcacaca +cggcacttgtatccggaaaacctatgtatagagcctcggttgccagtactagttcgtggt +ccatagcgcctgaggggattaaacgcctccggaaacacgcgagttgttcttgtgcacgta +aaaatcacttgatgttatcgtgttcggccccagtcgctgtctcacttcaaaccagcgccg +tatccattctatgcaattacgattatacttttgacccgatctacgaatcagttacccatg +aatgcgacctgcgataacatacagtgcgacctccagtcctgttcgattaaatcgacagag +ggtcccgaacgcatccaagcggcttgggtcccgctggcaccgctgggaagtaggtagaga +cgtattgaaggaagcgtgtacagattggtgattacggtgctcttataggaccagactcgg +gcgattctacggggtcgtccacactatggacccgagcatcgaatcagtatgtcaatctga +agggactaatcggggagacgctggactccgtcaggagtgaccagaagcagggatgcaaag +acatcccggacgtggatagactacaaatcggacactcagatacatacctctagaaaatac +tattccccgtttctattccgttccgcggccttttacgtttagcttggagcaaactatata +gccgaggagggtactacaacgcgacgcacttatatcccaatgaaagaataaaagctggta +agacaacgctagccactctacctgtgttgcactcgcgatattagggagacaggttacaat +cagctgacacatgactagctgacccggagcactcaattctgcccatcggggatctgatca +aattcgtcgtcgcattggacggcttccctgcgtagcgaaggaatggttaccgtacgcctc +ccaacacacggcggtcaaaatagtcttcagcaacagtaacacaaatctcttcctagtact +cttggtacacggccctagagttaattgtgtgcccccccatactctctacatgtgataaca +gcgacccactaggttgccaaacagagtcggaagtcctatcgagtccagggcgctgtaggg +cctacagactctccgatgtcctgtgttcttcgtaattgcaatattttcgggacccttctg +ctgttgtcagattcagtctgttccatcttctggaaatgttgaggaactcgaaaacgctaa +ctccctgatatttgtggccttacatcaaccgtcctcaggtgaagcccaatgctaaaggag +tgaaccagacgtgcaggaagaagctgttgaccctttaaagctctagttcttgtcaggtgt +tccgactcgctggcgagagtatgatccagtaagcggcggacctgcgaccacatgatgagg +tccctacaaaatcctatgctccctgcgaattacaactcacagagaacagcctaggctttc +ttagttattgatgcacattctactgacgaacgcagcattcgaactaaaccattggtaatg +taattgtgacacgtgggaatctatttaaagctgcaagaactccaccacgtgttcatccac +atcggtctctgtggaatggtccaggaccgtcccaatagggggaattgcgagacccaacta +atcgagtgattgaacatgggagcaattcccgaatagaaacttgcaacgcgcagtactacg +acgatggtagcaataacgacgcgctacttcagctcatgggtctaaattagggcgaacgat +tgcacctaatctgctggcttctctagattgtagatccacagggccaattaacagtgcaaa +gaatagcgtcatatgattagtttgaaaataatatacatgaaaatcgagcacccgcatcaa +taagctacgagagtctttggagagtgccaatacacctagcacatgctgtgcttatgttat +gaaaattcatacttgactaacgttagccaccagccgatggcgctgtcacaacgaccctgg +gttaccgtttagttctctaagaagggtcactctaccagcggggttaaatataccggccga +ctgtctcgagagtgggttgagataactcaatttggatcagcattaagtctagagcgattc +tcgcggagcgatctatgcgcactgacttactcttggaatgtcactcgcggcttacatgcc +tccttgttccgcggattgaatattttatgcggtagtcatgactttaatcgtttctacaga +aaagaccgtttgaaatggcagaggaaacaaccctgctggatcctccctaagtcacatccg +gacggacagattctacttaacctccaataaattgagaaaaatgcaaaaggatgccaatac +ctatagtacattttacgtttcccgtgtggttcgtgccaacccctggacggtggatgtccc +cggtgggtttttggaccgggcgaaattattggccaacccggaaacccaccgagagcctaa +gacgtgcatgatagttataagtttaatgggagccttaattgcaaccgatgggggcgggta +tttgtctcctacaccgacactatggttgttatttgcggcttcactcaactacaatctggt +ctgtagagagtaaccccgtattatcttcccttgcgccctgggtgcgttagcggaagtatg +gggattaaggggcgtgaacaatgcttctaagagcccggcgctaacggacggtgtcacaga +gtgtctaggcagagtccccactgtggaatacgcatgcgtagcgaaccgcgcgagtcagta +ggaacacattgggagcgattgttcctcctatcagccggcctagcaagcatgacgtcaaac +cttagtgagcagcccaagaaataacgctcggactgcaacagatctaagcgggaaatatat +cgatagcgaggaagccgagaggactaagcagagagacgaagaggtgagccggagtgattt +agccccagatggcaggtatagcttccgttcacaacgaattgaacagaaagtccggcgccc +ctggaatttcgaaacgtcaccaggttggccgtaaggttggtaactcaacaccctaagact +agcggtcttgcgtcatgcaagcggggcgtgtagcctgcacagacataatacggtagggag +gttaggcgtggggcgacacagtaagatctgatgaatccatgtacgttgcctccccgtcgt +acgcagttgatacttcgcatcatacttagcagaaagcatcatcgcgacctctcgtacaat +ggcaaaaaggagggcttcgtgcacggggtagagtcttccgcactctaatgaatcaacagt +cgaggttcatggccacaaatgtaacgacgcgatatgactcgttatgtctaggtcccactg +cggatctccttagaagcgaattgtataaatctcatagccccccccttagcaagtggtacg +tagcccacacgatttacgcagagtggggtaagacctcccccacgacttggggaacgcgcg +ctcaccggatagctactgccactgtagagccactagcgcatagtgtatccatagtgatgt +acgtagccaagcggggagtccttgtcttatgactagcgccatggggctatcaactgagaa +cggatgcacaaacggtccggccattcgcacagtccgccggtcactaatgaccggtctgca +tggggctgcaacgatcgcccaaggattggaaattgttaataagagtccagtggacaattt +agtaacgcgacgcgcatctctccccgcctaacaaggctcatttttagcttgacggcgcgt +ctcacgttgccgggctcagctcgagctcacgtgccgcgcggggttacctcaggtttgagg +aatgtgtcttgaacggttcgtaccggcttagcgtcgggtgctcctcagggttcccagcaa +cattcttaccgcaatccaatactgagggcgctaccaatctaacgtatcactgacccagta +aaactcggtattacgggggcgatatatgtgcttgcctcaacatagaactaccgccttgac +gttagaacgttaagttagagcacctgcccatctggattgcggcgataaaatcgattattg +tcacctggatgaggaatatggcggacaaacgatcgtgtggacctgcgccgcaaccgtggg +atgccgcagcagaatatctacagagcgtttgcaggagggccacgcggtatccacgtaagt +tcgcgcaatagcagcatcatctcgttcggggttgctgctctcagactgtcgatacgtccg +aataccagcaacccctcgaggctttgtaatatttacggagtcctaagggatttggtgccc +caagtatagttttgccgaagggggggcacagtgccgtgactacgattgggctattgggca +acccgaccccgtgcgcacacgtttgatctcagacagagggcaaaaagacgaagccacgag +ctcttcgaaatcaatctacatctatgctgggataagttctggtccacacctagatccgag +aatggaccgtggataacgagcaccgttacctttgaggcggcagcacttttaacaccgtaa +aagtaactctatagttgtcagcctttaaagattgcgttcccaatacggtacgcaccgtct +actaccgtcaacacaccgtagcttaggtccccccgcggcagcgcttccatcgtggagggc +tgtcccccatcctccgtagaactgcgtttaccggtctggggagactccctaaagaaacac +cacaggtgaggtggacgggaatcaagttaacgcattcacgtaattcactcctgttcactt +acataagagaagttctggttcgcgccttaagtgccatccatgaggcatacgatgcgatgg +ggaccacgcctgtagactagagaaacaccatcaagttgataaggagtgaaaattagtata +ggtctggcccgctcgtctgttgatagggcctttaaatgtaataggcctccgctctgaacg +agtccgtacttatctgttggatagtaagaacacggttctcagtccgcaaggtagtatatg +actacgcgtcgatggacctaaagatacgtttggcatcgtcctgagcagcttatgaaaatt +gctgcgcgtttcaggtggaagaatctgtgttattagtgcggggacggtagtttcgtaggg +aattatgggtagtacagatctatggacgggaggtgactgtcagcagactgtgcgcaggcg +ctggtggtataatcgctgggaccacgtactggcaagacgcatgcagcctggtgacatcca +caccgccctcgctcagataggacggacgtgcggcaataccctatctggctcctggacacg +gaaaaacagcagtttaaaaaaaagtgggttttgtgcattatcactttgtccgttcgacag +tttattgcacctcccagcatgctagtaaccccttgctctgatttgagatttattatcgta +acacggagtcgacgtgaagtttgatctgcggagaataggccgagaagcccctacgtaccc +tatgattcccgccatgtgcggtgtaaaattaaccactacttatggatttcatccaaatta +actgacgcattatatatacctcgagtgtgtaagccggccctcgcggtaccaaatttcggg +ctgcatacctagaagtgtatgtcatctaaacctaaggatcgggtagtgacgtgtaactaa +cacgtgggacaatgtctgtcctgagctacgtcttaagaagtatttagtcctacgtactca +ggcatcgatactccccgatgttgggtgcagtggggcgtccgggcggctaagatagtccag +ccactccttatgtgaatttatcaaaccgggaagaccagtgcataggccacgacctacgta +gcacctccgtacaaccttgctccagggcacgtctaaatgtcgtactgggttcggactcca +tgcctggcgactagcctggcggtccacatattttacaaatccgagacaacaaagcacttc +caaagtcgcgtggaccttaaggaaggcaacacaggggacatttagccactctaaagaccc +gcatactccagggcatacacgtaacgcgttctcttcactacggagtccgcgagcgaacga +ctaagggcgagggccgtagatctccttctcgtaaatataatcaaggttgccagcgcttat +cggtgccaccgatccgaagagcgtaaggacgttacagtgtaggatacatggtttgcgccc +gtccatacataatcgaccatcaaatcgaaagcgcgtatgcagtacctcgtactgcccaaa +ggacagagcgcattacgtcaccccgagcgtagcttaccatgttaagaccgtgctcatggt +ttccacccgtaagatgagcacagattgcttgctctaggtaacatagtaataagagaacat +tcatagacgttggaccacggttgaaagaccgcctcttaactactgaaaaacaatatttgt +ccttagtaaccaagatacattaatcaatcctccgctaatgaagttggtaggcaagccttc +agtagcgtaccgtggatttgtgtttactgcatttacaccgcggctgggtacgaagcggtg +tcgggcacgcacacgcgttcgatactgtaggtttcgttggggttgcttgttgccgctaac +gttcgggtcgcttacttctgcaggcttgattactgagttcattcgatcggttcccaactt +cggactattgcgccatcatcaatgtgggaaatcatttttaggaatacacctcgtacatgc +atatgaagtctgcgtgcaacagactttccatgatgcgagctgggcttcccgtcctgcggg +atgcaattggcccagtgcgcgaaggctgggctgattacggacatatctgctgtcctgaca +atcgatggtgtagagcgtaacaatcattccaatttttcgacacgggccagggctttaggc +cactacgcacctgggttaacactcggcgacccgcctaacactgggtggacattcccgagt +tataacgacacctcattttcaacaaccacaaaaaggcataggcaaccgaactaacctttt +gtttagttacttctggtatgttcatagtgtagggcaggtgatcggttaaacgcttgtacg +gaccccattctgtagcgcttttctgaacgataacactacgttgggagatacttgttgcgc +agtcgtgggttaaaagcgagccgacgataaactgcaataaggaaagcggacctgtcacct +cccgcgggtaaatctactcgctcgtttagaggccgtaaagcgacataacggtgtccagta +caagcccaactggtttagagaattcttctcctactacattcaccgtccgtatttcggcgc +gccctacggtattcgtggtgttctgagcatacatgggatggactatcacccctgcgcgta +aggactagcagttgtaagtcacgttaaggttgcgtaggcaactgttggagtgcgtccata +cttttcagcaccccgaatttgtacgcccaagttgtatcgtcgtgctgggacgagactcag +cctttaccctaagcgtttaggaaagcgatgttttaccgcagacgcatatgagagaacgtt +gcaagatcgatctttctcgcgcacgttctgtagctagacctgcagctaatctaactgccg +aactgttaggatgttttctctcctagacgcagggaccagttgtaagtaagggtttctcat +cgctaggctagggtgatggtaggtgataccaatggagcggcgcgttaaaagggttgtaat +ctcggtgatatgtgcaccatagattgttccgttattttccttggtcatttagatacgaga +taggggcgccccagtgccacgaggtccatcttatgctgttgcgtagctagagccctacaa +ctttctaagtaaaacctccatcgagtgcgcttggagaatttcatgtaccgtggcggtacc +ttacttgatgccgcgacccctatctaattaaagaccgcttcccgatgggcgaccttaatc +ttgctgcagtccaagttaacttcctctacgcccgatgacaaatttagccggagtaagttg +ttaacctagcctaatttgtaccgaattttgggttgtgagaagaccatttctacccgacga +tcatgggttcctctcaactatacctagtgtcggttaatgatttatggcaaacaatccccc +aatgtagcacccatatgggcgcaattatgtgaacttcaacactaactattggtttagtta +gtgatatttagcgcaaataagaggcatgggctgcgaaaagattgtgtttccgcaatgcta +gggaacctgacggcatacccgagatgatagttaggtgagcccgaatcatgcttgattaac +gtaacgtctatcactacccgtgggcttttgcgattgcgatgcgttactcaaggcatactc +aatggggctggtaataccgatatgggcctgtgtcttagcagcgacgtgtcgataatcgaa +gtacaatacgccagtctacgttagggctttgctaacacatcacccacagttgaagcatca +cgcacagccctcattaggttgtcgtcaacctggaactcctagcaggctgggcagtatggc +atccttcacgaacaatcttaagagacgcacttgacacaggttgcgacagtcaggatgggg +agcttctgaaaatctctacataaggtggcctcgtgatatcgtattaactcggagagcggt +tggactaatgagtgagtccaatcagtgatcggtttttaatgccgggaccacggcttgcgg +ctgcgcgatctatttccctcgcgttacacaaggggtaggcataagcaacaagcccaaaaa +aatcctcacgcaggcgtcaggtacagactttttccctcagcaacgcaaggtacacgtgta +gtcgaatgtggtcataaccagcagctgtcttgcgcaagggcggtgctacacgcatgtttc +actccacagtgacatgatgcccgctcttcggttgttctatgcagcgcgctggtcgcacct +taagcccagttcaatccatgcaattcaccgttgcagcactagatcatataccgcatactt +cgtcagagcacaaccagatcacttacaacgaccgcaagctaagcatccctatcgtgcgta +tgtgtcgaggcgcaagtactatggtcggatgaggaggtgtgccctcaggacacacagtat +cgctcctcattcgacgacgcaagtcgtctagttctatgataggcgaagtgagtactgcgg +atcactacgcccaagacttggagtgacgacgccggctactagcgatggcagttcagaatg +gtgccttccaagggacactcggtcctaatcaggcacacgcgtctcaaagccactactcat +tcatgagctcgctggcgtggcagtggtcttatgcggctagcgaccagaatttctactagc +cttaggcgtacaagcgttgggcaggtcgcgagtaacctctacactctatcatggaccaca +cccatccatgttttaaacacagaggtcttaagaatagcgatggtacggttgagaacgtgg +gagttttttgctctacagcaagcacgttgcagtgaggagagctttaatcctaaatcataa +gtgatactggtgccgagcatctttcggacgaatatgaagacccaacgctaatgtgcctgt +tcgtcggcacattctcttgggacacccgctacccacatgtatgtgaattgggcccgtctt +gattgtgtcgtagatgccaacggttcaatcagccccgacgacgagaagcatttctacgtc +tccagccttgcaacggtttctagagtcttgctgttcgtaaattgaagaatctactgtgca +gactttatcgacccacgatacgctaatccgagcgcgactcggtctcggaaaattatccga +gggagctcgttcaatgcggcggaggctctgagtgaagtttaaggctgagatagtcacacg +cattcgggtccctacaccttgtttcgaatgtccaacgcgaactctgggcaacatcgcgag +actttgaaagatgagggggctgtgacagggcctttgtaataggggtactttaagggcggc +acaatgtgatacctatgtattcctatggtctgggtcagttatttaaattgaccggacaag +aatctgactcgtagactgctgtatagatcacgattagagtttggcaatggttctgaaagt +gatcatgtctaacgtaccggatgacactagtaataactgcagcagcgtgacgatgtaggg +gacttactctgtttacgggtctcgtctgccataaacatcctgctccggcagcggtcaaag +acgtcctattatcgcactcgggcagaaactccagtcatggtgaggcacaccaacagtgtg +gggtcggttcgtggttaccaagccaccatttttcggcccaaactcatcttgaatagtcgt +cctcattcatttgatcgatcgtcattacaaggttcataaatgcccagcgccgcgtctccg +gccagatggaagagctacgtgcaggcggtaagcaattgacgctatagccctatatacgta +tgtgggactcaaggcgacatgctataccgactggtatcgaggcgaacgacaattgctatg +ggtcatcacctcatatttagattcagcccctggtggcgtcgctttgaccaactagttaag +gttgaggagttcgctctcaaacctgataacgagctaggccatgtaccaaccttggctgtg +caccgacgagctgaaggaccgagctgctaggaggtcgcagtatcgattgctctttcagcc +ttctaaaggtgcgacagaaacttgaacctctcggtactctaacactaggggtacgagtgg +ataactcgattacattagtcctggtacaaaagtcctccttccgggcgccttaagctgctt +taaagctatgtccgcttacgagaaaggggcgcacggtccgatctacttacagactgtcaa +aacggtgtagtcggaatgggctcgaacgacgctaatagatacacgcgcattggcatggta +cttcaccaatactatatctttaaagaagggcggcgagcctatttacccacttcgattagg +ggataacacaggtgattgagttttctggaaccgtcatctaatagccgaagcagtccacat +tacagtccattgcatttaaccactaggaatcgcgccaatcttgcgcttatgttgtttagg +aggggccacgctagatcttgcctatcctgagttatatgagggacgatcctacatgtatcc +tcaaagttcgcgctcatccttagattctaggagatggattactaagtgtgtgtccatagt +ttaacgcaacacataatgttcgtgtcgtgatgcgtatccttggtcccgacctactactct +agacctatacgatagcgttcaaagctccaccatcgatgcaacgtggtcgtaccagtactt +atgaaaccttttttcgcagttcgaaccgcctggaaagaagcatacgcaatatcgtgtgat +cagcacgcagggtatcagttaaagagcccaagacttagtctatcgagcagaagaccgatt +agggtatacaccatgtcagaatcgcctccagactagtggctgatatcgtacgttacacga +ggtcgctcttgtcgagtgctcgaacgatctatcccctagatcacgcgtcccagtcggagt +atcccgcctcggatcgaaatgacggctaaaaggtgtaatcacgcgcgtaattcctgcaag +ctctctgagttctgctcgctggttcgaatgagcctgcaggcagtacctacaattcctgct +cggaggacctgttgcgagggatgcccccatacactgctgagggtaagtagctgaagtata +aaggcggcaatcttctgacaaacacccttcttccccttggttaaccagacaagctggatt +tatcacccctcccggggacactgccctgttttatatcgcggacttgcatcagtcgcagta +gtccgcgtagatgtggggacccctcccaccttacatggcaacgcgtgatggagtagtatc +tcgcgtcagtgagcgagttcgcatatttgtagggcgtcataacaaatgtaaatgctagta +agtgaaagatgtcaacatgcgggctcggttttgcgctccaggtatatcctgcatctgatg +aacttttcaatgaccgtgtctggcgcagggctgtcgttttgcaggaggggatgcccagcg +catctcgagaatcatcggctaatcaacgcgaaaaagttaatcttctatcagtcagcgggc +tataactccttgaccaacagaggatcgcaggtatttgtactgtggagaaacaatcgtaag +atggccggccatgaggcaaggattgtaatataccggggtggttatcgaagaagtaaagta +aggcctaccttctggggagcaatggggttctcagacgctaactcttcgttcacctacaac +acgattggacttagagagggacctacggacccgaaattcacataggggggttccccgata +agccaaggcaggatagagtctgaatccatggacttccatcaaacccctgtggtggttccg +ttcaagtcagggagtatcacgactcacttactgagtcacgtcctcaatatgactgaagtc +gataagacgaaggcttaatttacggaacccccgtttagtaatcaagaaacgcattggcgc +gggtctaacgtaagctcttcacaccgccgtctacgaaccagttcccggcgttgcatggtg +atcgccgggttcccttggagggagtaccttgtgccctgcccgtatggtcgttcctaaata +gcgaccaagtattagttgactgttgcgacttaaaatccaacccataagcatatatcgtgc +acccagggactggagggcctcagccccttctttcgaaacttaaaccgtcttcttatgggt +gaaatgtaagtttctacgtctggaataaacggttcgggccaccatgaagcgtctcgtgtg +atagagattcgcaatgagtctgggaagtagaatcacaccaagttagaaaaattctccaac +tcagctaccgcgacccatccgttggggtaacgcaagggtattagccgctcagaggccaaa +gattagagaaacgcgacgcctgcggctgtcttgtgactactccgaccatgccgtcagctg +gagaccctacggtgggtagttgggtagagcgccgatagctaattctcgagtggaactgcg +gaatgtgtcatatgaggtagcgatattgggctatcacaagtacgtgagcctgtgaaaacg +gacgactcactagcaagtaagcacggccctggcgtggcggcggtacgcgtacaaacctcc +actgcttggggaataaggtgcgaacaccgtgatccattgaggcgtggaggcatagggccg +gagtgttcccgtaccaattacgagctaagaccgcctgtccagccctggtgattacgtagt +aagctcggtacaagcctgtaattagcttccgggtggcggacattcgttcatattgccagt +cacggcagaggccgcgctagctaggccagccccgatgaaacacgtgctagttttctatcg +tgcctaaggatcgatggctatcgcggcattgttaacttatcaagcagccgaatcggcgat +agtggacacaacatgaacacgctaagctctgagtgccagactctaccgcggcgaatccta +ggccctgctggggctcccccacagagcagtaatggtcttctgcggccgcgtgcattcaat +ccgcgctggtcaatgcgttccatcgtgccttaagcggggcagtgtgataagacaattttg +ggggtttcatggagatatcttcagaaacctcgcgaggtgcgtttagataccacacgcgcg +gcggtcttttcacacaattcagtccgcggccggtaacctaactttgcttatcaatacata +atcctcccaaatgtacggtttcgaaggagatacctctcccctgttagactctaggttttg +cagtgctacctagagatcacaccagcattaaaccaaggtatcagcatcgtaacatgggga +ggcacgcgcttggcggtaagtacccgccacgattactctgtttcatagcgccaacgcccg +tatagtgtgcttttaacgtcctcagaaatcaccgactgatcagtatggcgacatcggagg +gaggttggcgaaatgttgcttttatagatcgttaaaacctatcgttggcgcgtatcgcct +ccatagaacttcttactcacctagtctgatcccgggactggtcgaaatggagacgacgta +gcttgagatctggatcgatcgactgatatcacacttaaatatgatcagattttactacgg +tcgatctccatatatctatcccagcacttgatacctcctgtccagccgactgcttggacc +ctagcacgcgatattagagggcgcgttgtagctcaaagtaaccagtgggacgacccgagt +gaggttaccgctggcacgtaagggtgacatgactcccccagaaacactgaatttgtctag +cagtacatcataatctgagaacatttagcgaagacgagaacaagctgtctcaatggacgt +aggacgagaggaatgtgacggttataatacgcgacctctatgtgtctattaaatccctac +gggccgtagcgagcaagctcgggatctttagtagcggatcgggtcttctacatggcgcac +caggtttgatatttcgagctagagttgctctaaagaaacgctcttgcttgggaaagtgac +ctggggtacgacgaagacacgggcctggttgcataccgtctcaccttcattcatcgagcg +cgatagcgtagcattatccagcacgggaggcacctggcatgggcgtgaaatacaatccga +agagcagcatgaaaaaaaaatgagcggtcgtgacccgagggtgcgtccctccgaacgttg +ttcgttgccaaggtaagggacccacgccaagcatggttagggaagcgtgaccgacacaac +atagaggacaatctcaatatgccttctgggtatcacctgggtgtgtagcagtgctactgt +tacaagtcgcgccatctgcgacgtcgttcgtccctattccctcctaaaggccccgactct +gaaaaaacctacaatcctagacacgttgtggcccagcacaacgcgtctgctatacagcaa +gtcattcgtcgaatggggcaacacgtataagaaggccgtgattccaagggcacatggcgg +gtctctcaatgatctacgacgtgacgcaaacggggaaaggctggaccgttgtccggtagg +cgatccatcataaaaggcgtctggttctgtggttattgtgtacacgtttgaaatatctga +ctgtagaacgatggaggtctctacgtagctctgcacgattccctcgggctcacgttcatg +gcaaggcgacatcacatgaacagggttgggtaacagccatctctgaagcattcccccagc +tcgcacggctcctttacccgctactacgtcatgcactggctagagacccaccaactattg +tgcaagtaaagaccataaaattttggagctgtagcgaaagcgagttgctgcgatggttag +accaacattgggtcaaactattctaatccggctaggctcattaagcatcgcagattgccg +atactaatgctaacgagcgatgaatgggcctcttcgagacgcgtccgtacctgcgaatat +caaccatgaaccctaatctggaaagtttgatgccgctgtgatagccactcctgtgtcgcg +acggcaacgtaatgtacgtgcttggtttgagctctaaacataccttcgttagagttggtc +agaggaggatattgtcatagcgctacaaccagcgccaaaggatagctccgtggctggtcg +gacgcgctagaatctaggcagaacacgtgcggcttcttgcactctgacgctcacgcattg +gactttggcggtcatctggttctcataagtccgaatcacagtagataaagatccgcgtga +taagatatgcctacgtacttaagtagcaccctctgttcttggcgatcctatcattgcggg +ttctatacatatgttgatccaaccatcggccgccgggccgtcgtaggatctaatggccaa +cacatcaatcaaatcactcgcgaggacgcggaggtcccgtccataggtgtgtatgttggt +acgcagcacctaatctggtctggtcaagcaactggcttgttccagtatataatctcagat +agactgccctgaaagtagacaatgataaatatgtaagagcggggaaatcccatcgtcgac +tgtgttgcggacgattagcttgcaaagagaggtgtgagcggctgtcttaaattatggact +cctcgcttccgtcgaacgtctgactagagaatctcttggaggtacacacgaacgtaggtt +cctcacagtatgtggcatggacaccggacaggtcacttgtatttatccattgaacgtgat +atagtgtgtcgagtcgttatacaatacatactccaagcgtactccctttgggtaacgggt +ttgggtacatattaccatggtgtggaccgatttgtaaccctataagcgttccgggtactt +taccatcgcggatgcgatcgcggatctacctatgtcagcgacatactgcccgtccaaaag +tgattcagtatgtgttaatcagcgtattgcatcatcagtcattgagagtggaccgttctc +gaagagcaagattcctgaccctttccactgggccatccagtacacccaattatatgcaga +cgaaaagctccatacatatataatacctcttcacaccgtgtgcagagaccaacttgatcg +atattgtactcactcgtacggaataattagaagggcccgactgtcgagaccgttagcatt +tgcattatcgcggtgagcgtatagaaacaattataggctttgctgcgatcgcagtgtctg +ggacagagtctcctagacctagatcagcttaaaacaatgattgtaggtaatgtgcgttgc +cgtcgggccacacctttcagttcggttacaccgactcagaattatcttctatcgggaccc +tcaaactgataatggggtcaaatggtggtggtcccgtctttctgcagtgctttgtgagca +gaatagctctcgagcgctccagtacgcctgagtatggctgcgcccaccaattggcgccgt +taatgcgtggcgacacaagagaaccagtccacataagttatgcccttaagaagatcaccg +ggtttgcgccatcctgattcaggtaacggacgtccgtgtacacgaaccatactaatgagt +tctacatcgctccaacgcgtcttgaaccctatcgacaattacaaatgcaaagtattagtt +gggtcagtgcgtagcttatccaagggctgcagtaagtcgtccccatgacagacggacggc +ataagggccaaaaattccgccgcattagctgttaataatgccatccagaaccggacagtc +tcgatatataacttacggctgcgaactggcccttatgaattacatccacgtgctagttaa +caggacggatcgcccggactaattgccgatcggccgtcccattctccgtacgatgtactg +aacccaggcgtgtgaatgggtatgtcaacgtttacccatcgaccctgcctatagacctga +gtttcattccagttgagcgtagaatgggatgagcagctttgcttgaggtgcgatattcgg +gagacctggtcagcaggattgatggttttatagtgctggattccctgctgaaattctctc +ttctgccgcatgtgaagaaggccttgcttcccttccacatgattgtaagatttcctaagg +cctcccagctgcgtggaactgtgagtcaattaaacctctttcctttataaattacccagt +ctcaggtatttccttatcgtggtatgagaacggattaatacagttgtgtaagccagctcc +ttataataaatctctctccctctctctgcctctcatctatgtatgtatgtatctgtcatc +tatctcctataagttgtttcttttgagaactctgactaacatagacattaaataaacaat +ttgtatactgaataattatataactactgcttgggggtgtggttgtgttgtgtggtgagg +gggtgtagaaatgtctaggggttgatctagcctaacaccttccagatgaccctaggttct +ggcctttccccaaagagtcctggtctactcagtcatctcccacaatttggccatcttctt +gggtgctcaggacaataaatgacccagccagatcctctagagtcgacctgcaggcatgca +agcttggcgtaatcatggtcatagctgtttgctgtgtgaaattgttatgcgctcacattg +cacacaacatacgagccggaagcatacagtgtagagcctggggtggcgtatgagtgagct +aactcacattaatttgcgtttgcgctcactgccgcttttcagtcggggaaactgtcgtga +cagctgcatttaatgatcggtcatcgcgcggggagatgcggttttgcgtattgtgccgca +ggtggttatttctctcaacagtgagacgggcacagctgattgccctcaccggctgggctg +agagagttgcagcaagcgtacacgcggggtttgcccagcagggcgaaattcctgttgtga +tgtggattccgaatcgggcaaatgccctataaatcaaagcatagtccgagatagggtttg +agtgtgttcagttttgggacagaggtcactataaagaacgttgactgcacgtcaagggcg +agaaacgtcatcaggcgattgcactacgtgacatcaccaatcagttttttgggtcaggtg +cgtgagacttatcggaactaaaggagcccgttttagcttcggggaaacgcgaagtgtcgg +aagaaggaaaacgaagagcgggtatcgcggaatgtacgtgctgagcgaaaccaacgcgcg +ttacggtcaagcgtgtatgtgttttggaggtaagtttccctgataaagcggaacaggggc +tatgtgtttacgggggtcgcatggagtacaagggggcaggacaagatttgcgcgacatgg +ttttttttaaattgcgggagatggttggctgtcccgatgagattagaacctgcttttgtt +ttagtttcggttcggtcagttcggactttggattggttttgttgggtatttaagaagggt +gtttgtgggatgtttttttttgggtcgagcatcactggactatgtgtgtcctgcgtatcg +tggcggggcctcgaacttagaggtaggacgattccgatgcaacaaccttatgctttactc +caagcgatggtgaggcaaccttgtacagaagtgcaaccgccattgtggctgggtcggccc +aaggaacggatattctcctgggtactgacaacccaggtctactgggttctatcgacggta +cagtcaagcctcgagtttactgtctcccacttaagtccgctctgggcattaatgagtctg +tggggtatcaagggtcacccaacgaagtagctagtcccgttgtacatttcgcgcgttacc +tagggagcacggtgagctacgagggtgtagctgcacacagcacggtatataggaacgcaa +acatagtagtatgtccctatgcataacagggagaagtgactctccgacggtcatttatcc +cagactctcctcgctccctactaattgttctatatacaatcggagtaaattggtacctct +ctgacaacataggggggttgaagtttatgccacgcagtctgttacacttttgccggggaa +ttgtgtagaccatgactcaaggtggtggtgcgagttactctactatctactgcttctcat +tacacatctcttggcttacaggccccagttatcagttacgaggctgccttaagagaaggc +caacattcatgatcagatccccgcacacgggatgatagtctgagatctgccggacgctcg +tctgctacaagtgtgggttgagcatagggtaagcctaagggctcgtaatggtacttcgcg +atgtttattcgatatgagctacaaggtataacgttgccttcaccatttcggctcacgact +cttacctcgcctcaccgctagacaccctgaccaaccgttagggtactgacaaccgatcag +gcgactcctaaaggacctctcagcctcccagacatgaggtccgctcgcatgctgttcagc +gagtccatatcaggaacagcaacgagacaaggcgagagcaacactagacttggagacata +ccaccacatctgtttactcttgattcaggaagacctgtggtaactgggcgacgcgtgcgt +ttatccgtcttccaatctccacagaatctgctccgtcagagggatgtatgactaacgcac +tgattttttgttcagtaaccgggcgcggattacggggcgtattccaggggtacattcaac +gggaccccaaggaaaagttcggggtatttaaggaggcggtccaactctcggacttattgg +gcgacgtaatgataagcacacctctgctcatacagtgcacgaagaccggcattgttcaaa +cacagccgtccattccgcgactattgtcctgtgtacaggtgcctcgggtcccaaatccag +cttatacccaaaactctcccggacttttttcgtccttgcaggaggaaaggacctgactcc +acgtttattaggggatcgttgggcccggacaatcgtgtattcaacataataaatgggttc +tagtttaaagccggaggtgacggtggattatggactagaggtaaacatttccggcgtagg +tcagaaagaatatagaccctaaatttacgcaaaacgtgcacacgattgtaggtggagtcg +tattaggaactcagggcgggtggaacgagtgtgttttaggcttaccatgaaccgtcgcgc +ggaaaatgatgacagaatggacggtgcttttttgcggggccaacaaaactcgcttatgtt +cgccattggatgtaagtaccgctatactacgcagcgaccccttacgacattgttgatttc +caatgctttcatggaggtttgtgagcggtcgctaggaatcttcctccagcgagtagccag +ctggccactagttagcaaccagagttcatatgagctccagtaacacgaaggtacataagg +aacgcaagcaagttcgggactacatagaacttggggtgcgtctaagccggggatcttaat +agacaagaggccatcgtatgggtcaaatttcatgtttcgtcagatgccctatccgtggac +acctaaatcaagcatcatatcctaatgctatttgctctcgctttggtatgattcatatgc +agccctgtccgtaaaatgacgggccagaggatacctgtcactacctatttcagattacca +ctgttcgaaaccttgctctgaaatcgatcttcgtagagtgttcgttaatcgccgcgtgaa +ttatataatcccccaaggagtacccttcgtcggtgcagtctacgtaactttcccaggtta +gcccccatctaatcgacgtacgtgagggggctacgggagatcgcacaagccgaagcattt +ctgctctgtttcgttacaactggaatcctcatcacgcagcgctaccggatgccatcccta +gtcatccccgcgagtttaaccagtcgagatggctcgaaccgtgtttcgaaggctggctat +tgaaccagttataaagcaggggcgactgtccgtcggacttcgatataaactatcacaaat +ttggcataagtatatacagccaagaaggctcagataggcacacgcacccaaatagtgacc +gcctacgttcaggttgcccggcaacgaagcgcgcttgctccattaatccactatcagagg +taacgaccctctttcaccgtagctgcccccatgtcggggcaacagtttcccaccgataac +gtgttctgtctagtacgtgaaacggattggctaacccctgtcagcctaattagatgacat +cctcgtacctctagagaaggtgaggagaccgctggaacataagtaaacagtttaccaaac +aatgatcatacatataacagaaaggagagatgcccggtggggtcgaagatacagctgtgg +ttgatatctgcaacggccaggctgtcatgaagatcacgcgcacgaagctatttatgaaag +atacccatgccggggcggcagcggtacctagtcctaaataccgacacgtagcaacgcgtc +ccctgaggcccaccctagtcaagggaacttaaaatatacgctgactttgtctaccaatca +tcttcgattaacaccggcatactaagtctaccctggacccagcaatgagaaaaacttttc +cgaatgatcattgtgagtttacagagattaggaacaccaaaaaaatttacgtacgtccgg +ttacccctgtgtgacccttggccacaaaccgtaaggtgcagcatgggcgttgagtccagg +gtttgtgacaccagacatgaataccctgtggcgggttgttagcatgttattcggatccga +tttcagagggtccgttgataccgggcagtacaagacaccccacaccactgaggtggtacg +tccgccagtctgctccctacgttatgcaaaattccttccccggcgttcttgcctgtacta +ctcctaaagggccgtgaaatccgacgttgctgctccgtctcgggacacccacacaacagc +tacggaaaatcgtgaggatgcacaagggtcttgcattgttgatctatacagctcttcgca +cggtgtgctactgttttccacaatgggcaaggggcgtgtaggtcttatgtaggagtaccc +cgtgatctggctataccttgctatctattccaccaaaatagccggggtcttatagtttta +ttccggatctatcaagtgacaagtccatggggtaaacggtaagtttcgtacgctgggcgg +tgatccccgcttataaacgagcaaaccgccaaagcaaccattgccgggcttccagctagt +aaatgttgggtgtcaatcgtgcatgtgactacttacccacaaagggacgcttgaagcgcc +tgaactcgtcacgtcatgcctagctcccggttgaaacacgaagacgcgtgaacctatctt +tgcttactattcgcctcctttaagaggcttcttgatgtggctctgcgacatggacagtag +tagttgtacctgggtatgttagtgaaattacaagtacctcaaaaacgaattacgtgtata +gagattatgtcactccgtcac diff --git a/packages/apollo-collaboration-server/package.json b/packages/apollo-collaboration-server/package.json index 162ca7ef5..39ab7526d 100644 --- a/packages/apollo-collaboration-server/package.json +++ b/packages/apollo-collaboration-server/package.json @@ -20,7 +20,8 @@ "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", - "cypress:start": "GUEST_USER_ROLE=admin MONGODB_URI=\"mongodb://localhost:27017/apolloTestDb?directConnection=true\" LOG_LEVELS=error,warn yarn start" + "cypress:start": "GUEST_USER_ROLE=admin MONGODB_URI=\"mongodb://localhost:27017/apolloTestDb?directConnection=true\" LOG_LEVELS=error,warn yarn start", + "test:cli:start": "ALLOW_ROOT_USER=true ROOT_USER_NAME=admin ROOT_USER_PASSWORD=pass MONGODB_URI=\"mongodb://localhost:27017/apolloTestCliDb?directConnection=true\" LOG_LEVELS=error,warn yarn start" }, "dependencies": { "@apollo-annotation/common": "workspace:^", @@ -30,7 +31,7 @@ "@emotion/styled": "^11.10.6", "@gmod/gff": "1.2.0", "@gmod/indexedfasta": "^2.0.4", - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "@mui/base": "^5.0.0-alpha.118", "@mui/material": "^5.11.14", "@nestjs/common": "^10.1.0", diff --git a/packages/apollo-common/package.json b/packages/apollo-common/package.json index 697640025..8c21a079e 100644 --- a/packages/apollo-common/package.json +++ b/packages/apollo-common/package.json @@ -13,7 +13,7 @@ "dependencies": { "@apollo-annotation/schemas": "workspace:^", "@gmod/gff": "1.2.0", - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "bson-objectid": "^2.0.4", "tslib": "^2.3.1" }, diff --git a/packages/apollo-mst/package.json b/packages/apollo-mst/package.json index 0f35412b2..3960481b6 100644 --- a/packages/apollo-mst/package.json +++ b/packages/apollo-mst/package.json @@ -6,9 +6,10 @@ "build": "tsc" }, "dependencies": { - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "mobx": "^6.6.1", "mobx-state-tree": "^5.1.7", + "react-dom": "^18.2.0", "rxjs": "^7.4.0", "tslib": "^2.3.1" }, diff --git a/packages/apollo-shared/package.json b/packages/apollo-shared/package.json index d00aa7153..8377c44f5 100644 --- a/packages/apollo-shared/package.json +++ b/packages/apollo-shared/package.json @@ -15,7 +15,7 @@ "@apollo-annotation/schemas": "workspace:^", "@gmod/gff": "1.2.0", "@gmod/indexedfasta": "^2.0.4", - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "bson-objectid": "^2.0.4", "generic-filehandle": "^3.0.0", "jwt-decode": "^3.1.2", @@ -32,7 +32,9 @@ "mobx": "^6.6.1", "mobx-state-tree": "^5.1.7", "mongoose": "^6.12.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", + "rxjs": "^7.4.0", "tsx": "^4.6.2", "typescript": "^5.5.3" }, diff --git a/packages/apollo-shared/src/Changes/AddFeatureChange.ts b/packages/apollo-shared/src/Changes/AddFeatureChange.ts index 63d028908..e250d909f 100644 --- a/packages/apollo-shared/src/Changes/AddFeatureChange.ts +++ b/packages/apollo-shared/src/Changes/AddFeatureChange.ts @@ -34,7 +34,7 @@ interface SerializedAddFeatureChangeMultiple changes: AddFeatureChangeDetails[] } -type SerializedAddFeatureChange = +export type SerializedAddFeatureChange = | SerializedAddFeatureChangeSingle | SerializedAddFeatureChangeMultiple diff --git a/packages/apollo-shared/src/Changes/DeleteAssemblyChange.ts b/packages/apollo-shared/src/Changes/DeleteAssemblyChange.ts index d7bc860c2..725006457 100644 --- a/packages/apollo-shared/src/Changes/DeleteAssemblyChange.ts +++ b/packages/apollo-shared/src/Changes/DeleteAssemblyChange.ts @@ -11,7 +11,7 @@ import { } from '@apollo-annotation/common' import { getSession } from '@jbrowse/core/util' -interface SerializedDeleteAssemblyChange +export interface SerializedDeleteAssemblyChange extends SerializedAssemblySpecificChange { typeName: 'DeleteAssemblyChange' } diff --git a/packages/apollo-shared/src/Changes/DeleteFeatureChange.ts b/packages/apollo-shared/src/Changes/DeleteFeatureChange.ts index 491f7ec2f..465c462df 100644 --- a/packages/apollo-shared/src/Changes/DeleteFeatureChange.ts +++ b/packages/apollo-shared/src/Changes/DeleteFeatureChange.ts @@ -32,7 +32,7 @@ interface SerializedDeleteFeatureChangeMultiple changes: DeleteFeatureChangeDetails[] } -type SerializedDeleteFeatureChange = +export type SerializedDeleteFeatureChange = | SerializedDeleteFeatureChangeSingle | SerializedDeleteFeatureChangeMultiple diff --git a/packages/apollo-shared/src/Changes/FeatureAttributeChange.ts b/packages/apollo-shared/src/Changes/FeatureAttributeChange.ts index 60a8b82c0..989ab566a 100644 --- a/packages/apollo-shared/src/Changes/FeatureAttributeChange.ts +++ b/packages/apollo-shared/src/Changes/FeatureAttributeChange.ts @@ -29,7 +29,7 @@ interface SerializedFeatureAttributeChangeMultiple changes: FeatureAttributeChangeDetails[] } -type SerializedFeatureAttributeChange = +export type SerializedFeatureAttributeChange = | SerializedFeatureAttributeChangeSingle | SerializedFeatureAttributeChangeMultiple diff --git a/packages/apollo-shared/src/Changes/LocationEndChange.ts b/packages/apollo-shared/src/Changes/LocationEndChange.ts index 7d014d974..ee7ff119f 100644 --- a/packages/apollo-shared/src/Changes/LocationEndChange.ts +++ b/packages/apollo-shared/src/Changes/LocationEndChange.ts @@ -30,7 +30,7 @@ interface SerializedLocationEndChangeMultiple changes: LocationEndChangeDetails[] } -type SerializedLocationEndChange = +export type SerializedLocationEndChange = | SerializedLocationEndChangeSingle | SerializedLocationEndChangeMultiple diff --git a/packages/apollo-shared/src/Changes/LocationStartChange.ts b/packages/apollo-shared/src/Changes/LocationStartChange.ts index d184d304a..9ee278a18 100644 --- a/packages/apollo-shared/src/Changes/LocationStartChange.ts +++ b/packages/apollo-shared/src/Changes/LocationStartChange.ts @@ -30,7 +30,7 @@ interface SerializedLocationStartChangeMultiple changes: LocationStartChangeDetails[] } -type SerializedLocationStartChange = +export type SerializedLocationStartChange = | SerializedLocationStartChangeSingle | SerializedLocationStartChangeMultiple diff --git a/packages/apollo-shared/src/Changes/TypeChange.ts b/packages/apollo-shared/src/Changes/TypeChange.ts index 6b09a5ebd..71aa89035 100644 --- a/packages/apollo-shared/src/Changes/TypeChange.ts +++ b/packages/apollo-shared/src/Changes/TypeChange.ts @@ -29,7 +29,7 @@ interface SerializedTypeChangeMultiple extends SerializedTypeChangeBase { changes: TypeChangeDetails[] } -type SerializedTypeChange = +export type SerializedTypeChange = | SerializedTypeChangeSingle | SerializedTypeChangeMultiple diff --git a/packages/apollo-shared/src/GFF3/gff3ToAnnotationFeature.ts b/packages/apollo-shared/src/GFF3/gff3ToAnnotationFeature.ts index fa5d00892..34d9146b9 100644 --- a/packages/apollo-shared/src/GFF3/gff3ToAnnotationFeature.ts +++ b/packages/apollo-shared/src/GFF3/gff3ToAnnotationFeature.ts @@ -122,9 +122,9 @@ function convertFeatureAttributes( const existingVal = newAttributes[newKey] if (existingVal) { const valSet = new Set(...existingVal, ...val) - newAttributes[newKey] = [...valSet] + convertedAttributes[newKey] = [...valSet] } else { - newAttributes[newKey] = val + convertedAttributes[newKey] = val } } } diff --git a/packages/apollo-shared/src/Operations/GetFeaturesOperation.ts b/packages/apollo-shared/src/Operations/GetFeaturesOperation.ts index 30fe1a750..a035b1faa 100644 --- a/packages/apollo-shared/src/Operations/GetFeaturesOperation.ts +++ b/packages/apollo-shared/src/Operations/GetFeaturesOperation.ts @@ -45,8 +45,8 @@ export class GetFeaturesOperation extends Operation { return backend.featureModel .find({ refSeq: this.refSeq, - start: { $lte: this.end }, - end: { $gte: this.start }, + min: { $lte: this.end }, + max: { $gte: this.start }, status: 0, }) .exec() diff --git a/packages/jbrowse-plugin-apollo/cypress/e2e/downloadGff.cy.ts b/packages/jbrowse-plugin-apollo/cypress/e2e/downloadGff.cy.ts index e68204de0..871f957c0 100644 --- a/packages/jbrowse-plugin-apollo/cypress/e2e/downloadGff.cy.ts +++ b/packages/jbrowse-plugin-apollo/cypress/e2e/downloadGff.cy.ts @@ -35,7 +35,7 @@ describe('Download GFF', () => { cy.readFile(`${Cypress.config('downloadsFolder')}/${gff[0]}`).then( (x: string) => { const lines: string[] = x.trim().split('\n') - expect(lines.length).eq(952) + expect(lines.length).eq(933) }, ) }) diff --git a/packages/jbrowse-plugin-apollo/package.json b/packages/jbrowse-plugin-apollo/package.json index 8327f09c9..d85f3da05 100644 --- a/packages/jbrowse-plugin-apollo/package.json +++ b/packages/jbrowse-plugin-apollo/package.json @@ -75,7 +75,7 @@ "tslib": "^2.3.1" }, "peerDependencies": { - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "@mui/material": "^5.11.14", "mobx": "^6.6.1", "mobx-react": "^7.2.1", @@ -88,7 +88,7 @@ }, "devDependencies": { "@jbrowse/cli": "^2.6.2", - "@jbrowse/core": "^2.11.2", + "@jbrowse/core": "^2.13.1", "@jbrowse/development-tools": "^2.1.1", "@jest/globals": "^29.0.3", "@mui/material": "^5.11.14", diff --git a/yarn.lock b/yarn.lock index a66da01ad..15ea07300 100644 --- a/yarn.lock +++ b/yarn.lock @@ -119,6 +119,7 @@ __metadata: version: 0.0.0-use.local resolution: "@apollo-annotation/cli@workspace:packages/apollo-cli" dependencies: + "@apollo-annotation/mst": "workspace:^" "@apollo-annotation/shared": "workspace:^" "@inquirer/input": "npm:^1.2.14" "@inquirer/password": "npm:^1.1.14" @@ -142,6 +143,8 @@ __metadata: nyc: "npm:^15.1.0" oclif: "npm:^4.4.2" open: "npm:^10.1.0" + react-dom: "npm:^18.2.0" + rxjs: "npm:^7.4.0" shx: "npm:^0.3.3" ts-node: "npm:^10.3.0" tslib: "npm:^2.3.1" @@ -166,7 +169,7 @@ __metadata: "@emotion/styled": "npm:^11.10.6" "@gmod/gff": "npm:1.2.0" "@gmod/indexedfasta": "npm:^2.0.4" - "@jbrowse/core": "npm:^2.11.2" + "@jbrowse/core": "npm:^2.13.1" "@mui/base": "npm:^5.0.0-alpha.118" "@mui/material": "npm:^5.11.14" "@nestjs/cli": "npm:^10.1.10" @@ -245,7 +248,7 @@ __metadata: "@apollo-annotation/mst": "workspace:^" "@apollo-annotation/schemas": "workspace:^" "@gmod/gff": "npm:1.2.0" - "@jbrowse/core": "npm:^2.11.2" + "@jbrowse/core": "npm:^2.13.1" "@nestjs/common": "npm:^10.1.0" "@nestjs/core": "npm:^10.1.0" "@types/node": "npm:^18.14.2" @@ -278,7 +281,7 @@ __metadata: "@emotion/styled": "npm:^11.10.6" "@gmod/gff": "npm:1.2.0" "@jbrowse/cli": "npm:^2.6.2" - "@jbrowse/core": "npm:^2.11.2" + "@jbrowse/core": "npm:^2.13.1" "@jbrowse/development-tools": "npm:^2.1.1" "@jbrowse/plugin-authentication": "npm:^2.0.1" "@jbrowse/plugin-linear-genome-view": "npm:^2.0.1" @@ -329,7 +332,7 @@ __metadata: tss-react: "npm:^4.6.1" typescript: "npm:^5.5.3" peerDependencies: - "@jbrowse/core": ^2.11.2 + "@jbrowse/core": ^2.13.1 "@mui/material": ^5.11.14 mobx: ^6.6.1 mobx-react: ^7.2.1 @@ -346,9 +349,10 @@ __metadata: version: 0.0.0-use.local resolution: "@apollo-annotation/mst@workspace:packages/apollo-mst" dependencies: - "@jbrowse/core": "npm:^2.11.2" + "@jbrowse/core": "npm:^2.13.1" mobx: "npm:^6.6.1" mobx-state-tree: "npm:^5.1.7" + react-dom: "npm:^18.2.0" rxjs: "npm:^7.4.0" tslib: "npm:^2.3.1" typescript: "npm:^5.5.3" @@ -382,7 +386,7 @@ __metadata: "@apollo-annotation/schemas": "workspace:^" "@gmod/gff": "npm:1.2.0" "@gmod/indexedfasta": "npm:^2.0.4" - "@jbrowse/core": "npm:^2.11.2" + "@jbrowse/core": "npm:^2.13.1" "@nestjs/common": "npm:^10.1.0" "@nestjs/core": "npm:^10.1.0" "@types/node": "npm:^18.14.2" @@ -394,8 +398,10 @@ __metadata: mobx: "npm:^6.6.1" mobx-state-tree: "npm:^5.1.7" mongoose: "npm:^6.12.0" + react-dom: "npm:^18.2.0" regenerator-runtime: "npm:^0.13.9" rimraf: "npm:^3.0.2" + rxjs: "npm:^7.4.0" socket.io-client: "npm:^4.5.4" tslib: "npm:^2.3.1" tsx: "npm:^4.6.2" @@ -3629,6 +3635,13 @@ __metadata: languageName: node linkType: hard +"@gmod/abortable-promise-cache@npm:^2.0.0": + version: 2.0.1 + resolution: "@gmod/abortable-promise-cache@npm:2.0.1" + checksum: 10c0/33b39ff5e2af0856cf7fa4e2c3a46de73396f1cba76f075aa6350e2c045be526d6682072dc55f9808d01b37eb7c9dddfdfd433c1ecb10db58759d09451fb8d1a + languageName: node + linkType: hard + "@gmod/bgzf-filehandle@npm:^1.4.0, @gmod/bgzf-filehandle@npm:^1.4.3": version: 1.4.6 resolution: "@gmod/bgzf-filehandle@npm:1.4.6" @@ -3650,13 +3663,12 @@ __metadata: languageName: node linkType: hard -"@gmod/http-range-fetcher@npm:^3.0.0": - version: 3.0.3 - resolution: "@gmod/http-range-fetcher@npm:3.0.3" +"@gmod/http-range-fetcher@npm:^3.0.4": + version: 3.0.4 + resolution: "@gmod/http-range-fetcher@npm:3.0.4" dependencies: - abortcontroller-polyfill: "npm:^1.2.9" quick-lru: "npm:^4.0.0" - checksum: 10c0/656c9f01f8e2e18582f88e03977c00676f5d27496d420a958c942221d75d31226e6e0299c3434e26ce9fa125a5db511d65bdac58eac7af667a396f58ea823a4b + checksum: 10c0/45c9cf5ed9a7163b2bff405bef15ba33f234d1e988767853e3915844f9b18027057708c1a184a1cd6ab2a2587ebcd833d76d8431132d7d8f595e0b82f116ae00 languageName: node linkType: hard @@ -3865,17 +3877,17 @@ __metadata: languageName: node linkType: hard -"@jbrowse/core@npm:^2.11.2": - version: 2.12.3 - resolution: "@jbrowse/core@npm:2.12.3" +"@jbrowse/core@npm:^2.13.1": + version: 2.13.1 + resolution: "@jbrowse/core@npm:2.13.1" dependencies: "@babel/runtime": "npm:^7.17.9" + "@gmod/abortable-promise-cache": "npm:^2.0.0" "@gmod/bgzf-filehandle": "npm:^1.4.3" - "@gmod/http-range-fetcher": "npm:^3.0.0" + "@gmod/http-range-fetcher": "npm:^3.0.4" "@mui/icons-material": "npm:^5.0.1" "@mui/x-data-grid": "npm:^7.0.0" "@types/clone": "npm:^2.0.0" - abortable-promise-cache: "npm:^1.5.0" canvas-sequencer: "npm:^3.1.0" canvas2svg: "npm:^1.0.16" clone: "npm:^2.1.2" @@ -3902,12 +3914,11 @@ __metadata: mobx: ^6.0.0 mobx-react: ^9.0.0 mobx-state-tree: ^5.0.0 - prop-types: ^15.0.0 react: ">=16.8.0" react-dom: ">=16.8.0" rxjs: ^7.0.0 tss-react: ^4.0.0 - checksum: 10c0/4f2e95ec5db847422fcfc3493f5c21f7911ef348d64fbea194c44fecf47de461389f857c16da26b20fc6ad175693de8e3c3eef0e453100781dad85c326c398a4 + checksum: 10c0/8eaee9e8eddc48b35bbcb6f877f9d0a7cae4057b5c1fe997fdd23053f3a34da2e58a8b3a12faff4b9846a444a8b15d26cb5a3b4fdf18f2a6b0457a2849ec3292 languageName: node linkType: hard @@ -8166,22 +8177,6 @@ __metadata: languageName: node linkType: hard -"abortable-promise-cache@npm:^1.5.0": - version: 1.5.0 - resolution: "abortable-promise-cache@npm:1.5.0" - dependencies: - abortcontroller-polyfill: "npm:^1.2.9" - checksum: 10c0/fb330bf6612dcda00a05ca72a464c7847438a9dd32151f0e6b02372e9bbb57e83e2fc2c01a5bf4d7c4267a772fc1978240eb3ad45d664b4b39fef71618946ae6 - languageName: node - linkType: hard - -"abortcontroller-polyfill@npm:^1.2.9": - version: 1.7.5 - resolution: "abortcontroller-polyfill@npm:1.7.5" - checksum: 10c0/d7a5ab6fda4f9a54f22ddeb233a2564d2f4f857ec17be25fee21a91bb5090bee57c630c454634b5c4b93fc06bd90d592d1f2fc69f77cd28791ac0fe361feb7d2 - languageName: node - linkType: hard - "abstract-leveldown@npm:~0.12.0, abstract-leveldown@npm:~0.12.1": version: 0.12.4 resolution: "abstract-leveldown@npm:0.12.4"